diff options
Diffstat (limited to 'tools/addon-sdk-1.5/packages/api-utils/docs')
40 files changed, 0 insertions, 4384 deletions
diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/api-utils.md b/tools/addon-sdk-1.5/packages/api-utils/docs/api-utils.md deleted file mode 100644 index aee88da..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/api-utils.md +++ /dev/null @@ -1,157 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Drew Willcoxon [adw@mozilla.com] --> -<!-- edited by Noelle Murata [fiveinchpixie@gmail.com] --> - -The `api-utils` module provides some helpers useful to the SDK's high-level API -implementations. - -Introduction ------------- - -The SDK high-level API design guidelines make a number of recommendations. -This module implements some of those patterns so that your own implementations -don't need to reinvent them. - -For example, public constructors should be callable both with and without the -`new` keyword. Your module can implement this recommendation using the -`publicConstructor` function. - -Options objects or "dictionaries" are also common throughout the high-level -APIs. The guidelines recommend that public constructors should generally define -a single `options` parameter rather than defining many parameters. Since one of -the SDK's principles is to be friendly to developers, ideally all properties on -options dictionaries should be checked for correct type, and informative error -messages should be generated when clients make mistakes. With the -`validateOptions` function, your module can easily do so. - -And objects are sometimes iterable over a custom set of key/value pairs. -Such objects should have custom iterators that let consumers iterate keys, -values, or [key, value] pairs. The `addIterator` function makes it easy to do -so in a way that is consistent with the behavior of default iterators during -`for...in`, `for each...in`, and `for...in Iterator()` loops. - -<api name="publicConstructor"> -@function -Returns a function *C* that creates an instance of `privateConstructor`. *C* -may be called with or without the `new` keyword. - -The prototype of each instance returned from *C* is *C*.`prototype`, and -*C*.`prototype` is an object whose prototype is -`privateConstructor.prototype`. Instances returned from *C* are therefore -instances of both *C* and `privateConstructor`. - -Additionally, the constructor of each instance returned from *C* is *C*. - -Instances returned from *C* are automatically memory tracked using -`memory.track` under the bin name `privateConstructor.name`. - -**Example** - - function MyObject() {} - exports.MyObject = apiUtils.publicConstructor(MyObject); - -@returns {function} -A function that makes new instances of `privateConstructor`. - -@param privateConstructor {constructor} -</api> - -<api name="validateOptions"> -@function -A function to validate an options dictionary according to the specified -constraints. - -`map`, `is`, and `ok` are used in that order. - -The return value is an object whose keys are those keys in `requirements` that -are also in `options` and whose values are the corresponding return values of -`map` or the corresponding values in `options`. Note that any keys not shared -by both `requirements` and `options` are not in the returned object. - -**Examples** - -A typical use: - - var opts = { foo: 1337 }; - var requirements = { - foo: { - map: function (val) val.toString(), - is: ["string"], - ok: function (val) val.length > 0, - msg: "foo must be a non-empty string." - } - }; - var validatedOpts = apiUtils.validateOptions(opts, requirements); - // validatedOpts == { foo: "1337" } - -If the key `foo` is optional and doesn't need to be mapped: - - var opts = { foo: 1337 }; - var validatedOpts = apiUtils.validateOptions(opts, { foo: {} }); - // validatedOpts == { foo: 1337 } - - opts = {}; - validatedOpts = apiUtils.validateOptions(opts, { foo: {} }); - // validatedOpts == {} - -@returns {object} -A validated options dictionary given some requirements. If any of the -requirements are not met, an exception is thrown. - -@param options {object} -The options dictionary to validate. It's not modified. If it's null or -otherwise falsey, an empty object is assumed. - -@param requirements {object} -An object whose keys are the expected keys in `options`. Any key in -`options` that is not present in `requirements` is ignored. Each -value in `requirements` is itself an object describing the requirements -of its key. The keys of that object are the following, and each is optional: - -@prop [map] {function} -A function that's passed the value of the key in the `options`. `map`'s -return value is taken as the key's value in the final validated options, -`is`, and `ok`. If `map` throws an exception it is caught and discarded, -and the key's value is its value in `options`. - -@prop [is] {array} -An array containing the number of `typeof` type names. If the key's value is -none of these types it fails validation. Arrays and nulls are identified by -the special type names "array" and "null"; "object" will not match either. -No type coercion is done. - -@prop [ok] {function} -A function that is passed the key's value. If it returns false, the value -fails validation. - -@prop [msg] {string} -If the key's value fails validation, an exception is thrown. This string -will be used as its message. If undefined, a generic message is used, unless -`is` is defined, in which case the message will state that the value needs to -be one of the given types. -</api> - -<api name="addIterator"> -@function -Adds an iterator to the specified object that iterates keys, values, -or [key, value] pairs depending on how it is invoked, i.e.: - - for (var key in obj) { ... } // iterate keys - for each (var val in obj) { ... } // iterate values - for (var [key, val] in Iterator(obj)) { ... } // iterate pairs - -If your object only iterates either keys or values, you don't need this -function. Simply assign a generator function that iterates the keys/values -to your object's `__iterator__` property instead, f.e.: - - obj.__iterator__ = function () { for each (var i in items) yield i; } - -@param obj {object} -the object to which to add the iterator - -@param keysValsGen {function} -a generator function that yields [key, value] pairs -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/app-strings.md b/tools/addon-sdk-1.5/packages/api-utils/docs/app-strings.md deleted file mode 100644 index c40ddaf..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/app-strings.md +++ /dev/null @@ -1,65 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -The `app-strings` module gives you access to the host application's localized -string bundles (`.properties` files). - -The module exports the `StringBundle` constructor function. To access a string -bundle, construct an instance of `StringBundle`, passing it the bundle's URL: - - var StringBundle = require("app-strings").StringBundle; - var bundle = StringBundle("chrome://browser/locale/browser.properties"); - -To get the value of a string, call the object's `get` method, passing it -the name of the string: - - var accessKey = bundle.get("contextMenuSearchText.accesskey"); - // "S" in the en-US locale - -To get the formatted value of a string that accepts arguments, call the object's -`get` method, passing it the name of the string and an array of arguments -with which to format the string: - - var searchText = bundle.get("contextMenuSearchText", - ["universe", "signs of intelligent life"]); - // 'Search universe for "signs of intelligent life"' in the en-US locale - -To get all strings in the bundle, iterate the object, which returns arrays -of the form [name, value]: - - for (var [name, value] in Iterator(bundle)) - console.log(name + " = " + value); - -Iteration ---------- - -<code>for (var name in bundle) { ... }</code> - -Iterate the names of strings in the bundle. - -<code>for each (var val in bundle) { ... }</code> - -Iterate the values of strings in the bundle. - -<code>for (var [name, value] in Iterator(bundle)) { ... }</code> - -Iterate the names and values of strings in the bundle. - - -<api name="StringBundle"> -@class -The `StringBundle` object represents a string bundle. -<api name="StringBundle"> -@constructor -Creates a StringBundle object that gives you access to a string bundle. -@param url {string} the URL of the string bundle -@returns {StringBundle} the string bundle -</api> -<api name="get"> -@method Get the value of the string with the given name. -@param [name] {string} the name of the string to get -@param [args] {array} (optional) strings that replace placeholders in the string -@returns {string} the value of the string -</api> -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/base.md b/tools/addon-sdk-1.5/packages/api-utils/docs/base.md deleted file mode 100644 index 7a694f2..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/base.md +++ /dev/null @@ -1,207 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -### Inheritance ### - -Doing [inheritance in JavaScript](https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript) -is both verbose and painful. Reading or writing such code requires requires -sharp eye and lot's of discipline, mainly due to code fragmentation and lots of -machinery exposed: - - // Defining a simple Class - function Dog(name) { - // Classes are for creating instances, calling them without `new` changes - // behavior, which in majority cases you need to handle, so you end up - // with additional boilerplate. - if (!(this instanceof Dog)) return new Dog(name); - - this.name = name; - }; - // To define methods you need to make a dance with a special 'prototype' - // property of the constructor function. This is too much machinery exposed. - Dog.prototype.type = 'dog'; - Dog.prototype.bark = function bark() { - return 'Ruff! Ruff!' - }; - - // Subclassing a `Dog` - function Pet(name, breed) { - // Once again we do our little dance - if (!(this instanceof Pet)) return new Pet(name, breed); - - Dog.call(this, name); - this.breed = breed; - } - // To subclass, you need to make another special dance with special - // 'prototype' properties. - Pet.prototype = Object.create(Dog.prototype); - // If you want correct instanceof behavior you need to make a dance with - // another special `constructor` property of the `prototype` object. - Object.defineProperty(Pet.prototype, 'contsructor', { value: Pet }); - // Finally you can define some properties. - Pet.prototype.call = function(name) { - return this.name === name ? this.bark() : ''; - }; - -An "exemplar" is a factory for instances. Usually exemplars are defined as -(constructor) functions as in examples above. But that does not necessary has -to be the case. Prototype (object) can form far more simpler exemplars. After -all what could be more object oriented than objects that inherit from objects. - - var Dog = { - new: function(name) { - var instance = Object.create(this); - this.initialize.apply(instance, arguments); - return instance; - }, - initialize: function initialize(name) { - this.name = name; - }, - type: 'dog', - bark: function bark() { - return 'Ruff! Ruff!' - } - }; - var fluffy = Dog.new('fluffy'); - - - var Pet = Object.create(Dog); - Pet.initialize = function initialize(name, breed) { - Dog.initialize.call(this, name); - this.breed = breed; - }; - Pet.call = function call(name) { - return this.name === name ? this.bark() : ''; - }; - -While this small trick solves some readability issues, there are still more. To -address them this module exports `Base` exemplar with few methods predefined: - - var Dog = Base.extend({ - initialize: function initialize(name) { - this.name = name; - }, - type: 'dog', - bark: function bark() { - return 'Ruff! Ruff!' - } - }); - - var Pet = Dog.extend({ - initialize: function initialize(name, breed) { - Dog.initialize.call(this, name); - this.breed = breed; - }, - function call(name) { - return this.name === name ? this.bark() : ''; - } - }); - - var fluffy = Dog.new('fluffy'); - dog.bark(); // 'Ruff! Ruff!' - Dog.isPrototypeOf(fluffy); // true - Pet.isPrototypeOf(fluffy); // true - -### Composition ### - -Even though (single) inheritance is very powerful it's not always enough. -Sometimes it's more useful suitable to define reusable pieces of functionality -and then compose bigger pieces out of them: - - var HEX = Base.extend({ - hex: function hex() { - return '#' + this.color - } - }) - - var RGB = Base.extend({ - red: function red() { - return parseInt(this.color.substr(0, 2), 16) - }, - green: function green() { - return parseInt(this.color.substr(2, 2), 16) - }, - blue: function blue() { - return parseInt(this.color.substr(4, 2), 16) - } - }) - - var CMYK = Base.extend(RGB, { - black: function black() { - var color = Math.max(Math.max(this.red(), this.green()), this.blue()) - return (1 - color / 255).toFixed(4) - }, - magenta: function magenta() { - var K = this.black(); - return (((1 - this.green() / 255).toFixed(4) - K) / (1 - K)).toFixed(4) - }, - yellow: function yellow() { - var K = this.black(); - return (((1 - this.blue() / 255).toFixed(4) - K) / (1 - K)).toFixed(4) - }, - cyan: function cyan() { - var K = this.black(); - return (((1 - this.red() / 255).toFixed(4) - K) / (1 - K)).toFixed(4) - } - }) - - // Composing `Color` prototype out of reusable components: - var Color = Base.extend(HEX, RGB, CMYK, { - initialize: function initialize(color) { - this.color = color - } - }) - - var pink = Color.new('FFC0CB') - // RGB - pink.red() // 255 - pink.green() // 192 - pink.blue() // 203 - - // CMYK - pink.magenta() // 0.2471 - pink.yellow() // 0.2039 - pink.cyan() // 0.0000 - -### Combining composition & inheritance ### - -Also it's easy to mix composition with inheritance: - - var Pixel = Color.extend({ - initialize: function initialize(x, y, color) { - Color.initialize.call(this, color) - this.x = x - this.y = y - }, - toString: function toString() { - return this.x + ':' + this.y + '@' + this.hex() - } - }); - - var pixel = Pixel.new(11, 23, 'CC3399'); - pixel.toString() // 11:23@#CC3399 - Pixel.isPrototypeOf(pixel) // true - - // Pixel instances inhertis from `Color` - Color.isPrototypeOf(pixel); // true - - // In fact `Pixel` itself inherits from `Color`, remember just simple and - // pure prototypal inheritance where object inherit from objects. - Color.isPrototypeOf(Pixel); // true - -### Classes ### - -Module exports `Class` function. `Class` takes argument of exemplar object -extending `Base` and returns `constructor` function that can be used for -simulating classes defined by given exemplar. - - var CPixel = Class(Pixel); - var pixel = CPixel(11, 12, '000000'); - pixel instanceof CPixel // true - Pixel.prototypeOf(pixel); // true - - // Use of `new` is optional, but possible. - var p2 = CPixel(17, 2, 'cccccc'); - p2 instanceof CPixel // true - p2.prototypeOf(pixel); // true diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/byte-streams.md b/tools/addon-sdk-1.5/packages/api-utils/docs/byte-streams.md deleted file mode 100644 index 1238cd8..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/byte-streams.md +++ /dev/null @@ -1,68 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Drew Willcoxon [adw@mozilla.com] --> -<!-- edited by Noelle Murata [fiveinchpixie@gmail.com] --> - -The `byte-streams` module provides streams for reading and writing bytes. - -<api name="ByteReader"> -@class -<api name="ByteReader"> -@constructor - Creates a binary input stream that reads bytes from a backing stream. -@param inputStream {stream} - The backing stream, an <a href="http://mxr.mozilla.org/mozilla-central/ -source/xpcom/io/nsIInputStream.idl"><code>nsIInputStream</code></a>. -</api> -<api name="closed"> -@property {boolean} - True if the stream is closed. -</api> - -<api name="close"> -@method - Closes both the stream and its backing stream. If the stream is already - closed, an exception is thrown. -</api> - -<api name="read"> -@method - Reads a string from the stream. If the stream is closed, an exception is - thrown. -@param [numBytes] {number} - The number of bytes to read. If not given, the remainder of the entire stream - is read. -@returns {string} - A string containing the bytes read. If the stream is at the end, returns the - empty string. -</api> -</api> - -<api name="ByteWriter"> -@class -<api name="ByteWriter"> -@constructor - Creates a binary output stream that writes bytes to a backing stream. -@param outputStream {stream} - The backing stream, an <a href="http://mxr.mozilla.org/mozilla-central/ -source/xpcom/io/nsIOutputStream.idl"><code>nsIOutputStream</code></a>. -</api> -<api name="closed"> -@property {boolean} - True if the stream is closed. -</api> -<api name="close"> -@method - Closes both the stream and its backing stream. If the stream is already - closed, an exception is thrown. -</api> -<api name="write"> -@method - Writes a string to the stream. If the stream is closed, an exception is - thrown. -@param str {string} - The string to write. -</api> -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/collection.md b/tools/addon-sdk-1.5/packages/api-utils/docs/collection.md deleted file mode 100644 index 1e557c6..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/collection.md +++ /dev/null @@ -1,77 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Drew Willcoxon [adw@mozilla.com] --> -<!-- edited by Noelle Murata [fiveinchpixie@gmail.com] --> - -The `collection` module provides a simple list-like class and utilities for -using it. A collection is ordered, like an array, but its items are unique, -like a set. - -<api name="Collection"> -@class -A collection object provides for...in-loop iteration. Items are yielded in the -order they were added. For example, the following code... - - var collection = require("collection"); - var c = new collection.Collection(); - c.add(1); - c.add(2); - c.add(3); - for (item in c) - console.log(item); - -... would print this to the console: - -<pre> - 1 - 2 - 3 -</pre> - -Iteration proceeds over a copy of the collection made before iteration begins, -so it is safe to mutate the collection during iteration; doing so does not -affect the results of the iteration. - -<api name="Collection"> -@constructor -Creates a new collection. The collection is backed by an array. -@param [array] {array} -If *array* is given, it will be used as the backing array. This way the caller -can fully control the collection. Otherwise a new empty array will be used, and -no one but the collection will have access to it. -</api> -<api name="length"> -@property {number} -The number of items in the collection array. -</api> -<api name="add"> -@method -Adds a single item or an array of items to the collection. Any items already -contained in the collection are ignored. -@param itemOrItems {object} An item or array of items. -@returns {Collection} The Collection. -</api> -<api name="remove"> -@method -Removes a single item or an array of items from the collection. Any items not -contained in the collection are ignored. -@param itemOrItems {object} An item or array of items. -@returns {Collection} The Collection. -</api> -</api> - -<api name="addCollectionProperty"> -@function -Adds a collection property to the given object. Setting the property to a -scalar value empties the collection and adds the value. Setting it to an array -empties the collection and adds all the items in the array. -@param object {object} -The property will be defined on this object. -@param propName {string} -The name of the property. -@param [backingArray] {array} -If given, this will be used as the collection's backing array. -</api> - diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/content.md b/tools/addon-sdk-1.5/packages/api-utils/docs/content.md deleted file mode 100644 index 30a1cf3..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/content.md +++ /dev/null @@ -1,15 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Irakli Gozalishvili [gozala@mozilla.com] --> - -The `content` module exports three different traits [Loader][], [Worker][] and -[Symbiont][]. None of this traits is intended to be used directly by programs. -Rather, they are intended to be used by other modules that provide high -level APIs to programs or libraries. - -[Loader]:packages/api-utils/docs/content/loader.html -[Worker]:packages/api-utils/docs/content/worker.html -[Symbiont]:packages/api-utils/docs/content/symbiont.html - diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/content/loader.md b/tools/addon-sdk-1.5/packages/api-utils/docs/content/loader.md deleted file mode 100644 index 095e8c8..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/content/loader.md +++ /dev/null @@ -1,92 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Irakli Gozalishvili [gozala@mozilla.com] --> - -Loader is base trait and it provides set of core properties and associated -validations. Trait is useful for all the compositions providing high level -APIs for creating JavaScript contexts that can access web content. - -Loader is composed from the -[EventEmitter](packages/api-utils/docs/events.html) trait, therefore -instances of Loader and their descendants expose all the public properties -exposed by EventEmitter along with additional public properties: - -Value changes on all of the above mentioned properties emit `propertyChange` -events on an instances. - -**Example:** - -The following code creates a wrapper on hidden frame that reloads a web page -in frame every time `contentURL` property is changed: - - var hiddenFrames = require("hidden-frame"); - var { Loader } = require("content"); - var PageLoader = Loader.compose({ - constructor: function PageLoader(options) { - options = options || {}; - if (options.contentURL) - this.contentURL = options.contentURL; - this.on('propertyChange', this._onChange = this._onChange.bind(this)); - let self = this; - hiddenFrames.add(hiddenFrames.HiddenFrame({ - onReady: function onReady() { - let frame = self._frame = this.element; - self._emit('propertyChange', { contentURL: self.contentURL }); - } - })); - }, - _onChange: function _onChange(e) { - if ('contentURL' in e) - this._frame.setAttribute('src', this._contentURL); - } - }); - -<api name="Loader"> -@class -<api name="contentScriptFile"> -@property {array} -The local file URLs of content scripts to load. Content scripts specified by -this property are loaded *before* those specified by the `contentScript` -property. -</api> - -<api name="contentScript"> -@property {array} -The texts of content scripts to load. Content scripts specified by this -property are loaded *after* those specified by the `contentScriptFile` property. -</api> - -<api name="contentScriptWhen"> -@property {string} -When to load the content scripts. This may take one of the following -values: - -* "start": load content scripts immediately after the document -element for the page is inserted into the DOM, but before the DOM content -itself has been loaded -* "ready": load content scripts once DOM content has been loaded, -corresponding to the -[DOMContentLoaded](https://developer.mozilla.org/en/Gecko-Specific_DOM_Events) -event -* "end": load content scripts once all the content (DOM, JS, CSS, -images) for the page has been loaded, at the time the -[window.onload event](https://developer.mozilla.org/en/DOM/window.onload) -fires - -</api> - -<api name="contentURL"> -@property {string} -The URL of the content loaded. -</api> - -<api name="allow"> -@property {object} -Permissions for the content, with the following keys: -@prop script {boolean} - Whether or not to execute script in the content. Defaults to true. -</api> -</api> - diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/content/proxy.md b/tools/addon-sdk-1.5/packages/api-utils/docs/content/proxy.md deleted file mode 100644 index 095e8ff..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/content/proxy.md +++ /dev/null @@ -1,241 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Alexandre Poirot [apoirot@mozilla.com] --> - -Content scripts need access to the DOM of the pages they are attached to. -However, those pages should be considered to be hostile environments: we -have no control over any other scripts loaded by the web page that may be -executing in the same context. If the content scripts and scripts loaded -by the web page were to access the same DOM objects, there are two possible -security problems: - -First, a malicious page might redefine functions and properties of DOM -objects so they don't do what the add-on expects. For example, if a -content script calls `document.getElementById()` to retrieve a DOM -element, then a malicious page could redefine its behavior to return -something unexpected: - -<pre><code> -// If the web document contains the following script: -document.getElementById = function (str) { - // Overload indexOf method of all string instances - str.__proto__.indexOf = function () {return -1;}; - // Overload toString method of all object instances - str.__proto__.__proto__.toString = function () {return "evil";}; -}; -// After the following line, the content script will be compromised: -var node = document.getElementById("element"); -// Then your content script is totally out of control. -</code></pre> - -Second, changes the content script made to the DOM objects would be visible -to the page, leaking information to it. - -The general approach to fixing these problems is to wrap DOM objects in -[`XrayWrappers`](https://developer.mozilla.org/en/XPCNativeWrapper) -(also know as `XPCNativeWrapper`). This guarantees that: - -* when the content script accesses DOM properties and functions it gets the -original native version of them, ignoring any modifications made by the web -page -* changes to the DOM made by the content script are not visible to scripts -running in the page. - -However, `XrayWrapper` has some limitations and bugs, which break many -popular web frameworks. In particular, you can't: - -* define attributes like `onclick`: you have to use `addEventListener` syntax -* overload native methods on DOM objects, like this: -<pre><code> -proxy.addEventListener = function () {}; -</code></pre> -* access named elements using properties like `window[framename]` or -`document[formname]` -* use some other features that have bugs in the `XrayWrapper` -implementation, like `mozMatchesSelector` - -The `proxy` module uses `XrayWrapper` in combination with the -experimental -[Proxy API](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Proxy) -to address both the security vulnerabilities of content scripts and the -limitations of `XrayWrapper`. - -<pre> - /--------------------\ /------------------------\ - | Web document | | Content script sandbox | - | http://mozilla.org | | data/worker.js | - | | require('content-proxy'). | | - | window >-----------|- create(window) -|-> window | - \--------------------/ \------------------------/ -</pre> - - -## The Big Picture ## - -The implementation defines two different kinds of proxy: - - 1. Content script proxies that wrap DOM objects that are exposed to - content scripts as described above. - 2. XrayWrapper proxies that wrap objects from content scripts before handing - them over to XrayWrapper functions. These proxies are internal - and are not exposed to content scripts or document content. - -<pre> - /--------------------\ /------------------------\ - | Web document | | Content script sandbox | - | http://mozilla.org | | data/worker.js | - | | /-------|-> myObject = {} | - | | /----------------v--\ | | - | | | XrayWrapper Proxy | | - document | - | | \---------v---------/ \----^-------------------/ - | | v | - | | /-------------\ /----------\ | - | - document >-------|->| XrayWrapper |<-| CS proxy |-/ - \--------------------/ \-------------/ \----------/ -</pre> - -Everything begins with a single call to the `create` function exported by the -content-proxy module: - - // Retrieve the unwrapped reference to the current web page window object - var win = gBrowser.contentDocument.defaultView.wrappedJSObject; - // Or in addon sdk style - var win = require("tab-browser").activeTab.linkedBrowser.contentWindow.wrappedJSObject; - // Now create a content script proxy for the window object - var windowProxy = require("api-utils/content/content-proxy").create(win); - - // We finally use this window object as sandbox prototype, - // so that all web page globals are accessible in CS too: - var contentScriptSandbox = new Cu.Sandbox(win, { - sandboxPrototype: windowProxy - }); - -Then all other proxies are created from this one. Attempts to access DOM -attributes of this proxy are trapped, and the proxy constructs and returns -content script proxies for those attributes: - - // For example, if you simply do this: - var document = window.document; - // accessing the `document` attribute will be trapped by the `window` content script - // proxy, and that proxy will that create another content script proxy for `document` - -So the main responsibility of the content script proxy implementation is to -ensure that we always return content script proxies to the content script. - -## Internal Implementation ## - -Each content script proxy keeps a reference to the `XrayWrapper` that enables -it to be sure of calling native DOM methods. - -There are two internal functions to convert between content script proxy -values and `XrayWrapper` values. - -1. __`wrap`__ takes an XrayWrapper value and wraps it in a content script -proxy if needed. - This method is called when: - * a content script accesses an attribute of a content script proxy. - * XrayWrapper code calls a callback function defined in the content -script, so that arguments passed into the function by the XrayWrapper are -converted into content script proxies. For example, if a content script -calls `addEventListener`, then the listener function will expect any arguments -to be content script proxies. -<br/><br/> -2. __`unwrap`__ takes an object coming from the content script context and: - * if the object is a content script proxy, unwraps it back to an -XrayWrapper reference - * if the object is not a content script proxy, wraps it in an XrayWrapper -proxy. -<br/><br/> -This means we can call a XrayWrapper method either with: - - * a raw XrayWrapper object. - - // The following line doesn't work if child is a content script proxy, - // it has to be a raw XrayWrapper reference - xrayWrapper.appendChild(child) - - * an XrayWrapper proxy when you pass a custom object from the content -script context. - - var myListener = { - handleEvent: function(event) { - // `event` should be a content script proxy - } - }; - // `myListener` has to be another kind of Proxy: XrayWrapper proxy, - // that aims to catch the call to `handleEvent` in order to wrap its - // arguments in a content script proxy. - xrayWrapper.addEventListener("click", myListener, false); - - -## Stack Traces ## - -The following code: - - function listener(event) { - - } - csProxy.addEventListener("message", listener, false); - -generates the following internal calls: - - -> CS Proxy:: get("addEventListener") - -> wrap(xrayWrapper.addEventListener) - -> NativeFunctionWrapper(xrayWrapper.addEventListener) - // NativeFunctionWrapper generates: - function ("message", listener, false) { - return xraywrapper.addEventListener("message", unwrap(listener), false); - } - -> unwrap(listener) - -> ContentScriptFunctionWrapper(listener) - // ContentScriptFunctionWrapper generates: - function (event) { - return listener(wrap(event)); - } - -<br> - - // First, create an object from content script context - var myListener = { - handleEvent: function (event) { - - } - }; - // Then, pass this object as an argument to a CS proxy method - window.addEventListener("message", myListener, false); - - // Generates the following internal calls: - -> CS Proxy:: get("addEventListener") - -> wrap(xrayWrapper.addEventListener) - -> NativeFunctionWrapper(xrayWrapper.addEventListener) - // Generate the following function: - function ("message", myListener, false) { - return xraywrapper.addEventListener("message", unwrap(myListener), false); - } - -> unwrap(myListener) - -> ContentScriptObjectWrapper(myListener) - // Generate an XrayWrapper proxy and give it to xrayWrapper method. - // Then when native code fires an event, the proxy will catch it: - -> XrayWrapper Proxy:: get("handleEvent") - -> unwrap(myListener.handleEvent) - -> ContentScriptFunctionWrapper(myListener.handleEvent) - // Generate following function: - function (event) { - return myListener.handleEvent(wrap(event)); - } - - -<api name="create"> -@function - Create a content script proxy. <br/> - Doesn't create a proxy if we are not able to create a XrayWrapper for - this object: for example, if the object comes from system principal. - -@param object {Object} - The object to proxify. - -@returns {Object} - A content script proxy that wraps `object`. -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/content/symbiont.md b/tools/addon-sdk-1.5/packages/api-utils/docs/content/symbiont.md deleted file mode 100644 index 3036c6d..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/content/symbiont.md +++ /dev/null @@ -1,140 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Myk Melez [myk@mozilla.org] --> -<!-- contributed by Irakli Gozalishvili [gozala@mozilla.com] --> - - -This module is not intended to be used directly by programs. Rather, it is -intended to be used by other modules that provide APIs to programs. - - -This module exports `Symbiont` trait that can be used for creating JavaScript -contexts that can access web content in host application frames (i.e. XUL -`<iframe>` and `<browser>` elements) and communicate with programs via -asynchronous JSON pipes. It is useful in the construction of APIs that -are compatible with the execution model codenamed "electrolysis" in which -programs run in separate processes from web content. - -Introduction ------------- - -`Symbiont` constructs a content symbiont for a given frame, it loads the -specified contentURL and scripts into it, and plumbs an asynchronous -JSON pipe between the content symbiont object and the content symbiont -context. If frame is not provided hidden frame will be created. - -Examples --------- - - var { Symbiont } = require('content'); - var Thing = Symbiont.resolve({ constructor: '_init' }).compose({ - constructor: function Thing(options) { - // `getMyFrame` returns the host application frame in which - // the page is loaded. - this._frame = getMyFrame(); - this._init(options) - } - }); - -See the [panel][] module for a real-world example of usage of this module. - -[panel]:packages/addon-kit/docs/panel.html - -Reference ---------- - -<api name="Symbiont"> -@class -Symbiont is composed from the [Worker][] trait, therefore instances -of Symbiont and their descendants expose all the public properties -exposed by [Worker][] along with additional public properties that -are listed below: - -[Worker]:packages/api-utils/docs/content/worker.html - -<api name="Symbiont"> -@constructor -Creates a content symbiont. -@param options {object} - Options for the constructor. Includes all the keys that -the [Worker](packages/api-utils/docs/content/worker.html) -constructor accepts and a few more: - - @prop [frame] {object} - The host application frame in which the page is loaded. - If frame is not provided hidden one will be created. - @prop [contentScriptWhen="end"] {string} - When to load the content scripts. This may take one of the following - values: - - * "start": load content scripts immediately after the document - element for the page is inserted into the DOM, but before the DOM content - itself has been loaded - * "ready": load content scripts once DOM content has been loaded, - corresponding to the - [DOMContentLoaded](https://developer.mozilla.org/en/Gecko-Specific_DOM_Events) - event - * "end": load content scripts once all the content (DOM, JS, CSS, - images) for the page has been loaded, at the time the - [window.onload event](https://developer.mozilla.org/en/DOM/window.onload) - fires - - This property is optional and defaults to "end". - - @prop [allow] {object} - Permissions for the content, with the following keys: - @prop [script] {boolean} - Whether or not to execute script in the content. Defaults to true. - Optional. - Optional. -</api> - -<api name="contentScriptFile"> -@property {array} -The local file URLs of content scripts to load. Content scripts specified by -this property are loaded *before* those specified by the `contentScript` -property. -</api> - -<api name="contentScript"> -@property {array} -The texts of content scripts to load. Content scripts specified by this -property are loaded *after* those specified by the `contentScriptFile` property. -</api> - -<api name="contentScriptWhen"> -@property {string} -When to load the content scripts. This may have one of the following -values: - -* "start": load content scripts immediately after the document -element for the page is inserted into the DOM, but before the DOM content -itself has been loaded -* "ready": load content scripts once DOM content has been loaded, -corresponding to the -[DOMContentLoaded](https://developer.mozilla.org/en/Gecko-Specific_DOM_Events) -event -* "end": load content scripts once all the content (DOM, JS, CSS, -images) for the page has been loaded, at the time the -[window.onload event](https://developer.mozilla.org/en/DOM/window.onload) -fires - -</api> - -<api name="contentURL"> -@property {string} -The URL of the content loaded. -</api> - -<api name="allow"> -@property {object} -Permissions for the content, with a single boolean key called `script` which -defaults to true and indicates whether or not to execute scripts in the -content. -</api> - -</api> - - diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/content/worker.md b/tools/addon-sdk-1.5/packages/api-utils/docs/content/worker.md deleted file mode 100644 index 8705632..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/content/worker.md +++ /dev/null @@ -1,130 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Irakli Gozalishvili [gozala@mozilla.com] --> - -This module exports the `Worker` trait, which may be used to construct objects -implementing the [Worker][] interface defined by the W3C, with minor -differences. - -Content workers are message-passing facilities for communication between -[content scripts](dev-guide/addon-development/web-content.html) and the main -add-on code. - -It is important to note that unlike "web workers," these workers run in the -same process as web content and browser chrome, so code within workers can -block the UI. - -[Worker]:http://www.w3.org/TR/workers/#worker - -<api name="Worker"> -@class -Worker is composed from the [EventEmitter][] trait, therefore instances -of Worker and their descendants expose all the public properties -exposed by [EventEmitter][] along with additional public properties that -are listed below. - -**Example** - - var workers = require("content/worker"); - let worker = workers.Worker({ - window: require("window-utils").activeWindow, - contentScript: - "self.port.on('hello', function(name) { " + - " self.port.emit('response', window.location); " + - "});" - }); - worker.port.emit("hello", { name: "worker"}); - worker.port.on("response", function (location) { - console.log(location); - }); - -[EventEmitter]:packages/api-utils/docs/events.html - -<api name="Worker"> -@constructor -Creates a content worker. -@param options {object} -Options for the constructor, with the following keys: - @prop window {object} - The content window to create JavaScript sandbox for communication with. - @prop [contentScriptFile] {string,array} - The local file URLs of content scripts to load. Content scripts specified - by this option are loaded *before* those specified by the `contentScript` - option. Optional. - @prop [contentScript] {string,array} - The texts of content scripts to load. Content scripts specified by this - option are loaded *after* those specified by the `contentScriptFile` option. - Optional. - @prop [onMessage] {function} - Functions that will registered as a listener to a 'message' events. - @prop [onError] {function} - Functions that will registered as a listener to an 'error' events. -</api> - -<api name="port"> -@property {EventEmitter} -[EventEmitter](packages/api-utils/docs/events.html) object that allows you to: - -* send customized messages to the worker using the `port.emit` function -* receive events from the worker using the `port.on` function - -</api> - -<api name="postMessage"> -@method -Asynchronously emits `"message"` events in the enclosed worker, where content -script was loaded. -@param data {number,string,JSON} -The data to send. Must be stringifiable to JSON. -</api> - -<api name="destroy"> -@method -Destroy the worker by removing the content script from the page and removing -all registered listeners. A `detach` event is fired just before removal. -</api> - -<api name="url"> -@property {string} -The URL of the content. -</api> - -<api name="tab"> -@property {object} -If this worker is attached to a content document, returns the related -[tab](packages/addon-kit/docs/tabs.html). -</api> - -<api name="message"> -@event -This event allows the content worker to receive messages from its associated -content scripts. Calling the `self.postMessage()` function from a content -script will asynchronously emit the `message` event on the corresponding -worker. - -@argument {value} -The event listener is passed the message, which must be a -<a href = "dev-guide/addon-development/content-scripts/using-port.html#json_serializable">JSON-serializable value</a>. -</api> - -<api name="error"> -@event -This event allows the content worker to react to an uncaught runtime script -error that occurs in one of the content scripts. - -@argument {Error} -The event listener is passed a single argument which is an -[Error](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error) -object. -</api> - -<api name="detach"> -@event -This event is emitted when the document associated with this worker is unloaded -or the worker's `destroy()` method is called. -</api> - -</api> - diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/cortex.md b/tools/addon-sdk-1.5/packages/api-utils/docs/cortex.md deleted file mode 100644 index afae8cb..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/cortex.md +++ /dev/null @@ -1,160 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - - -## Property Encapsulation ## - -In JavaScript it is not possible to create properties that have limited or -controlled accessibility. It is possible to create non-enumerable and -non-writable properties, but still they can be discovered and accessed. -Usually so called "closure capturing" is used to encapsulate such properties -in lexical scope: - - function Foo() { - var _secret = 'secret'; - this.hello = function hello() { - return 'Hello ' + _secret; - } - } - -This provides desired result, but has side effect of degrading code readability, -especially with object-oriented programs. Another disadvantage with this pattern -is that there is no immediate solution for inheriting access to the privates -(illustrated by the following example): - - function Derived() { - this.hello = function hello() { - return _secret; - } - this.bye = function bye() { - return _secret; - } - } - Derived.prototype = Object.create(Foo.prototype); - -## Facade Objects ## - -Alternatively constructor can returned facade objects - proxies to the -instance's public properties: - - function Foo() { - var foo = Object.create(Foo.prototype); - return { - bar: foo.hello.bind(foo); - } - } - Foo.prototype._secret = 'secret'; - Foo.prototype.hello = function hello() { - return 'Hello ' + this._secret; - } - - function Derived() { - var derived = Object.create(Derived.prototype); - return { - bar: derived.hello.bind(derived); - bye: derived.bye.bind(derived); - } - } - Derived.prototype = Object.create(Foo.prototype); - Derived.prototype.bye = function bye() { - return 'Bye ' + this._secret; - }; - -While this solution solves given issue and provides proper encapsulation for -both own and inherited private properties, it does not addresses following: - - - Privates defined on the `prototype` can be compromised, since they are - accessible through the constructor (`Foo.prototype._secret`). - - Behavior of `instanceof` is broken, since `new Derived() instanceof Derived` - is going to evaluate to `false`. - -## Tamper Proofing with Property Descriptor Maps ## - -In ES5 new property descriptor maps were introduced, which can be used as a -building blocks for defining reusable peace of functionality. To some degree -they are similar to a `prototype` objects, and can be used so to define pieces -of functionality that is considered to be private (In contrast to `prototype` -they are not exposed by default). - - function Foo() { - var foo = Object.create(Foo.prototype, FooDescriptor); - var facade = Object.create(Foo.prototype); - facade.hello = foo.hello.bind(foo); - return facade; - } - Foo.prototype.hello = function hello() { - return 'Hello ' + this._secret; - } - var FooDescriptor = { - _secret: { value: 'secret' }; - } - - function Derived() { - var derived = Object.create(Derived.prototype, DerivedDescriptor); - var facade = Object.create(Derived.prototype); - facade.hello = derived.hello.bind(derived); - facade.bye = derived.bye.bind(derived); - return facade; - } - Derived.prototype = Object.create(Foo.prototype); - Derived.prototype.bye = function bye() { - return 'Bye ' + this._secret; - }; - DerivedDescriptor = {}; - - Object.keys(FooDescriptor).forEach(function(key) { - DerivedDescriptor[key] = FooDescriptor[key]; - }); - -## Cortex Objects ## - -Last approach solves all of the concerns, but adds complexity, verbosity -and decreases code readability. Combination of `Cortex`'s and `Trait`'s -will gracefully solve all these issues and keep code clean: - - var Cortex = require('cortex').Cortex; - var Trait = require('light-traits').Trait; - - var FooTrait = Trait({ - _secret: 'secret', - hello: function hello() { - return 'Hello ' + this._secret; - } - }); - function Foo() { - return Cortex(FooTrait.create(Foo.prototype)); - } - - var DerivedTrait = Trait.compose(FooTrait, Trait({ - bye: function bye() { - return 'Bye ' + this._secret; - } - })); - function Derived() { - var derived = DerivedTrait.create(Derived.prototype); - return Cortex(derived); - } - -Function `Cortex` takes any object and returns a proxy for its public -properties. By default properties are considered to be public if they don't -start with `"_"`, but default behavior can be overridden if needed, by passing -array of public property names as a second argument. - -## Gotchas ## - -`Cortex` is just a utility function to create a proxy object, and it does not -solve the `prototype`-related issues highlighted earlier, but since traits make -use of property descriptor maps instead of `prototype`s, there aren't any -issues with using `Cortex` to wrap objects created from traits. - -If you want to use `Cortex` with an object that uses a `prototype` chain, -however, you should either make sure you don't have any private properties -in the prototype chain or pass the optional third `prototype` argument. - -In the latter case, the returned proxy will inherit from the given prototype, -and the `prototype` chain of the wrapped object will be inaccessible. -However, note that the behavior of the `instanceof` operator will vary, -as `proxy instanceof Constructor` will return false even if the Constructor -function's prototype is in the wrapped object's prototype chain. - diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/cuddlefish.md b/tools/addon-sdk-1.5/packages/api-utils/docs/cuddlefish.md deleted file mode 100644 index 27daf30..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/cuddlefish.md +++ /dev/null @@ -1,7 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -`cuddlefish` is the name of the SDK's module loader. - -This module still needs to be documented. diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/environment.md b/tools/addon-sdk-1.5/packages/api-utils/docs/environment.md deleted file mode 100644 index b5057a2..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/environment.md +++ /dev/null @@ -1,43 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -Module provides API to access, set and unset environment variables via exported -`env` object. - - var { env } = require('api-utils/environment'); - -You can get the value of an environment variable, by accessing property that -has name of desired variable: - - var PATH = env.PATH; - -You can check existence of an environment variable by checking if property with -such variable name exists: - - console.log('PATH' in env); // true - console.log('FOO' in env); // false - -You can set value of an environment variable by setting a property: - - env.FOO = 'foo'; - env.PATH += ':/my/path/' - -You can unset environment variable by deleting a property: - - delete env.FOO; - -## Limitations ## - -There is no way to enumerate existing environment variables, also `env` -won't have any enumerable properties: - - console.log(Object.keys(env)); // [] - -Environment variable will be unset, show up as non-existing if it's set -to `null`, `undefined` or `''`. - - env.FOO = null; - console.log('FOO' in env); // false - env.BAR = ''; - console.log(env.BAR); // undefined diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/errors.md b/tools/addon-sdk-1.5/packages/api-utils/docs/errors.md deleted file mode 100644 index 98e94ac..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/errors.md +++ /dev/null @@ -1,42 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Drew Willcoxon [adw@mozilla.com] --> - -The `errors` module provides helpers for safely invoking user callbacks. - -<api name="catchAndLog"> -@function - Wraps a callback in a function that when invoked will catch and log any - exception thrown by the callback. -@param callback {function} - The callback to wrap. -@param [defaultResponse] {value} - This value will be returned by the wrapper if `callback` throws an exception. - If not given, `undefined` is used. -@param [logException] {function} - When `callback` throws an exception, it will be passed to this function. If - not given, the exception is logged using `console.exception()`. -@returns {function} - A function that will invoke `callback` when called. The return value of this - function is the return value of `callback` unless `callback` throws an - exception. In that case, `defaultResponse` is returned or `undefined` if - `defaultResponse` is not given. -</api> - -<api name="catchAndLogProps"> -@function - Replaces methods of an object with wrapped versions of those methods returned - by `catchAndLog()`. -@param object {object} - The object whose methods to replace. -@param props {string,array} - The names of the methods of `object` to replace, either a string for a single - method or an array of strings for multiple methods. -@param [defaultResponse] {value} - This value will be returned by any wrapper whose wrapped method throws an - exception. If not given, `undefined` is used. -@param [logException] {function} - See `catchAndLog()`. -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/events.md b/tools/addon-sdk-1.5/packages/api-utils/docs/events.md deleted file mode 100644 index 76f9efd..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/events.md +++ /dev/null @@ -1,78 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -The `events` module provides base API for emitting events. - -This module is not intended to be used directly by programs. Rather, it is -intended to be used by other modules that provide APIs to programs. - -<api name="EventEmitter"> -@class -The EventEmitter is the base building block for all compositions that -would need to broadcast data to multiple consumers. - -Please note that `EventEmitter` does not expose either a method for emitting -events or a list of available event listeners as its public API. Obviously -both are accessible but from the instance itself through the private API. -<api name="EventEmitter"> -@constructor -Creates an EventEmitter object. -</api> - -<api name="on"> -@method -Registers an event `listener` that will be called when events of -specified `type` are emitted. - -If the `listener` is already registered for this `type`, a call to this -method has no effect. - -If the event listener is being registered while an event is being processed, -the event listener is not called during the current emit. - -**Example:** - - // worker is instance of EventEmitter - worker.on('message', function (data) { - console.log('data received: ' + data) - }); - -@param type {String} - The type of the event. -@param listener {Function} - The listener function that processes the event. -</api> - -<api name="once"> -@method -Registers an event `listener` that will only be called once, the next time -an event of the specified `type` is emitted. - -If the event listener is registered while an event of the specified `type` -is being emitted, the event listener will not be called during the current -emit. - -@param type {String} - The type of the event. -@param listener {Function} - The listener function that processes the event. -</api> - -<api name="removeListener"> -@method -Unregisters an event `listener` for the specified event `type`. - -If the `listener` is not registered for this `type`, a call to this -method has no effect. - -If an event listener is removed while an event is being processed, it is -still triggered by the current emit. After it is removed, the event listener -is never invoked again (unless registered again for future processing). - -@param type {String} - The type of the event. -@param listener {Function} - The listener function that processes the event. -</api> -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/file.md b/tools/addon-sdk-1.5/packages/api-utils/docs/file.md deleted file mode 100644 index 7f8f1ba..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/file.md +++ /dev/null @@ -1,151 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Drew Willcoxon [adw@mozilla.com] --> -<!-- contributed by Atul Varma [atul@mozilla.com] --> -<!-- edited by Noelle Murata [fiveinchpixie@gmail.com] --> - -The `file` module provides access to the local filesystem. - - -Paths ------ - -Path specifications in this API are platform-specific. This means that on -Windows paths are specified using the backslash path separator (`\`), and on -Unix-like systems like Linux and OS X paths are specified using the forward -slash path separator (`/`). - -If your add-on uses literal Windows-style path specifications with this API, -your add-on likely won't work when users run it on Unix-like systems. Likewise, -if your add-on uses literal Unix-style path specifications, it won't work for -users on Windows. - -To ensure your add-on works for everyone, generate paths using the -[`join`](packages/api-utils/docs/file.html#join(...)) function. Unfortunately -this API does not currently provide a way to obtain an absolute base path which -you could then use with `join`. For now, you need to -[`require("chrome")`](dev-guide/module-development/chrome.html) and use the -XPCOM directory service as described at -[MDN](https://developer.mozilla.org/en/Code_snippets/File_I%2F%2FO#Getting_special_files). - -Note that if you do decide to hardcode Windows-style paths, be sure to escape -backslashes in strings. For example, to specify the file at `C:\Users\Myk`, you -need to use the string `"C:\\Users\\Myk"`, not `"C:\Users\Myk"`. You can read -more about escaping characters in strings at -[MDN](https://developer.mozilla.org/en/JavaScript/Guide/Values,_Variables,_and_Literals#Escaping_Characters). - - -<api name="basename"> -@function - Returns the last component of the given path. For example, - `basename("/foo/bar/baz")` returns `"baz"`. If the path has no components, - the empty string is returned. -@param path {string} - The path of a file. -@returns {string} - The last component of the given path. -</api> - -<api name="dirname"> -@function - Returns the path of the directory containing the given file. If the file is - at the top of the volume, the empty string is returned. -@param path {string} - The path of a file. -@returns {string} - The path of the directory containing the file. -</api> - -<api name="exists"> -@function - Returns true if a file exists at the given path and false otherwise. -@param path {string} - The path of a file. -@returns {boolean} - True if the file exists and false otherwise. -</api> - -<api name="join"> -@function - Takes a variable number of strings, joins them on the file system's path - separator, and returns the result. -@param ... {strings} - A variable number of strings to join. The first string must be an absolute - path. -@returns {string} - A single string formed by joining the strings on the file system's path - separator. -</api> - -<api name="list"> -@function - Returns an array of file names in the given directory. -@param path {string} - The path of the directory. -@returns {array} - An array of file names. Each is a basename, not a full path. -</api> - -<api name="mkpath"> -@function - Makes a new directory named by the given path. Any subdirectories that do not - exist are also created. `mkpath` can be called multiple times on the same - path. -@param path {string} - The path to create. -</api> - -<api name="open"> -@function - Returns a stream providing access to the contents of a file. -@param path {string} - The path of the file to open. -@param [mode] {string} - An optional string, each character of which describes a characteristic of the - returned stream. If the string contains `"r"`, the file is opened in - read-only mode. `"w"` opens the file in write-only mode. `"b"` opens the - file in binary mode. If `"b"` is not present, the file is opened in text - mode, and its contents are assumed to be UTF-8. If *`mode`* is not given, - `"r"` is assumed, and the file is opened in read-only text mode. -@returns {stream} - If the file is opened in text read-only `mode`, a `TextReader` is returned, - and if text write-only mode, a `TextWriter` is returned. See - [`text-streams`](packages/api-utils/docs/text-streams.html) for information on - these text stream objects. If the file is opened in binary read-only `mode`, - a `ByteReader` is returned, and if binary write-only mode, a `ByteWriter` is - returned. See - [`byte-streams`](packages/api-utils/docs/byte-streams.html) for more - information on these byte stream objects. Opened files should always be - closed after use by calling `close` on the returned stream. -</api> - -<api name="read"> -@function - Opens a file and returns a string containing its entire contents. -@param path {string} - The path of the file to read. -@param [mode] {string} - An optional string, each character of which describes a characteristic of the - returned stream. If the string contains `"b"`, the contents will be returned - in binary mode. If `"b"` is not present or `mode` is not given, the file - contents will be returned in text mode. -@returns {string} - A string containing the file's entire contents. -</api> - -<api name="remove"> -@function - Removes a file from the file system. To remove directories, use `rmdir`. -@param path {string} - The path of the file to remove. -</api> - -<api name="rmdir"> -@function - Removes a directory from the file system. If the directory is not empty, an - exception is thrown. -@param path {string} - The path of the directory to remove. -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/hidden-frame.md b/tools/addon-sdk-1.5/packages/api-utils/docs/hidden-frame.md deleted file mode 100644 index 9d16dfa..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/hidden-frame.md +++ /dev/null @@ -1,83 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Myk Melez [myk@mozilla.org] --> - -The `hidden-frame` module creates host application frames (i.e. XUL `<iframe>` -elements) that are not displayed to the user. It is useful in the construction -of APIs that load web content not intended to be directly seen or accessed -by users, like `page-worker`. It is also useful in the construction of APIs -that load web content for intermittent display, such as `panel`. - -This module is not intended to be used directly by programs. Rather, it is -intended to be used by other modules that provide APIs to programs. - -Introduction ------------- - -The module exports a constructor function, `HiddenFrame`, and two other -functions, `add` and `remove`. - -`HiddenFrame` constructs a new hidden frame. `add` registers a hidden frame, -preparing it to load content. `remove` unregisters a frame, unloading any -content that was loaded in it. - -Examples --------- - -The following code creates a hidden frame, loads a web page into it, and then -logs its title: - - var hiddenFrames = require("hidden-frame"); - let hiddenFrame = hiddenFrames.add(hiddenFrames.HiddenFrame({ - onReady: function() { - this.element.contentWindow.location = "http://www.mozilla.org/"; - let self = this; - this.element.addEventListener("DOMContentLoaded", function() { - console.log(self.element.contentDocument.title); - }, true, true); - } - })); - -See the `panel` module for a real-world example of usage of this module. - -Reference ---------- -<api name="HiddenFrame"> -@class -`HiddenFrame` objects represent hidden frames. -<api name="HiddenFrame"> -@constructor -Creates a hidden frame. -@param options {object} - Options for the frame, with the following keys: - @prop onReady {function,array} - Functions to call when the frame is ready to load content. You must specify - an `onReady` callback and refrain from using the hidden frame until - the callback gets called, because hidden frames are not always ready to load - content the moment they are added. -</api> - -<api name="add"> -@function -Register a hidden frame, preparing it to load content. -@param hiddenFrame {HiddenFrame} the frame to add -</api> - -<api name="remove"> -@function -Unregister a hidden frame, unloading any content that was loaded in it. -@param hiddenFrame {HiddenFrame} the frame to remove -</api> - -<api name="element"> -@property {DOMElement} -The host application frame in which the page is loaded. -</api> - -<api name="onReady"> -@property {array} -Functions to call when the frame is ready to load content. -</api> -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/httpd.md b/tools/addon-sdk-1.5/packages/api-utils/docs/httpd.md deleted file mode 100644 index 3f131f9..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/httpd.md +++ /dev/null @@ -1,31 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -Provides an HTTP server written in JavaScript for the Mozilla platform, which -can be used in unit tests. - -The most basic usage is: - - var {startServerAsync} = require("httpd"); - var srv = startServerAsync(port, basePath); - require("unload").when(function cleanup() { - srv.stop(function() { // you should continue execution from this point. - }) - }); - -This starts a server in background (assuming you're running this code in an -application that has an event loop, such as Firefox). The server listens at -http://localhost:port/ and serves files from the specified directory. You -can serve static content or use SJS scripts, as described in documentation -on developer.mozilla.org. - -You can also use `nsHttpServer` to start the server manually: - - var {nsHttpServer} = require("httpd"); - var srv = new nsHttpServer(); - // further documentation on developer.mozilla.org - -See -[HTTP server for unit tests](https://developer.mozilla.org/En/HTTP_server_for_unit_tests) -for general information. diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/light-traits.md b/tools/addon-sdk-1.5/packages/api-utils/docs/light-traits.md deleted file mode 100644 index 367a6a9..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/light-traits.md +++ /dev/null @@ -1,295 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - - -[Traits](http://en.wikipedia.org/wiki/Trait_%28computer_science%29) are a simple -mechanism for structuring object-oriented programs. They represent reusable and -composable building blocks of functionality that factor out the common -attributes and behavior of objects. - -They are a more robust alternative to -[mixins](http://en.wikipedia.org/wiki/Mixins) and -[multiple inheritance](http://en.wikipedia.org/wiki/Multiple_inheritance), -because name clashes must be explicitly resolved and composition is commutative -and associative (i.e. the order of traits in a composition is irrelevant). - -Use traits to share functionality between similar objects without duplicating -code or creating complex inheritance chains. - -## Trait Creation ## - -To create a trait, call the `Trait` constructor function exported by this -module, passing it a JavaScript object that specifies the properties of the -trait. - - let Trait = require('light-traits').Trait; - let t = Trait({ - foo: "foo", - bar: function bar() { - return "Hi!" - }, - baz: Trait.required - }); - -Traits can both provide and require properties. A *provided* property is a -property for which the trait itself provides a value. A *required* property is a -property that the trait needs in order to function correctly but for which -it doesn't provide a value. - -Required properties must be provided by another trait or by an object with a -trait. Creation of an object with a trait will fail if required properties are -not provided. Specify a required property by setting the value of the property -to `Trait.required`. - -## Object Creation ## - -Create objects with a single trait by calling the trait's `create` method. The -method takes a single argument, the object to serve as the new object's -prototype. If no prototype is specified, the new object's prototype will be -`Object.prototype`. - - let t = Trait({ - foo: 'foo', - bar: 2 - }); - let foo1 = t.create(); - let foo2 = t.create({ name: 'Super' }); - -## Trait Composition ## - -Traits are designed to be composed with other traits to create objects with the -properties of multiple traits. To compose an object with multiple traits, you -first create a composite trait and then use it to create the object. A composite -trait is a trait that contains all of the properties of the traits from which it -is composed. In the following example, MagnitudeTrait is a composite trait. - - let EqualityTrait = Trait({ - equal: Trait.required, - notEqual: function notEqual(x) { - return !this.equal(x) - } - }); - - let ComparisonTrait = Trait({ - less: Trait.required, - notEqual: Trait.required, - greater: function greater(x) { - return !this.less(x) && this.notEqual(x) - } - }); - - let MagnitudeTrait = Trait.compose(EqualityTrait, ComparisonTrait); - -<?xml version="1.0"?> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="-11 121 490 190" width="490px" height="190px"> - <defs> - <marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="SharpArrow_Marker" viewBox="-4 -4 10 8" markerWidth="10" markerHeight="8" color="black"> - <g> - <path d="M 5 0 L -3 -3 L 0 0 L 0 0 L -3 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1px"/> - </g> - </marker> - </defs> - <g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"> - <g> - <rect x="9" y="165.33334" width="141" height="14"/> - <rect x="9" y="165.33334" width="141" height="14" stroke="black" stroke-width="1px"/> - <text transform="translate(14 165.33334)" fill="black"> - <tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="47.373047">notEqual</tspan> - </text> - <rect x="9" y="151.33334" width="141" height="14"/> - <rect x="9" y="151.33334" width="141" height="14" stroke="black" stroke-width="1px"/> - <text transform="translate(14 151.33334)" fill="red"> - <tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="29.361328">equal</tspan> - </text> - <rect x="9" y="137.33334" width="141" height="14"/> - <rect x="9" y="137.33334" width="141" height="14" stroke="black" stroke-width="1px"/> - <text transform="translate(14 137.33334)" fill="black"> - <tspan font-family="Helvetica" font-size="12" font-weight="bold" x="38.49707" y="11" textLength="54.00586">EqualityTrait</tspan> - </text> - <rect x="9" y="273" width="141" height="14"/> - <rect x="9" y="273" width="141" height="14" stroke="black" stroke-width="1px"/> - <text transform="translate(14 273)" fill="black"> - <tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="38.021484">greater</tspan> - </text> - <rect x="9" y="259" width="141" height="14"/> - <rect x="9" y="259" width="141" height="14" stroke="black" stroke-width="1px"/> - <text transform="translate(14 259)" fill="red"> - <tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="47.373047">notEqual</tspan> - </text> - <rect x="9" y="245" width="141" height="14"/> - <rect x="9" y="245" width="141" height="14" stroke="black" stroke-width="1px"/> - <text transform="translate(14 245)" fill="red"> - <tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="21.339844">less</tspan> - </text> - <rect x="9" y="231" width="141" height="14"/> - <rect x="9" y="231" width="141" height="14" stroke="black" stroke-width="1px"/> - <text transform="translate(14 231)" fill="black"> - <tspan font-family="Helvetica" font-size="12" font-weight="bold" x=".15332031" y="11" textLength="112.67578">ComparisonTrait</tspan> - </text> - <rect x="317.75" y="235.5" width="141" height="14"/> - <rect x="317.75" y="235.5" width="141" height="14" stroke="black" stroke-width="1px"/> - <text transform="translate(322.75 235.5)" fill="black"> - <tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="38.021484">greater</tspan> - </text> - <rect x="317.75" y="221.5" width="141" height="14"/> - <rect x="317.75" y="221.5" width="141" height="14" stroke="black" stroke-width="1px"/> - <text transform="translate(322.75 221.5)" fill="red"> - <tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="21.339844">less</tspan> - </text> - <rect x="317.75" y="207.5" width="141" height="14"/> - <rect x="317.75" y="207.5" width="141" height="14" stroke="black" stroke-width="1px"/> - <text transform="translate(322.75 207.5)" fill="black"> - <tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="47.373047">notEqual</tspan> - </text> - <rect x="317.75" y="193.5" width="141" height="14"/> - <rect x="317.75" y="193.5" width="141" height="14" stroke="black" stroke-width="1px"/> - <text transform="translate(322.75 193.5)" fill="red"> - <tspan font-family="Helvetica" font-size="12" font-weight="500" fill="red" x="0" y="11" textLength="29.361328">equal</tspan> - </text> - <rect x="317.75" y="179.5" width="141" height="14"/> - <rect x="317.75" y="179.5" width="141" height="14" stroke="black" stroke-width="1px"/> - <text transform="translate(322.75 179.5)" fill="black"> - <tspan font-family="Helvetica" font-size="12" font-weight="bold" x="31.83789" y="11" textLength="67.32422">MagnitudeTrait</tspan> - </text> - <path d="M 150 248.83887 L 158.89999 248.83887 L 235.9 248.83887 L 235.9 224.66113 L 308.85 224.66113 L 310.85 224.66113" marker-end="url(#SharpArrow_Marker)" stroke="black" stroke-linecap="butt" stroke-linejoin="miter" stroke-width="1px"/> - <path d="M 150 171.15845 L 158.89999 171.15845 L 233.9 171.15845 L 233.9 201.6749 L 308.85 201.6749 L 310.85 201.6749" marker-end="url(#SharpArrow_Marker)" stroke="black" stroke-linecap="butt" stroke-linejoin="miter" stroke-width="1px"/> - </g> - </g> -</svg> - -## Trait Resolution ## - -Composite traits have conflicts when two of the traits in the composition -provide properties with the same name but different values (when compared using -the `===` strict equality operator). In the following example, `TC` has a -conflict because `T1` and `T2` both define a `foo` property: - - let T1 = Trait({ - foo: function () { - // do something - }, - bar: 'bar', - t1: 1 - }); - - let T2 = Trait({ - foo: function() { - // do something else - }, - bar: 'bar', - t2: 2 - }); - - let TC = Trait.compose(T1, T2); - -Attempting to create an object from a composite trait with conflicts throws a -`remaining conflicting property` exception. To create objects from such traits, -you must resolve the conflict. - -You do so by excluding or renaming the conflicting property of one of the -traits. Excluding a property removes it from the composition, so the composition -only acquires the property from the other trait. Renaming a property gives it a -new, non-conflicting name at which it can be accessed. - -In both cases, you call the `resolve` method on the trait whose property you -want to exclude or rename, passing it an object. Each key in the object is the -name of a conflicting property; each value is either `null` to exclude the -property or a string representing the new name of the property. - -For example, the conflict in the previous example could be resolved by excluding -the `foo` property of the second trait. - - let TC = Trait(T1, T2.resolve({ foo: null })); - -It could also be resolved by renaming the `foo` property of the first trait to -`foo2`: - - let TC = Trait(T1.resolve({ foo: "foo2" }), T2); - -When you resolve a conflict, the same-named property of the other trait (the one -that wasn't excluded or renamed) remains available in the composition under its -original name. - -## Constructor Functions ## - -When your code is going to create more than one object with traits, you may want -to define a constructor function to create them. To do so, create a composite -trait representing the traits the created objects should have, then define a -constructor function that creates objects with that trait and whose prototype is -the prototype of the constructor: - - let PointTrait = Trait.compose(T1, T2, T3); - function Point(options) { - let point = PointTrait.create(Point.prototype); - return point; - } - -## Property Descriptor Maps ## - -Traits are designed to work with the new object manipulation APIs defined in -[ECMAScript-262, Edition -5](http://www.ecma-international.org/publications/standards/Ecma-262.htm) (ES5). -Traits are also property descriptor maps that inherit from `Trait.prototype` to -expose methods for creating objects and resolving conflicts. - -The following trait definition: - - let FooTrait = Trait({ - foo: "foo", - bar: function bar() { - return "Hi!" - }, - baz: Trait.required - }); - -Creates the following property descriptor map: - - { - foo: { - value: 'foo', - enumerable: true, - configurable: true, - writable: true - }, - - bar: { - value: function b() { - return 'bar' - }, - enumerable: true, - configurable: true, - writable: true - }, - - baz: { - get baz() { throw new Error('Missing required property: `baz`') } - set baz() { throw new Error('Missing required property: `baz`') } - }, - - __proto__: Trait.prototype - } - -Since Traits are also property descriptor maps, they can be used with built-in -`Object.*` methods that accept such maps: - - Object.create(proto, FooTrait); - Object.defineProperties(myObject, FooTrait); - -Note that conflicting and required properties won't cause exceptions to be -thrown when traits are used with the `Object.*` methods, since those methods are -not aware of those constraints. However, such exceptions will be thrown when the -property with the conflict or the required but missing property is accessed. - -Property descriptor maps can also be used in compositions. This may be useful -for defining non-enumerable properties, for example: - - let TC = Trait.compose( - Trait({ foo: 'foo' }), - { bar: { value: 'bar', enumerable: false } } - ); - -_When using property descriptor maps in this way, make sure the map is not the -only argument to `Trait.compose`, since in that case it will be interpreted as -an object literal with properties to be defined._ - diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/list.md b/tools/addon-sdk-1.5/packages/api-utils/docs/list.md deleted file mode 100644 index fd70698..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/list.md +++ /dev/null @@ -1,98 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Irakli Gozalishvili [gozala@mozilla.com] --> - -The `"list"` module provides base building blocks for composing lists. - -<api name="Iterable"> -@class -Base trait that can be used to compose traits with non-standard -enumeration behaviors. - -This trait is supposed to be used as part of a composition, since it only -provides custom enumeration behavior to a composed object. -It defines one required `_keyValueMap` property, that is used as a hash of -"key-values" to iterate on during enumeration. - -<api name="Iterable"> -@constructor -Constructs an `Iterable` object. -</api> - -<api name="_keyValueMap"> -@property {Object} -Hash map of key-values to iterate over. _Required_ property: that is, the -property must be supplied by objects that compose this trait. -_Note: That this property can be a getter if you need dynamic behavior._ -</api> - -</api> - -<api name="List"> -@class -An ordered collection (also known as a sequence) disallowing duplicate -elements. List is composed out of `Iterable`, therefore it provides custom -enumeration behavior that is similar to array (enumerates only on the -elements of the list). - -List is a base trait and is meant to be part of a -composition, since all of its API is private except for the `length` property. - -**Examples:** - - var MyList = List.compose({ - add: function add(item1, item2, /*item3...*/) { - Array.slice(arguments).forEach(this._add.bind(this)); - }, - remove: function remove(item1, item2, /*item3...*/) { - Array.slice(arguments).forEach(this._remove.bind(this)); - } - }); - MyList('foo', 'bar', 'baz').length == 3; // true - new MyList('new', 'keyword').length == 2; // true - MyList.apply(null, [1, 2, 3]).length == 3; // true - let list = MyList(); - list.length == 0; // true - list.add(1, 2, 3) == 3; // true - -<api name="List"> -@constructor -Constructor can takes any number of elements and creates an instance of -`List` populated with the specified elements. -@param [element1] {Object|String|Number} -@param [element2] {Object|String|Number} -@param [...] {Object|String|Number} -</api> - -<api name="length"> -@property {Number} -Number of elements in this list. -</api> - -<api name="_has"> -@method -@param element {Object|Number|String} -Returns `true` if this list contains the specified `element`. -</api> -<api name="_add"> -@method -@param element {Object|Number|String} -Appends the specified `element` to the end of this list, if it doesn't -contain it. - -_Ignores the call if `element` is already contained._ -</api> -<api name="_remove"> -@method -@param element {Object|Number|String} -Removes specified `element` from this list, if it contains it. - -_Ignores the call if `element` is not contained._ -</api> -<api name="_clear"> -@method -Removes all of the elements from this list. -</api> -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/match-pattern.md b/tools/addon-sdk-1.5/packages/api-utils/docs/match-pattern.md deleted file mode 100644 index 0222e65..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/match-pattern.md +++ /dev/null @@ -1,246 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -The `match-pattern` module can be used to test strings containing URLs -against simple patterns. - -## Specifying Patterns ## - -There are three ways you can specify patterns: - -* as an exact match string -* using a wildcard in a string -* using a regular expression - -### Exact Matches ### - -**A URL** matches only that URL. The URL must start with a scheme, end with a -slash, and contain no wildcards. - -<table> - - <colgroup> - <col width="30%"> - <col width="35%"> - <col width="35%"> - </colgroup> - - <tr> - <th>Example pattern</th> - <th>Example matching URLs</th> - <th>Example non-matching URLs</th> - </tr> - - <tr> - <td><code>"http://example.com/"</code></td> - <td><code>http://example.com/</code></td> - <td><code>http://example.com</code><br> - <code>http://example.com/foo</code><br> - <code>https://example.com/</code><br> - <code>http://foo.example.com/</code></td> - </tr> - -</table> - -### Wildcards ### - -**A single asterisk** matches any URL with an `http`, `https`, or `ftp` -scheme. For other schemes like `file`, use a scheme followed by an -asterisk, as below. - -<table> - - <colgroup> - <col width="30%"> - <col width="35%"> - <col width="35%"> - </colgroup> - - <tr> - <th>Example pattern</th> - <th>Example matching URLs</th> - <th>Example non-matching URLs</th> - </tr> - - <tr> - <td><code>"*"</code></td> - <td><code>http://example.com/</code><br> - <code>https://example.com/</code><br> - <code>ftp://example.com/</code><br> - <code>http://bar.com/foo.js</code><br> - <code>http://foo.com/</code></td> - <td><code>file://example.js</code></td> - </tr> - -</table> - -**A domain name prefixed with an asterisk and dot** matches any URL of that -domain or a subdomain, using any of `http`, `https`, `ftp`. - -<table> - - <colgroup> - <col width="30%"> - <col width="35%"> - <col width="35%"> - </colgroup> - - <tr> - <th>Example pattern</th> - <th>Example matching URLs</th> - <th>Example non-matching URLs</th> - </tr> - - <tr> - <td><code>"*.example.com"</code></td> - <td><code>http://example.com/</code><br> - <code>http://foo.example.com/</code><br> - <code>https://example.com/</code><br> - <code>http://example.com/foo</code><br> - <code>ftp://foo.example.com/</code></td> - <td><code>ldap://example.com</code><br> - <code>http://example.foo.com/</code></td> - </tr> - -</table> - -**A URL followed by an asterisk** matches that URL and any URL prefixed with -the pattern. - -<table> - - <colgroup> - <col width="30%"> - <col width="35%"> - <col width="35%"> - </colgroup> - - <tr> - <th>Example pattern</th> - <th>Example matching URLs</th> - <th>Example non-matching URLs</th> - </tr> - - <tr> - <td><code>"https://foo.com/*"</code></td> - <td><code>https://foo.com/</code><br> - <code>https://foo.com/bar</code></td> - <td><code>http://foo.com/</code><br> - <code>https://foo.com</code><br> - <code>https://bar.foo.com/</code></td> - </tr> - -</table> - -**A scheme followed by an asterisk** matches all URLs with that scheme. To -match local files, use `file://*`. - -<table> - - <colgroup> - <col width="30%"> - <col width="70%"> - </colgroup> - - <tr> - <th>Example pattern</th> - <th>Example matching URLs</th> - </tr> - - <tr> - <td><code>"file://*"</code></td> - <td><code>file://C:/file.html</code><br> - <code>file:///home/file.png</code></td> - </tr> - -</table> - -### Regular Expressions ### - -You can specify patterns using a -[regular expression](https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions): - - var { MatchPattern } = require("match-pattern"); - var pattern = new MatchPattern(/.*example.*/); - -The regular expression is subject to restrictions based on those applied to the -[HTML5 pattern attribute](http://dev.w3.org/html5/spec/common-input-element-attributes.html#attr-input-pattern). In particular: - -* The pattern must match the entire value, not just any subset. For example, the -pattern `/moz.*/` will not match the URL `http://mozilla.org`. - -* The expression is compiled with the `global`, `ignoreCase`, and `multiline` flags - disabled. The `MatchPattern` constructor will throw an exception - if you try to set any of these flags. - -<table> - - <colgroup> - <col width="30%"> - <col width="35%"> - <col width="35%"> - </colgroup> - - <tr> - <th>Example pattern</th> - <th>Example matching URLs</th> - <th>Example non-matching URLs</th> - </tr> - - <tr> - <td><code>/.*moz.*/</code></td> - <td><code>http://foo.mozilla.org/</code><br> - <code>http://mozilla.org</code><br> - <code>https://mozilla.org</code><br> - <code>http://foo.com/mozilla</code><br> - <code>http://hemozoon.org</code><br> - <code>mozscheme://foo.org</code><br></td> - <td><code>http://foo.org</code><br> - </tr> - - <tr> - <td><code>/http:\/\/moz.*/</code></td> - <td><code>http://mozilla.org</code><br> - <code>http://mozzarella.com</code></td> - <td><code>https://mozilla.org</code><br> - <code>http://foo.mozilla.org/</code><br> - <code>http://foo.com/moz</code></td> - </tr> - - <tr> - <td><code>/http.*moz.*/</code><br></td> - <td><code>http://foo.mozilla.org/</code><br> - <code>http://mozilla.org</code><br> - <code>http://hemozoon.org/</code></td> - <td><code>ftp://http/mozilla.org</code></td> - </tr> - -</table> - -## Examples ## - - var { MatchPattern } = require("match-pattern"); - var pattern = new MatchPattern("http://example.com/*"); - console.log(pattern.test("http://example.com/")); // true - console.log(pattern.test("http://example.com/foo")); // true - console.log(pattern.test("http://foo.com/")); // false! - -<api name="MatchPattern"> -@class -<api name="MatchPattern"> -@constructor - This constructor creates match pattern objects that can be used to test URLs. -@param pattern {string} - The pattern to use. See Patterns above. -</api> - -<api name="test"> -@method - Tests a URL against the match pattern. -@param url {string} - The URL to test. -@returns {boolean} - True if the URL matches the pattern and false otherwise. -</api> -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/memory.md b/tools/addon-sdk-1.5/packages/api-utils/docs/memory.md deleted file mode 100644 index c15d59c..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/memory.md +++ /dev/null @@ -1,7 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -The `memory` module provides a concrete default implementation for the SDK's -`memory` global. For documentation on the `memory` global, see the -[Globals](dev-guide/module-development/globals.html) reference. diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/message-manager.md b/tools/addon-sdk-1.5/packages/api-utils/docs/message-manager.md deleted file mode 100644 index 522c613..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/message-manager.md +++ /dev/null @@ -1,13 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Matteo Ferretti [zer0@mozilla.com] --> - -Overview --------- -The `message-manager` module provides a minimalist implementation -of the [Message Manager](https://developer.mozilla.org/en/The_message_manager) -APIs, in a single process environment. - -It's mainly used internally for Fennec Birch support.
\ No newline at end of file diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/namespace.md b/tools/addon-sdk-1.5/packages/api-utils/docs/namespace.md deleted file mode 100644 index 07ec96e..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/namespace.md +++ /dev/null @@ -1,71 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -Provides an API for creating namespaces for any given objects, which -effectively may be used for creating fields that are not part of objects -public API. - - let { ns } = require('api-utils/namespace'); - let aNamespace = ns(); - - aNamespace(publicAPI).secret = secret; - -One namespace may be used with multiple objects: - - let { ns } = require('api-utils/namespace'); - let dom = ns(); - - function View(element) { - let view = Object.create(View.prototype); - dom(view).element = element; - // .... - } - View.prototype.destroy = function destroy() { - let { element } = dom(this); - element.parentNode.removeChild(element); - // ... - }; - // ... - exports.View = View; - // ... - -Also, multiple namespaces can be used with one object: - - // ./widget.js - - let { Cu } = require('chrome'); - let { ns } = require('api-utils/namespace'); - let { View } = require('./view'); - - // Note this is completely independent from View's internal Namespace object. - let sandboxes = ns(); - - function Widget(options) { - let { element, contentScript } = options; - let widget = Object.create(Widget.prototype); - View.call(widget, options.element); - sandboxes(widget).sandbox = Cu.Sandbox(element.ownerDocument.defaultView); - // ... - } - Widget.prototype = Object.create(View.prototype); - Widget.prototype.postMessage = function postMessage(message) { - let { sandbox } = sandboxes(this); - sandbox.postMessage(JSON.stringify(JSON.parse(message))); - ... - }; - Widget.prototype.destroy = function destroy() { - View.prototype.destroy.call(this); - // ... - delete sandboxes(this).sandbox; - }; - exports.Widget = Widget; - -In addition access to the namespace can be shared with other code by just -handing them a namespace accessor function. - - let { dom } = require('./view'); - Widget.prototype.setInnerHTML = function setInnerHTML(html) { - dom(this).element.innerHTML = String(html); - }; - diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/observer-service.md b/tools/addon-sdk-1.5/packages/api-utils/docs/observer-service.md deleted file mode 100644 index 4d7cb58..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/observer-service.md +++ /dev/null @@ -1,73 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Atul Varma [atul@mozilla.com] --> -<!-- edited by Noelle Murata [fiveinchpixie@gmail.com] --> - -The `observer-service` module provides access to the -application-wide observer service singleton. - -For a list of common observer topics across a variety of Mozilla-based -applications, see the MDC page on -[Observer Notifications](https://developer.mozilla.org/en/Observer_Notifications). - -## Observer Callbacks ## - -Observer callbacks are functions of the following form: - - function callback(subject, data) { - /* Respond to the event notification here... */ - } - -In the above example, `subject` is any JavaScript object, as is -`data`. The particulars of what the two contain are specific -to the notification topic. - -<api name="add"> -@function - Adds an observer callback to be triggered whenever a notification matching the - topic is broadcast throughout the application. - -@param topic {string} - The topic to observe. - -@param callback {function,object} - Either a function or an object that implements [`nsIObserver`](http://mxr.mozilla.org/mozilla-central/source/xpcom/ds/nsIObserver.idl). - If a function, then it is called when the notification occurs. If an object, - then its `observe()` method is called when the notification occurs. - -@param [thisObject] {object} - An optional object to use as `this` when a function callback is called. -</api> - -<api name="remove"> -@function - Unsubscribes a callback from being triggered whenever a notification - matching the topic is broadcast throughout the application. - -@param topic {string} - The topic being observed by the previous call to `add()`. - -@param callback {function,object} - The callback subscribed in the previous call to `add()`, either a function or - object. - -@param [thisObject] {object} - If `thisObject` was passed to the previous call to `add()`, it should be - passed to `remove()` as well. -</api> - -<api name="notify"> -@function - Broadcasts a notification event for a topic, passing a subject and data to all - applicable observers in the application. - -@param topic {string} - The topic about which to broadcast a notification. - -@param [subject] {value} - Optional information about the topic. This can be any JS object or primitive. - If you have multiple values to pass to observers, wrap them in an object, - e.g., `{ foo: 1, bar: "some string", baz: myObject }`. -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/plain-text-console.md b/tools/addon-sdk-1.5/packages/api-utils/docs/plain-text-console.md deleted file mode 100644 index a46f134..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/plain-text-console.md +++ /dev/null @@ -1,7 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -The `plain-text-console` module provides a minimalist implementation -of the [console](dev-guide/addon-development/console.html) global, -which simply logs all messages to standard output. diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/preferences-service.md b/tools/addon-sdk-1.5/packages/api-utils/docs/preferences-service.md deleted file mode 100644 index de03ccd..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/preferences-service.md +++ /dev/null @@ -1,84 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Myk Melez [myk@mozilla.org] --> -<!-- contributed by Daniel Aquino [mr.danielaquino@gmail.com] --> -<!-- contributed by Atul Varma [atul@mozilla.com] --> -<!-- edited by Noelle Murata [fiveinchpixie@gmail.com] --> - -The `preferences-service` module provides access to the -application-wide preferences service singleton. - - -<api name="set"> -@function -Sets the application preference `name` to `value`. -@param name {string} Preference name. -@param value {string,number,bool} Preference value. - -**Example:** - - var name = "extensions.checkCompatibility.nightly"; - require("preferences-service").set(name, false); -</api> - - -<api name="get"> -@function -Gets the application preference `name`. -@param name {string} -@param defaultValue {string,number,bool} Preference value. -@returns {string,number,bool} Preference value, returns a default value if no -preference is set. - -**Example:** - - var name = "extensions.checkCompatibility.nightly"; - var nightlyCompatChk = require("preferences-service").get(name); -</api> - - -<api name="has"> -@function -@param name {string} Preference name. -@returns {bool} Returns whether or not the application preference `name` exists. - -**Example:** - - var name = "extensions.checkCompatibility.nightly"; - if (require("preferences-service").has(name)) { - // ... - } -</api> - - -<api name="isSet"> -@function -@param name {string} Preference name. -@returns {bool} -Returns whether or not the application preference `name` both exists -and has been set to a non-default value by the user (or a program -acting on the user's behalf). - -**Example:** - - var name = "extensions.checkCompatibility.nightly"; - if (require("preferences-service").isSet(name)) { - // ... - } -</api> - - -<api name="reset"> -@function -Clears a non-default, user-set value from the application preference -`name`. If no user-set value is defined on `name`, the function -does nothing. -@param name {string} Preference name. - -**Example:** - - var name = "extensions.checkCompatibility.nightly"; - require("preferences-service").reset(name); -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/runtime.md b/tools/addon-sdk-1.5/packages/api-utils/docs/runtime.md deleted file mode 100644 index c8d8ed3..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/runtime.md +++ /dev/null @@ -1,75 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Wes Kocher [kwierso@gmail.com] --> - -The `runtime` module provides access to information about Firefox's -runtime environment. All properties exposed are read-only. - -For more information, see [nsIXULRuntime][nsIXULRuntime]. -[nsIXULRuntime]: https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIXULRuntime - -<api name="inSafeMode"> -@property {boolean} - This value is `true` if Firefox was started in safe mode, - otherwise `false`. -</api> - -<api name="OS"> -@property {string} - A string identifying the current operating system. For example, . - `"WINNT"`, `"Darwin"`, or `"Linux"`. See [OS_TARGET][OS_TARGET] - for a more complete list of possible values. - -[OS_TARGET]: https://developer.mozilla.org/en/OS_TARGET -</api> - -<api name="processType"> -@property {long} - The type of the caller's process, which will be one of these constants\: -<table> - <tr> - <th>Constant</th> - <th>Value</th> - <th>Description</th> - </tr> - - <tr> - <td>PROCESS_TYPE_DEFAULT</td> - <td>0</td> - <td>The default (chrome) process.</td> - </tr> - - <tr> - <td>PROCESS_TYPE_PLUGIN</td> - <td>1</td> - <td>A plugin subprocess.</td> - </tr> - - <tr> - <td>PROCESS_TYPE_CONTENT</td> - <td>2</td> - <td>A content subprocess.</td> - </tr> - - <tr> - <td>PROCESS_TYPE_IPDLUNITTEST</td> - <td>3</td> - <td>An IPDL unit testing subprocess.</td> - </tr> -</table> -</api> - -<api name="widgetToolkit"> -@property {string} - A string identifying the target widget toolkit in use. -</api> - -<api name="XPCOMABI"> -@property {string} - A string identifying the [ABI][ABI] of the current processor and compiler vtable. - This string takes the form \<`processor`\>-\<`compilerABI`\>, - for example\: "`x86-msvc`" or "`ppc-gcc3`". -[ABI]: https://developer.mozilla.org/en/XPCOM_ABI -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/sandbox.md b/tools/addon-sdk-1.5/packages/api-utils/docs/sandbox.md deleted file mode 100644 index 026b569..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/sandbox.md +++ /dev/null @@ -1,51 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -Provides an API for creating javascript sandboxes and for executing scripts -in them. - -### Create a sandbox ### - -For the starting point you need to create a sandbox: - - const { sandbox, evaluate, load } = require("api-utils/sandbox"); - let scope = sandbox('http://example.com'); - -Argument passed to the sandbox defines it's privileges. Argument may be an URL -string, in which case sandbox will get exact same privileges as a scripts -loaded from that URL. Argument also could be a DOM window object, to inherit -privileges from the window being passed. Finally if argument is omitted or is -`null` sandbox will have a chrome privileges giving it access to all the XPCOM -components. Optionally `sandbox` function can be passed a second optional -argument (See [sandbox documentation on MDN](https://developer.mozilla.org/en/Components.utils.Sandbox#Optional_parameter) -for details). - -### Evaluate code ### - -Module provides `evaluate` function that allows executing code in the given -sandbox: - - evaluate(scope, 'var a = 5;'); - evaluate(scope, 'a + 2;'); //=> 7 - -More details about evaluated script may be passed via optional arguments that -may improve an exception reporting: - - // Evaluate code as if it was loaded from 'http://foo.com/bar.js' and - // start from 2nd line. - evaluate(scope, 'a ++', 'http://foo.com/bar.js', 2); - -Version of JavaScript can be also specified via optional argument: - - evaluate(scope, 'let b = 2;', 'bar.js', 1, '1.5'); - // throws cause `let` is not defined in JS 1.5. - -### Loading scripts ### - -API provides limited API for loading scripts right form the local URLs, -but data: URLs are supported. - - load(scope, 'resource://path/to/my/script.js'); - load(scope, 'file:///path/to/script.js'); - load(scope, 'data:,var a = 5;');
\ No newline at end of file diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/tab-browser.md b/tools/addon-sdk-1.5/packages/api-utils/docs/tab-browser.md deleted file mode 100644 index 295fcc7..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/tab-browser.md +++ /dev/null @@ -1,140 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Dietrich Ayala [dietrich@mozilla.com] --> - -The `tab-browser` module is a low-level API that provides privileged -access to browser tab events and actions. - -Introduction ------------- - -The `tab-browser` module contains helpers for tracking tabbrowser elements -and tabs, as well as a few utilities for actions such as opening a new -tab, and catching all tab content loads. - -This is a low-level API that has full privileges, and is intended to be used -by SDK internal modules. If you just need easy access to tab events for your -add-on, use the Tabs module (JEP 110). - -<api name="activeTab"> -@property {element} -The XUL tab element of the currently active tab. -</api> - -<api name="addTab"> -@function -Adds a new tab. - -**Example** - - var tabBrowser = require("tab-browser"); - tabBrowser.addTab("http://google.com"); - - var tabBrowser = require("tab-browser"); - tabBrowser.addTab("http://google.com", { - inBackground: true - }); - - var tabBrowser = require("tab-browser"); - tabBrowser.addTab("http://google.com", { - inNewWindow: true, - onLoad: function(tab) { - console.log("tab is open."); - } - }); - -@returns {element} -The XUL tab element of the newly created tab. - -@param URL {string} -The URL to be opened in the new tab. - -@param options {object} -Options for how and where to open the new tab. - -@prop [inNewWindow] {boolean} -An optional parameter whose key can be set in `options`. -If true, the tab is opened in a new window. Default is false. - -@prop [inBackground] {boolean} -An optional parameter whose key can be set in `options`. -If true, the tab is opened adjacent to the active tab, but not -switched to. Default is false. - -@prop [onLoad] {function} -An optional parameter whose key can be set in `options`. -A callback function that is called once the tab has loaded. -The XUL element for the tab is passed as a parameter to -this function. -</api> - -<api name="Tracker"> -@function -Register a delegate object to be notified when tabbrowsers are created -and destroyed. - -The onTrack method will be called once per pre-existing tabbrowser, upon -tracker registration. - -**Example** - - var tabBrowser = require("tab-browser"); - let tracker = { - onTrack: function(tabbrowser) { - console.log("A new tabbrowser is being tracked."); - }, - onUntrack: function(tabbrowser) { - console.log("A tabbrowser is no longer being tracked."); - } - }; - tabBrowser.Tracker(tracker); - -@param delegate {object} -Delegate object to be notified each time a tabbrowser is created or destroyed. -The object should contain the following methods: - -@prop [onTrack] {function} -Method of delegate that is called when a new tabbrowser starts to be tracked. -The tabbrowser element is passed as a parameter to this method. - -@prop [onUntrack] {function} -Method of delegate that is called when a tabbrowser stops being tracked. -The tabbrowser element is passed as a parameter to this method. -</api> - -<api name="TabTracker"> -@function -Register a delegate object to be notified when tabs are opened and closed. - - -The onTrack method will be called once per pre-existing tab, upon -tracker registration. - -**Example** - - var tabBrowser = require("tab-browser"); - let tracker = { - onTrack: function(tab) { - console.log("A new tab is being tracked."); - }, - onUntrack: function(tab) { - console.log("A tab is no longer being tracked."); - } - }; - tabBrowser.TabTracker(tracker); - -@param delegate {object} -Delegate object to be notified each time a tab is opened or closed. -The object should contain the following methods: - -@prop [onTrack] {function} -Method of delegate that is called when a new tab starts to be tracked. -The tab element is passed as a parameter to this method. - -@prop [onUntrack] {function} -Method of delegate that is called when a tab stops being tracked. -The tab element is passed as a parameter to this method. -</api> - diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/text-streams.md b/tools/addon-sdk-1.5/packages/api-utils/docs/text-streams.md deleted file mode 100644 index 55f177c..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/text-streams.md +++ /dev/null @@ -1,102 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Drew Willcoxon [adw@mozilla.com] --> -<!-- edited by Noelle Murata [fiveinchpixie@gmail.com] --> - -The `text-streams` module provides streams for reading and writing text using -particular character encodings. - -<api name="TextReader"> -@class -<api name="TextReader"> -@constructor - Creates a buffered input stream that reads text from a backing stream using a - given text encoding. -@param inputStream {stream} - The backing stream, an [`nsIInputStream`](http://mxr.mozilla.org/mozilla-central/source/xpcom/io/nsIInputStream.idl). - It must already be opened. -@param [charset] {string} - `inputStream` is expected to be in the character encoding named by this value. - If not specified, "UTF-8" is assumed. See [`nsICharsetConverterManager.idl`](http://mxr.mozilla.org/mozilla-central/source/intl/uconv/idl/nsICharsetConverterManager.idl) - for documentation on how to determine other valid values for this. -</api> - -<api name="closed"> -@property {boolean} - True if the stream is closed. -</api> - -<api name="close"> -@method - Closes both the stream and its backing stream. -</api> - -<api name="read"> -@method - Reads and returns a string from the stream. If the stream is closed, an - exception is thrown. -@param [numChars] {number} - The number of characters to read. If not given, the remainder of the stream - is read. -@returns {string} - The string read. If the stream is at the end, the empty string is returned. -</api> - -</api> - - -<api name="TextWriter"> -@class -<api name="TextWriter"> -@constructor - Creates a buffered output stream that writes text to a backing stream using a - given text encoding. -@param outputStream {stream} - The backing stream, an [`nsIOutputStream`](http://mxr.mozilla.org/mozilla-central/source/xpcom/io/nsIOutputStream.idl). - It must already be opened. -@param [charset] {string} - Text will be written to `outputStream` using the character encoding named by - this value. If not specified, "UTF-8" is assumed. See [`nsICharsetConverterManager.idl`](http://mxr.mozilla.org/mozilla-central/source/intl/uconv/idl/nsICharsetConverterManager.idl) - for documentation on how to determine other valid values for this. -</api> - -<api name="closed"> -@property {boolean} - True if the stream is closed. -</api> - -<api name="close"> -@method - Flushes the backing stream's buffer and closes both the stream and the backing - stream. If the stream is already closed, an exception is thrown. -</api> - -<api name="flush"> -@method - Flushes the backing stream's buffer. -</api> - -<api name="write"> -@method - Writes a string to the stream. If the stream is closed, an exception is - thrown. -@param str {string} - The string to write. -</api> - -<api name="writeAsync"> -@method - Writes a string on a background thread. After the write completes, the - backing stream's buffer is flushed, and both the stream and the backing stream - are closed, also on the background thread. If the stream is already closed, - an exception is thrown immediately. -@param str {string} - The string to write. -@param [callback] {callback} - *`callback`*, if given, must be a function. It's called as `callback(error)` - when the write completes. `error` is an `Error` object or undefined if there - was no error. Inside *`callback`*, `this` is the `TextWriter` object. -</api> -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/traceback.md b/tools/addon-sdk-1.5/packages/api-utils/docs/traceback.md deleted file mode 100644 index b52c183..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/traceback.md +++ /dev/null @@ -1,66 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Atul Varma [atul@mozilla.com] --> -<!-- edited by Noelle Murata [fiveinchpixie@gmail.com] --> - - -The `traceback` module contains functionality similar to -Python's [traceback](http://docs.python.org/library/traceback.html) module. - -## JSON Traceback Objects ## - -Tracebacks are stored in JSON format. The stack is represented as an -array in which the most recent stack frame is the last element; each -element thus represents a stack frame and has the following keys: - -<table> - <tr> - <td><code>filename</code></td> - <td>The name of the file that the stack frame takes place in.</td> - </tr> - <tr> - <td><code>lineNo</code></td> - <td>The line number is being executed at the stack frame.</td> - </tr> - <tr> - <td><code>funcName</code></td> - <td>The name of the function being executed at the stack frame, or - <code>null</code> if the function is anonymous or the stack frame is - being executed in a top-level script or module.</td> - </tr> -</table> - -<api name="fromException"> -@function - Attempts to extract the traceback from *`exception`*. - -@returns {traceback} - JSON representation of the traceback or `null` if not found. - -@param exception {exception} - exception where exception is an `nsIException`. -</api> - -See [nsIException](https://developer.mozilla.org/en/NsIException) for more -information. - -<api name="get"> -@function - -@returns {JSON} - Returns the JSON representation of the stack at the point that this - function is called. -</api> - -<api name="format"> -@function -Given a JSON representation of the stack or an exception instance, -returns a formatted plain text representation of it, similar to -Python's formatted stack tracebacks. If no argument is provided, the -stack at the point this function is called is used. - -@param [tbOrException] {object} -</api> - diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/traits.md b/tools/addon-sdk-1.5/packages/api-utils/docs/traits.md deleted file mode 100644 index 910cd9a..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/traits.md +++ /dev/null @@ -1,244 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Irakli Gozalishvil [gozala@mozilla.com] --> - -The `traits` module provides base building blocks for secure object -composition. It exports base trait / constructor function that -constructs an instance of `Trait`. - -[Traits](http://en.wikipedia.org/wiki/Trait_%28computer_science%29) are a -simple composition mechanism for structuring object-oriented programs. Traits -are similar to -[interfaces](http://en.wikipedia.org/wiki/Interface_%28object-oriented_programming%29), -except that they often define only a part of an object's data and behavior and -are intended to be used in conjunction with other traits to completely define -the object. - -Traits are also considered to be a more robust alternative to -[mixins](http://en.wikipedia.org/wiki/Mixins) because, name conflicts have to -be resolved explicitly by composer & because trait composition is -order-independent (hence more declarative). - - -There are some other implementations of traits in JavaScript & some ideas / -APIs are borrowed from them: - -- [traitsjs](http://www.traitsjs.org/) -- [joose](http://code.google.com/p/joose-js/) - -Object-capability security model --------------------------------- - -Implementation uses an -[object-capability security model](http://en.wikipedia.org/wiki/Object-capability_model) -to allow protection of private APIs. At the same private APIs can be shared -between among trait composition parties. To put it simply: All the properties -whose names start with `"_"` are considered to be **private**, and are -unaccessible from anywhere except other **public** methods / accessors of the -instance that had been defined during composition. - -<api name="Trait"> -@class -<api name="Trait"> -@constructor -Creates an instance of Trait and returns it if it has no `constructor` method -defined. If instance has `constructor` method, then it is called with all the -arguments passed to this function and returned value is returned instead, -unless it's `undefined`. In that case instance is returned. - -`Trait` function represents a base trait. As with any other trait it represents -a constructor function for creating instances of its own & a placeholder -for a trait compositions functions. -</api> - -<api name="compose"> -@method -Composes new trait out of itself and traits / property maps passed as an -arguments. If two or more traits / property maps have properties with the same -name, the new trait will contain a "conflict" property for that name (see -examples in Examples section to find out more about "conflict" properties). -This is a commutative and associative operation, and the order of its -arguments is not significant. - -**Examples:** - -Let's say we want to define a reusable piece of code for a lists of elements. - - var { Trait } = require('traits'); - var List = Trait.compose({ - // private API: - _list: null, - // public API - constructor: function List() { - this._list = []; - }, - get length() this._list.length, - add: function add(item) this._list.push(item), - remove: function remove(item) { - let list = this._list; - let index = list.indexOf(item); - if (0 <= index) list.splice(index, 1); - } - }); - -Instances of `List` can be created by calling `List` function with or without -`new` keyword. - - let l1 = List(); - l1 instanceof List; // true - let l2 = new List(); - l2 instanceof List; // true - -As you can see `add` and `remove` functions are capable of accessing private -`_list` property, but thats about it, there's nothing else that will be able -to access this property: - - '_list' in l1; // false - '_list' in l2; // false - '_list' in List.protoype; // false - l1.has = function(name) name in this - l1.has('_list'); // false - l1.length; // 0 - l1.add('test') - l1.length // 1 - -@param trait1 {Object|Function} - Trait or property map to compose new trait from. -@param trait2 {Object|Function} - Trait or property map to compose new trait from. -@param ... {Object|Function} - Traits or property maps to compose new trait from. - -@returns {Function} - New trait containing the combined properties of all the traits. -</api> - -<api name="required"> -@property {Object} -Singleton, used during trait composition to define "required" properties. - -**Example:** - - var Enumerable = Trait.compose({ - list: Trait.required, - forEach: function forEach(consumer) { - return this.list.forEach(consumer); - } - }); - - let c1 = Enumerable(); // Error: Missing required property: list - - var EnumerableList = List.compose({ - get list() this._list.slice(0) - }, Enumerable); - - let c2 = EnumerableList(); - c2.add('test') - c2.length // 1 - c2.list[0] // 'test' - c2.forEach(console.log) // > info: 'test 0 test' - -</api> - - -<api name="resolve"> -@method -Composes a new trait that has all the same properties -as the trait on which it is called, except that each property listed -in the `resolutions` argument will be renamed from the name -of the property in the `resolutions` argument to its value. -And if its value is `null`, the property will become required. - -**Example:** - - var Range = List.resolve({ - constructor: null, - add: '_add', - }).compose({ - min: null, - max: null, - get list() this._list.slice(0), - constructor: function Range(min, max) { - this.min = min; - this.max = max; - this._list = []; - }, - add: function(item) { - if (item <= this.max && item >= this.min) - this._add(item) - } - }); - - - let r = Range(0, 10); - r.min; // 0 - r.max; // 10 - r.length; // 0; - r.add(5); - r.length; // 1 - r.add(12); - r.length; // 1 (12 was not in a range) - -@param resolutions {Object} -@returns {Function} - New resolved trait. -</api> - -<api name="override"> -@method -Composes a new trait with all of the combined properties of `this` and the -argument traits. In contrast to `compose`, `override` immediately resolves -all conflicts resulting from this composition by overriding the properties of -later traits. Trait priority is from left to right. I.e. the properties of -the leftmost trait are never overridden. - -**Example:** - - // will compose trait with conflict property 'constructor' - var ConstructableList = List.compose({ - constructor: function List() this._list = Array.slice(arguments) - }); - // throws error with message 'Remaining conflicting property: constructor' - ConstructableList(1, 2, 3); - - var ConstructableList = List.override({ - constructor: function List() this._list = Array.slice(arguments) - }); - ConstructableList(1, 2, 3).length // 3 - -@param trait1 {Object|Function} - Trait or property map to compose new trait from. -@param trait2 {Object|Function} - Trait or property map to compose new trait from. -@param ... {Object|Function} - Traits or property maps to compose new trait from. - -@returns {Function} - New trait containing the combined properties of all the traits. -</api> - -<api name="_public"> -@property {Object} -Internal property of instance representing public API that is exposed to the -consumers of an instance. -</api> - -<api name='toString'> -@method -Textual representation of an object. All the traits will return: -`'[object Trait]'` string, unless they have `constructor` property, in that -case string `'Trait'` is replaced with the name of `constructor` property. - -**Example:** - - var MyTrait = Trait.compose({ - constructor: function MyTrait() { - // do your initialization here - } - }); - MyTrait().toString(); // [object MyTrait] - -</api> -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/unit-test.md b/tools/addon-sdk-1.5/packages/api-utils/docs/unit-test.md deleted file mode 100644 index 6962c41..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/unit-test.md +++ /dev/null @@ -1,393 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Atul Varma [atul@mozilla.com] --> -<!-- edited by Noelle Murata [fiveinchpixie@gmail.com] --> -<!-- edited by Shane Tomlinson[stomlinson@mozilla.com] --> - -The `unit-test` module makes it easy to find and run unit tests. - -<api name="test"> -@class -Each function which represents a test case is passed a single argument -`test`, which represents the test runner. - -<api name="pass"> -@method - Marks a test as passing, with the given optional message. - -@param [message] {string} - Optional passing message. -</api> - - -<api name="fail"> -@method - Marks a test as failing, with the given optional message. - -@param [message] {string} - Optional failure message. -</api> - -<api name="expectFail"> -@method - *experimental* Expect the test enclosed within `func` to fail. - -@param func {function} - A function that should contain a test that is expected to fail. -</api> - -<api name="exception"> -@method - Marks a test as failing due to the given exception having been thrown. - This can be put in a `catch` clause. - -@param e {exception} - An exception. -</api> - -<api name="assert"> -@method - Ensures that `a` has a truthy value. - -@param a {value} - Value to verify. -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. -</api> - - -<api name="assertEqual"> -@method - Ensures that `a == b` without recursing into `a` or `b`. - -@param a {value} - A value. - -@param b {value} - Another value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. -</api> - -<api name="assertNotEqual"> -@method - Ensures that `a != b` without recursing into `a` or `b`. - -@param a {value} - A value. - -@param b {value} - Another value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. -</api> - -<api name="assertStrictEqual"> -@method - Ensures that `a === b` without recursing into `a` or `b`. - -@param a {value} - A value. - -@param b {value} - Another value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. -</api> - - -<api name="assertNotStrictEqual"> -@method - Ensures that `a !== b` without recursing into `a` or `b`. - -@param a {value} - A value. - -@param b {value} - Another value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. -</api> - -<api name="assertMatches"> -@method - Ensures that the given string matches the given regular expression. - If it does, marks a test as passing, otherwise marks a test as - failing. - -@param string {string} - The string to test. - -@param regexp {regexp} - The string should match this regular expression. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. -</api> - - -<api name="assertRaises"> -@method - Calls the function `func` with no arguments, expecting an exception - to be raised. If nothing is raised, marks the test as failing. If an - exception is raised, the exception's `message` property is - compared with `predicate`: if `predicate` is a string, then a - simple equality comparison is done with `message`. Otherwise, - if `predicate` is a regular expression, `message` is tested - against it. - -@param func {function} - A function that should raise an exception when called. - -@param predicate {string,regexp} - A string or regular expression to compare to the exception's message. - -@param [message] {string} - Depending on the outcome, a test is marked as passing or failing, and - *message* is logged. -</api> - - -<api name="assertFunction"> -@method - Ensures that `a` is a function. - -@param a {value} - A value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. - -</api> - - -<api name="assertUndefined"> -@method - Ensures that `a` is `undefined`. `null`, `0`, and `false` will all fail. - -@param a {value} - A value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. - -</api> - - -<api name="assertNotUndefined"> -@method - Ensures that `a` is not `undefined`. `null`, `0`, and `false` will all pass. - -@param a {value} - A value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. - -</api> - - -<api name="assertNull"> -@method - Ensures that `a` is `null`. `undefined`, `0`, and `false` will all fail. - -@param a {value} - A value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. - -</api> - - -<api name="assertNotNull"> -@method - Ensures that `a` is not `null`. `undefined`, `0`, and `false` will all pass. - -@param a {value} - A value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. - -</api> - - -<api name="assertObject"> -@method - Ensures that `a` is an object. A function, string, or number will fail. - -@param a {value} - A value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. - -</api> - - -<api name="assertString"> -@method - Ensures that `a` is a string. - -@param a {value} - A value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. - -</api> - - -<api name="assertArray"> -@method - Ensures that `a` is an array. - -@param a {value} - A value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. - -</api> - - -<api name="assertNumber"> -@method - Ensures that `a` is a number. - -@param a {value} - A value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. - -</api> - - -<api name="waitUntilDone"> -@method - Puts the test runner into asynchronous testing mode, waiting up to - *timeout* milliseconds for `test.done()` to be called. This - is intended for use in situations where a test suite schedules a - callback, calls `test.waitUntilDone()`, and then calls - `test.done()` in the callback. - -@param [timeout] {integer} - If this number of milliseconds elapses and `test.done()` has not yet been - called, the test is marked as failing. -</api> - - -<api name="done"> -@method - Marks a test as being complete. Assumes a previous call to - `test.waitUntilDone()`. -</api> - -</api> - - -<api name="waitUntil"> -@method - Ensures that `a` returns a truthy value within a reasonable amount of time. - -@param a {function} - Function that returns the value to verify. -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. -</api> - - -<api name="waitUntilEqual"> -@method - Ensures that `a == b` returned values or values without without recursing - into `a` or `b`. - -@param a {Function} - A value, or a function that returns a value. - -@param b {value} - Another value, or a function that returns value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. -</api> - -<api name="waitUntilNotEqual"> -@method - Ensures that `a != b` without recursing into `a` or `b`. - -@param a {Function} - A value, or a function that returns a value. - -@param b {value} - Another value, or a function that returns another value. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. -</api> - - -<api name="waitUntilMatches"> -@method - Ensures that the given string matches the given regular expression. - If it does, marks the test as passing, otherwise marks the test as - failing. - -@param string {Function} - A function that returns the string to test. - -@param regexp {regexp} - The string should match this regular expression. - -@param [message] {string} - The test is marked as passing or failing depending on the result, logging - *message* with it. -</api> - - - -<api name="findAndRunTests"> -@function - The list of directories is searched for SecurableModules that start - with the prefix `test-`. Each module matching this criteria is - expected to export functions that are test cases or a suite of test - cases; each is called with a single argument, which is a Test Runner - Object. - -@param options {object} - An object with the following properties: - @prop dirs {string} - A list of absolute paths representing directories to search - for tests in. It's assumed that all of these directories are also - in the module search path, i.e. any JS files found in them are - SecurableModules that can be loaded via a call to - `require()`. - @prop onDone {function} - A function to call when testing is complete. -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/unload.md b/tools/addon-sdk-1.5/packages/api-utils/docs/unload.md deleted file mode 100644 index 8a76b3f..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/unload.md +++ /dev/null @@ -1,61 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Atul Varma [atul@mozilla.com] --> -<!-- contributed by Drew Willcoxon [adw@mozilla.com] --> -<!-- edited by Noelle Murata [fiveinchpixie@gmail.com] --> - -The `unload` module allows modules to register callbacks that are called -when they are unloaded. It is similar to the CommonJS module of the same -name in the [Narwhal][] platform. - -[Narwhal]: http://narwhaljs.org/ - -<api name="ensure"> -@function - Calling `ensure()` on an object does two things: - - 1. It replaces a destructor method with a wrapper method that will never call - the destructor more than once. - 2. It ensures that this wrapper method is called when `send()` is - called. - - Therefore, when you register an object with `ensure()`, you can call its - destructor method yourself, you can let it happen for you, or you can do both. - - The destructor will be called with a single argument describing the reason - for the unload; see `when()`. If `object` does not have the expected - destructor method, then an exception is thrown when `ensure()` is called. - -@param object {object} - An object that defines a destructor method. -@param [name] {string} - Optional name of the destructor method. Default is `unload`. -</api> - -<api name="when"> -@function - Registers a function to be called when `send()` is called. - -@param callback {function} - A function that will be called when `send()` is called. It is called with a - single argument, one of the following strings describing the reason for - unload: `"uninstall"`, `"disable"`, `"shutdown"`, `"upgrade"`, or - `"downgrade"`. (On Gecko 1.9.2-based applications such as Firefox 3.6, - `"upgrade"` and `"downgrade"` are not available, and `"shutdown"` will be sent - in their place.) If a reason could not be determined, `undefined` will be - passed instead. Note that if an add-on is unloaded with reason `"disable"`, - it will not be notified about `"uninstall"` while it is disabled. A solution - to this issue is being investigated; see bug 571049. -</api> - -<api name="send"> -@function - Sends an "unload signal", thereby triggering all callbacks registered via - `when()`. In general, this function need not be manually called; it is - automatically triggered by the embedder. - -@param [reason] {string} - An optional string describing the reason for unload; see `unload.when()`. -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/url.md b/tools/addon-sdk-1.5/packages/api-utils/docs/url.md deleted file mode 100644 index 2974797..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/url.md +++ /dev/null @@ -1,85 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Atul Varma [atul@mozilla.com] --> -<!-- edited by Noelle Murata [fiveinchpixie@gmail.com] --> - - -The `url` module provides functionality for the parsing and retrieving of URLs. - -<api name="URL"> -@class -<api name="URL"> -@constructor - The URL constructor creates an object that represents a URL, verifying that - the provided string is a valid URL in the process. Any API in the SDK which - has a URL parameter will accept `URL` objects, not raw strings, unless - otherwise noted. - -@param source {string} - A string to be converted into a URL. If `source` is not a valid URI, this - constructor will throw an exception. - -@param [base] {string} - An optional string used to resolve relative `source` URLs into absolute ones. -</api> - -<api name="scheme"> -@property {string} - The name of the protocol in the URL. -</api> - -<api name="userPass"> -@property {string} - The username:password part of the URL, `null` if not present. -</api> - -<api name="host"> -@property {string} - The host of the URL, `null` if not present. -</api> - -<api name="port"> -@property {integer} - The port number of the URL, `null` if none was specified. -</api> - -<api name="path"> -@property {string} - The path component of the URL. -</api> - -<api name="toString"> -@method - Returns a string representation of the URL. -@returns {string} - The URL as a string. -</api> -</api> - -<api name="toFilename"> -@function - Attempts to convert the given URL to a native file path. This function will - automatically attempt to resolve non-file protocols, such as the `resource:` - protocol, to their place on the file system. An exception is raised if the URL - can't be converted; otherwise, the native file path is returned as a string. - -@param url {string} - The URL, as a string, to be converted. - -@returns {string} - The converted native file path as a string. -</api> - -<api name="fromFilename"> -@function - Converts the given native file path to a `file:` URL. - -@param path {string} - The native file path, as a string, to be converted. - -@returns {string} - The converted URL as a string. -</api> - diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/window-utils.md b/tools/addon-sdk-1.5/packages/api-utils/docs/window-utils.md deleted file mode 100644 index 1435fd2..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/window-utils.md +++ /dev/null @@ -1,88 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Drew Willcoxon [adw@mozilla.com] --> -<!-- edited by Erik Vold [erikvvold@gmail.com] --> - -The `window-utils` module provides helpers for accessing and tracking -application windows. These windows implement the [`nsIDOMWindow`][nsIDOMWindow] -interface. - -[nsIDOMWindow]: http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/base/nsIDOMWindow.idl - -<api name="WindowTracker"> -@class -`WindowTracker` objects make it easy to "monkeypatch" windows when a program is -loaded and "un-monkeypatch" those windows when the program is unloaded. For -example, if a Firefox add-on needs to add a status bar icon to all browser -windows, it can use a single `WindowTracker` object to gain access to windows -when they are opened and closed and also when the add-on is loaded and unloaded. - -When a window is opened or closed, a `WindowTracker` notifies its delegate -object, which is passed to the constructor. The delegate is also notified of -all windows that are open at the time that the `WindowTracker` is created and -all windows that are open at the time that the `WindowTracker` is unloaded. The -caller can therefore use the same code to act on all windows, regardless of -whether they are currently open or are opened in the future, or whether they are -closed while the parent program is loaded or remain open when the program is -unloaded. - -When a window is opened or when a window is open at the time that the -`WindowTracker` is created, the delegate's `onTrack()` method is called and -passed the window. - -When a window is closed or when a window is open at the time that the -`WindowTracker` is unloaded, the delegate's `onUntrack()` method is called and -passed the window. (The `WindowTracker` is unloaded when its its `unload()` -method is called, or when its parent program is unloaded, disabled, or -uninstalled, whichever comes first.) - -**Example** - - var delegate = { - onTrack: function (window) { - console.log("Tracking a window: " + window.location); - // Modify the window! - }, - onUntrack: function (window) { - console.log("Untracking a window: " + window.location); - // Undo your modifications! - } - }; - var winUtils = require("window-utils"); - var tracker = new winUtils.WindowTracker(delegate); - -<api name="WindowTracker"> -@constructor - A `WindowTracker` object listens for openings and closings of application - windows. -@param delegate {object} - An object that implements `onTrack()` and `onUntrack()` methods. -@prop onTrack {function} - A function to be called when a window is open or loads, with the window as the - first and only argument. -@prop [onUntrack] {function} - A function to be called when a window unloads, with the window as the first - and only argument. -</api> -</api> - -<api name="windowIterator"> -@function - An iterator for windows currently open in the application. - -**Example** - - var winUtils = require("window-utils"); - for (window in winUtils.windowIterator()) - console.log("An open window! " + window.location); - -</api> - -<api name="closeOnUnload"> -@function - Marks an application window to be closed when the program is unloaded. -@param window {window} - The window to close. -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/xhr.md b/tools/addon-sdk-1.5/packages/api-utils/docs/xhr.md deleted file mode 100644 index d0381c0..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/xhr.md +++ /dev/null @@ -1,95 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Atul Varma [atul@mozilla.com] --> -<!-- edited by Noelle Murata [fiveinchpixie@gmail.com] --> - -The `xhr` module provides access to `XMLHttpRequest` functionality, also known -as AJAX. - -## Limitations ## - -The `XMLHttpRequest` object is currently fairly limited, and does not -yet implement the `addEventListener()` or `removeEventListener()` -methods. It also doesn't yet implement the `upload` property. - -Furthermore, the `XMLHttpRequest` object does not currently support -the `mozBackgroundRequest` property. All security UI, such as -username/password prompts, are automatically suppressed, so if -required authentication information isn't passed to the `open()` -method, the request will fail. - -## Resource Use ## - -Whenever this module is unloaded, all in-progress requests are immediately -aborted. - -## Security Concerns ## - -By default, the `XMLHttpRequest` object grants full access to any -protocol scheme, which means that it can be used to read from (but not -write to) the host system's entire filesystem. It also has unfettered -access to any local area networks, VPNs, and the internet. - -### Threat Model ### - -The `XMLHttpRequest` object can be used by an add-on to "phone -home" and transmit potentially sensitive user data to third -parties. - -If access to the filesystem isn't prevented, it could easily be used -to access sensitive user data, though this may be inconsequential if -the client can't access the network. - -If access to local area networks isn't prevented, malicious code could access -sensitive data. - -If transmission of cookies isn't prevented, malicious code could access -sensitive data. - -Attenuating access based on a regular expression may be ineffective if -it's easy to write a regular expression that *looks* safe but contains -a special character or two that makes it far less secure than it seems -at first glance. - -### Possible Attenuations ### - -<span class="aside"> -We may also want to consider attenuating further based on domain name -and possibly even restricting the protocol to `https:` only, to reduce -risk. -</span> - -Before being exposed to unprivileged code, this object needs -to be attenuated in such a way that, at the very least, it can't -access the user's filesystem. This can probably be done most securely -by white-listing the protocols that can be used in the URL passed to -the `open()` method, and limiting them to `http:`, `https:`, and -possibly a special scheme that can be used to access the add-on's -packaged, read-only resources. - -Finally, we need to also consider attenuating http/https requests such -that they're "sandboxed" and don't communicate potentially sensitive -cookie information. - -<api name="XMLHttpRequest"> -@class - -<api name="XMLHttpRequest"> -@constructor - Creates an `XMLHttpRequest`. This is a constructor, so its use should always - be preceded by the `new` operator. For more information about - `XMLHttpRequest` objects, see the MDC page on - [Using XMLHttpRequest](https://developer.mozilla.org/En/Using_XMLHttpRequest) - and the Limitations section in this page. -</api> -</api> - -<api name="getRequestCount"> -@function - Returns the number of `XMLHttpRequest` objects that are alive (i.e., currently - active or about to be). -@returns {integer} - The number of live `XMLHttpRequest` objects. -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/xpcom.md b/tools/addon-sdk-1.5/packages/api-utils/docs/xpcom.md deleted file mode 100644 index e62aaa7..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/xpcom.md +++ /dev/null @@ -1,227 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -Using this module you can: - -* register a component with -[XPCOM](https://developer.mozilla.org/en/Creating_XPCOM_Components), -making it available to all XPCOM clients -* retrieve a factory for a given XPCOM component -* generate a UUID - -The module also exposes the -[XPCOMUtils](https://developer.mozilla.org/en/JavaScript_code_modules/XPCOMUtils.jsm) -module. - -<api name="register"> -@function - -Makes a component available through XPCOM. - -This function creates and registers a factory for a component given a -constructor for it and some metadata: a -[class ID](https://developer.mozilla.org/en/Creating_XPCOM_Components/An_Overview_of_XPCOM#CID), a [contract ID](https://developer.mozilla.org/en/Creating_XPCOM_Components/An_Overview_of_XPCOM#Contract_ID), -and a name. - -<span class="aside">In this example the HelloWorld component is available to JavaScript only, so we use the technique documented under the "Using wrappedJSObject" section of [How to Build an XPCOM Component in JavaScript](https://developer.mozilla.org/en/How_to_Build_an_XPCOM_Component_in_Javascript).</span> - - var xpcom = require("xpcom"); - - function HelloWorld() { - this.wrappedJSObject = this; - } - - HelloWorld.prototype = { - QueryInterface: xpcom.utils.generateQI(), - hello: function() { - return "Hello World!"; - } - }; - - xpcom.register({name: "Hello World Component", - contractID: "@me.org/myComponent", - create: HelloWorld}); - -XPCOM clients can subsequently access this factory and use it to create -instances of the component. - - var {Ci} = require("chrome"); - - var factory = xpcom.getClass("@me.org/myComponent", Ci.nsIFactory); - var helloWorld = factory.createInstance(null, Ci.nsISupports).wrappedJSObject; - console.log(helloWorld.hello()); - -`register()` returns a Factory object for the component which implements -the `createInstance()` and `QueryInterface()` functions of the -[`nsIFactory`](https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIFactory) and -[`nsISupports`](https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsISupports) -interfaces, as well as defining an `unregister()` function to remove the -component from XPCOM. - -When the module is unloaded, all components registered via the `register()` -function are automatically unregistered. - -@param options {object} - -@prop [uuid] {nsIDPtr} -A [UUID](https://developer.mozilla.org/en/Generating_GUIDs) which will be -used as the -[class ID](https://developer.mozilla.org/en/Creating_XPCOM_Components/An_Overview_of_XPCOM#CID) -for this component. If you don't include this option, the `register()` -function will generate a new UUID. - -@prop create {function} -The constructor for the component. - -@prop name {string} -A human-readable name for the component. - -@prop contractID {string} -A human-readable string which will be used as the -[contract ID](https://developer.mozilla.org/en/Creating_XPCOM_Components/An_Overview_of_XPCOM#Contract_ID) -for the component. An XPCOM client will be able to use this value to access -the component. - -@returns {Factory} -See the documentation for the `Factory` class in this page. -</api> - -<api name="getClass"> -@function -Returns the factory object for the class specified by `contractID`. - -For example, given a registered XPCOM component which is identified with -the contract ID "@me.org/myComponent", we can access a factory and then -use it to instantiate the component in the following way: - - var xpcom = require("xpcom"); - var {Ci} = require("chrome"); - - var factory = xpcom.getClass("@me.org/myComponent", Ci.nsIFactory); - var helloWorld = factory.createInstance(null, Ci.nsISupports).wrappedJSObject; - console.log(helloWorld.hello()); - -@param contractID {string} -The -[contract ID](https://developer.mozilla.org/en/Creating_XPCOM_Components/An_Overview_of_XPCOM#Contract_ID) -for the component whose factory will be returned. - -@param [iid] {iid} -The interface type to be returned. These objects are usually accessed through -the `Components.interfaces`, or `Ci`, object. - -The methods of this interface will be callable on the returned factory object. -Usually you want this to be -[`Ci.nsIFactory`](https://developer.mozilla.org/En/nsIFactory), but if you know -a component has a factory that implements a more specific type of factory -interface, you can pass that interface here. If you don't include this option -only the methods of -[`nsISupports`](https://developer.mozilla.org/En/NsISupports) -will be callable, which is probably not what you want. - -@returns {object} -The factory object. The type of this object will depend on the value of the -`iid` argument. If no `iid` argument is specified it will be of type -[`nsISupports`](https://developer.mozilla.org/En/NsISupports). - -Note that this object is not a `Factory` object as defined by this module. -If you previously registered the component by calling the `register()` -function and you need to access the `Factory` object for the component, for -example to call the `Factory`'s `unregister()` method, you can do so by -getting the -[`wrappedJSObject`](https://developer.mozilla.org/en/wrappedJSObject) -property of the returned object: - - var factory = xpcom.getClass("@me.org/myComp", Ci.nsIFactory).wrappedJSObject; - factory.unregister(); - -</api> - -<api name="utils"> -@property {object} -The -[XPCOMUtils](https://developer.mozilla.org/en/JavaScript_code_modules/XPCOMUtils.jsm) -module. -</api> - -<api name="makeUuid"> -@function -Generates and returns a new -[UUID](https://developer.mozilla.org/en/Generating_GUIDs). - -Calling `toString()` on this object will yield the UUID in string form. -@returns {nsIDPtr} -</api> - -<api name="Factory"> -@class - -When a component is made available through XPCOM using the `register()` -function, `register()` returns a `Factory` object that can be used to -instantiate the component using its `createInstance()` function: - - var factory = require("xpcom").register({ - name: "My Component", - contractID: "@me.org/myComponent", - create: MyComponent - }); - - var {Ci} = require("chrome"); - var component = factory.createInstance(null, Ci.nsISupports).wrappedJSObject; - -In this example we haven't defined a custom interface ID for the component. -Instead we pass `Ci.nsISupports` as the interface ID, and use `wrappedJSObject` -to retrieve the component. For more details on this technique see the -[guide to building XPCOM components in JavaScript](https://developer.mozilla.org/en/How_to_Build_an_XPCOM_Component_in_Javascript). - -`Factory` also implements its own `unregister()` function, -which unregisters the component from XPCOM. - -<api name="createInstance"> -@method -Creates an instance of the component associated with this factory. - -@param outer {nsISupports} -This argument must be `null`, or the function throws -`Cr.NS_ERROR_NO_AGGREGATION`. - -@param iid {iid} -Interface identifier. These objects are usually accessed through -the `Components.interfaces`, or `Ci`, object. The methods of this -interface will be callable on the returned object. - -If the object implements an interface that's already defined in XPCOM, you -can pass that in here: - - var about = aboutFactory.createInstance(null, Ci.nsIAboutModule); - // You can now access the nsIAboutModule interface of the 'about' object - -If you will be getting the `wrappedJSObject` property from the returned -object to access its JavaScript implementation, pass `Ci.nsISupports` here: - - var custom = factory.createInstance(null, Ci.nsISupports).wrappedJSObject; - // You can now access the interface defined for the 'custom' object - -</api> - -<api name="QueryInterface"> -@method -This method is called automatically by XPCOM, so usually you don't need -to call it yourself. It returns the `Factory` object itself such that the -methods of the given interface are callable on it. - -@param interfaces {iid} -There are only two legal values for this parameter: `Ci.nsIFactory` and -`Ci.nsISupports`. Any other value will cause this method to throw -`Cr.NS_ERROR_NO_INTERFACE`. - -@returns {Factory} -</api> - -<api name="unregister"> -@method -Unregisters the factory's component. -</api> - -</api> diff --git a/tools/addon-sdk-1.5/packages/api-utils/docs/xul-app.md b/tools/addon-sdk-1.5/packages/api-utils/docs/xul-app.md deleted file mode 100644 index 597af56..0000000 --- a/tools/addon-sdk-1.5/packages/api-utils/docs/xul-app.md +++ /dev/null @@ -1,76 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!-- contributed by Drew Willcoxon [adw@mozilla.com] --> - -The `xul-app` module provides facilities for introspecting the application on -which your program is running. - -With the exception of `ids`, each of these properties exposes the attribute of -the same name on the [`nsIXULAppInfo`][nsIXULAppInfo] interface. For more -information, see the [MDC documentation][]. - -[nsIXULAppInfo]: http://mxr.mozilla.org/mozilla-central/source/xpcom/system/nsIXULAppInfo.idl -[MDC documentation]: https://developer.mozilla.org/en/nsIXULAppInfo - -<api name="ID"> -@property {string} - The GUID of the host application. For example, for Firefox this value is - `"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"`. -</api> - -<api name="name"> -@property {string} - The host application name. For example, `"Firefox"`. -</api> - -<api name="version"> -@property {string} - The host application version. -</api> - -<api name="platformVersion"> -@property {string} - The Gecko/XULRunner platform version. -</api> - -<api name="ids"> -@property {object} - A mapping of application names to their IDs. For example, - `ids["Firefox"] == "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"`. -</api> - -<api name="is"> -@function - Checks whether the host application is the given application. -@param name {string} - A host application name. -@returns {boolean} - True if the host application is `name` and false otherwise. -</api> - -<api name="isOneOf"> -@function - Checks whether the host application is one of the given applications. -@param names {array} - An array of host application names. -@returns {boolean} - True if the host application is one of the `names` and false otherwise. -</api> - -<api name="versionInRange"> -@function - Compares a given version to a version range. See the [MDC documentation](https://developer.mozilla.org/en/Toolkit_version_format#Comparing_versions) - for details on version comparisons. -@param version {string} - The version to compare. -@param lowInclusive {string} - The lower bound of the version range to compare. The range includes this - bound. -@param highExclusive {string} - The upper bound of the version range to compare. The range does not include - this bound. -@returns {boolean} - True if `version` falls in the given range and false otherwise. -</api> |