summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/test/addons/simple-prefs-regression
diff options
context:
space:
mode:
Diffstat (limited to 'addon-sdk/source/test/addons/simple-prefs-regression')
-rw-r--r--addon-sdk/source/test/addons/simple-prefs-regression/app-extension/application.ini11
-rw-r--r--addon-sdk/source/test/addons/simple-prefs-regression/app-extension/bootstrap.js339
-rw-r--r--addon-sdk/source/test/addons/simple-prefs-regression/app-extension/defaults/preferences/prefs.js7
-rw-r--r--addon-sdk/source/test/addons/simple-prefs-regression/app-extension/install.rdf34
-rw-r--r--addon-sdk/source/test/addons/simple-prefs-regression/app-extension/options.xul5
-rw-r--r--addon-sdk/source/test/addons/simple-prefs-regression/lib/main.js94
-rw-r--r--addon-sdk/source/test/addons/simple-prefs-regression/package.json24
7 files changed, 0 insertions, 514 deletions
diff --git a/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/application.ini b/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/application.ini
deleted file mode 100644
index 6cec69a16..000000000
--- a/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/application.ini
+++ /dev/null
@@ -1,11 +0,0 @@
-[App]
-Vendor=Varma
-Name=Test App
-Version=1.0
-BuildID=20060101
-Copyright=Copyright (c) 2009 Atul Varma
-ID=xulapp@toolness.com
-
-[Gecko]
-MinVersion=1.9.2.0
-MaxVersion=2.0.*
diff --git a/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/bootstrap.js b/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/bootstrap.js
deleted file mode 100644
index fbb9b5186..000000000
--- a/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/bootstrap.js
+++ /dev/null
@@ -1,339 +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/. */
-
-// @see http://dxr.mozilla.org/mozilla-central/source/js/src/xpconnect/loader/mozJSComponentLoader.cpp
-
-'use strict';
-
-// IMPORTANT: Avoid adding any initialization tasks here, if you need to do
-// something before add-on is loaded consider addon/runner module instead!
-
-const { classes: Cc, Constructor: CC, interfaces: Ci, utils: Cu,
- results: Cr, manager: Cm } = Components;
-const ioService = Cc['@mozilla.org/network/io-service;1'].
- getService(Ci.nsIIOService);
-const resourceHandler = ioService.getProtocolHandler('resource').
- QueryInterface(Ci.nsIResProtocolHandler);
-const systemPrincipal = CC('@mozilla.org/systemprincipal;1', 'nsIPrincipal')();
-const scriptLoader = Cc['@mozilla.org/moz/jssubscript-loader;1'].
- getService(Ci.mozIJSSubScriptLoader);
-const prefService = Cc['@mozilla.org/preferences-service;1'].
- getService(Ci.nsIPrefService).
- QueryInterface(Ci.nsIPrefBranch);
-const appInfo = Cc["@mozilla.org/xre/app-info;1"].
- getService(Ci.nsIXULAppInfo);
-const vc = Cc["@mozilla.org/xpcom/version-comparator;1"].
- getService(Ci.nsIVersionComparator);
-
-const { NetUtil } = Cu.import("resource://gre/modules/NetUtil.jsm");
-
-const REASON = [ 'unknown', 'startup', 'shutdown', 'enable', 'disable',
- 'install', 'uninstall', 'upgrade', 'downgrade' ];
-
-const bind = Function.call.bind(Function.bind);
-
-var loader = null;
-var unload = null;
-var cuddlefishSandbox = null;
-var nukeTimer = null;
-
-// Utility function that synchronously reads local resource from the given
-// `uri` and returns content string.
-function readURI(uri) {
- let channel = NetUtil.newChannel({
- uri: NetUtil.newURI(uri, "UTF-8"),
- loadUsingSystemPrincipal: true
- });
- let stream = channel.open2();
-
- let cstream = Cc['@mozilla.org/intl/converter-input-stream;1'].
- createInstance(Ci.nsIConverterInputStream);
- cstream.init(stream, 'UTF-8', 0, 0);
-
- let str = {};
- let data = '';
- let read = 0;
- do {
- read = cstream.readString(0xffffffff, str);
- data += str.value;
- } while (read != 0);
-
- cstream.close();
-
- return data;
-}
-
-// We don't do anything on install & uninstall yet, but in a future
-// we should allow add-ons to cleanup after uninstall.
-function install(data, reason) {}
-function uninstall(data, reason) {}
-
-function startup(data, reasonCode) {
- try {
- let reason = REASON[reasonCode];
- // URI for the root of the XPI file.
- // 'jar:' URI if the addon is packed, 'file:' URI otherwise.
- // (Used by l10n module in order to fetch `locale` folder)
- let rootURI = data.resourceURI.spec;
-
- // TODO: Maybe we should perform read harness-options.json asynchronously,
- // since we can't do anything until 'sessionstore-windows-restored' anyway.
- let options = JSON.parse(readURI(rootURI + './harness-options.json'));
-
- let id = options.jetpackID;
- let name = options.name;
-
- // Clean the metadata
- options.metadata[name]['permissions'] = options.metadata[name]['permissions'] || {};
-
- // freeze the permissionss
- Object.freeze(options.metadata[name]['permissions']);
- // freeze the metadata
- Object.freeze(options.metadata[name]);
-
- // Register a new resource 'domain' for this addon which is mapping to
- // XPI's `resources` folder.
- // Generate the domain name by using jetpack ID, which is the extension ID
- // by stripping common characters that doesn't work as a domain name:
- let uuidRe =
- /^\{([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\}$/;
-
- let domain = id.
- toLowerCase().
- replace(/@/g, '-at-').
- replace(/\./g, '-dot-').
- replace(uuidRe, '$1');
-
- let prefixURI = 'resource://' + domain + '/';
- let resourcesURI = ioService.newURI(rootURI + '/resources/', null, null);
- resourceHandler.setSubstitution(domain, resourcesURI);
-
- // Create path to URLs mapping supported by loader.
- let paths = {
- // Relative modules resolve to add-on package lib
- './': prefixURI + name + '/lib/',
- './tests/': prefixURI + name + '/tests/',
- '': 'resource://gre/modules/commonjs/'
- };
-
- // Maps addon lib and tests ressource folders for each package
- paths = Object.keys(options.metadata).reduce(function(result, name) {
- result[name + '/'] = prefixURI + name + '/lib/'
- result[name + '/tests/'] = prefixURI + name + '/tests/'
- return result;
- }, paths);
-
- // We need to map tests folder when we run sdk tests whose package name
- // is stripped
- if (name == 'addon-sdk')
- paths['tests/'] = prefixURI + name + '/tests/';
-
- let useBundledSDK = options['force-use-bundled-sdk'];
- if (!useBundledSDK) {
- try {
- useBundledSDK = prefService.getBoolPref("extensions.addon-sdk.useBundledSDK");
- }
- catch (e) {
- // Pref doesn't exist, allow using Firefox shipped SDK
- }
- }
-
- // Starting with Firefox 21.0a1, we start using modules shipped into firefox
- // Still allow using modules from the xpi if the manifest tell us to do so.
- // And only try to look for sdk modules in xpi if the xpi actually ship them
- if (options['is-sdk-bundled'] &&
- (vc.compare(appInfo.version, '21.0a1') < 0 || useBundledSDK)) {
- // Maps sdk module folders to their resource folder
- paths[''] = prefixURI + 'addon-sdk/lib/';
- // test.js is usually found in root commonjs or SDK_ROOT/lib/ folder,
- // so that it isn't shipped in the xpi. Keep a copy of it in sdk/ folder
- // until we no longer support SDK modules in XPI:
- paths['test'] = prefixURI + 'addon-sdk/lib/sdk/test.js';
- }
-
- // Retrieve list of module folder overloads based on preferences in order to
- // eventually used a local modules instead of files shipped into Firefox.
- let branch = prefService.getBranch('extensions.modules.' + id + '.path');
- paths = branch.getChildList('', {}).reduce(function (result, name) {
- // Allows overloading of any sub folder by replacing . by / in pref name
- let path = name.substr(1).split('.').join('/');
- // Only accept overloading folder by ensuring always ending with `/`
- if (path) path += '/';
- let fileURI = branch.getCharPref(name);
-
- // On mobile, file URI has to end with a `/` otherwise, setSubstitution
- // takes the parent folder instead.
- if (fileURI[fileURI.length-1] !== '/')
- fileURI += '/';
-
- // Maps the given file:// URI to a resource:// in order to avoid various
- // failure that happens with file:// URI and be close to production env
- let resourcesURI = ioService.newURI(fileURI, null, null);
- let resName = 'extensions.modules.' + domain + '.commonjs.path' + name;
- resourceHandler.setSubstitution(resName, resourcesURI);
-
- result[path] = 'resource://' + resName + '/';
- return result;
- }, paths);
-
- // Make version 2 of the manifest
- let manifest = options.manifest;
-
- // Import `cuddlefish.js` module using a Sandbox and bootstrap loader.
- let cuddlefishPath = 'loader/cuddlefish.js';
- let cuddlefishURI = 'resource://gre/modules/commonjs/sdk/' + cuddlefishPath;
- if (paths['sdk/']) { // sdk folder has been overloaded
- // (from pref, or cuddlefish is still in the xpi)
- cuddlefishURI = paths['sdk/'] + cuddlefishPath;
- }
- else if (paths['']) { // root modules folder has been overloaded
- cuddlefishURI = paths[''] + 'sdk/' + cuddlefishPath;
- }
-
- cuddlefishSandbox = loadSandbox(cuddlefishURI);
- let cuddlefish = cuddlefishSandbox.exports;
-
- // Normalize `options.mainPath` so that it looks like one that will come
- // in a new version of linker.
- let main = options.mainPath;
-
- unload = cuddlefish.unload;
- loader = cuddlefish.Loader({
- paths: paths,
- // modules manifest.
- manifest: manifest,
-
- // Add-on ID used by different APIs as a unique identifier.
- id: id,
- // Add-on name.
- name: name,
- // Add-on version.
- version: options.metadata[name].version,
- // Add-on package descriptor.
- metadata: options.metadata[name],
- // Add-on load reason.
- loadReason: reason,
-
- prefixURI: prefixURI,
- // Add-on URI.
- rootURI: rootURI,
- // options used by system module.
- // File to write 'OK' or 'FAIL' (exit code emulation).
- resultFile: options.resultFile,
- // Arguments passed as --static-args
- staticArgs: options.staticArgs,
-
- // Arguments related to test runner.
- modules: {
- '@test/options': {
- allTestModules: options.allTestModules,
- iterations: options.iterations,
- filter: options.filter,
- profileMemory: options.profileMemory,
- stopOnError: options.stopOnError,
- verbose: options.verbose,
- parseable: options.parseable,
- checkMemory: options.check_memory,
- }
- }
- });
-
- let module = cuddlefish.Module('sdk/loader/cuddlefish', cuddlefishURI);
- let require = cuddlefish.Require(loader, module);
-
- require('sdk/addon/runner').startup(reason, {
- loader: loader,
- main: main,
- prefsURI: rootURI + 'defaults/preferences/prefs.js'
- });
- } catch (error) {
- dump('Bootstrap error: ' +
- (error.message ? error.message : String(error)) + '\n' +
- (error.stack || error.fileName + ': ' + error.lineNumber) + '\n');
- throw error;
- }
-};
-
-function loadSandbox(uri) {
- let proto = {
- sandboxPrototype: {
- loadSandbox: loadSandbox,
- ChromeWorker: ChromeWorker
- }
- };
- let sandbox = Cu.Sandbox(systemPrincipal, proto);
- // Create a fake commonjs environnement just to enable loading loader.js
- // correctly
- sandbox.exports = {};
- sandbox.module = { uri: uri, exports: sandbox.exports };
- sandbox.require = function (id) {
- if (id !== "chrome")
- throw new Error("Bootstrap sandbox `require` method isn't implemented.");
-
- return Object.freeze({ Cc: Cc, Ci: Ci, Cu: Cu, Cr: Cr, Cm: Cm,
- CC: bind(CC, Components), components: Components,
- ChromeWorker: ChromeWorker });
- };
- scriptLoader.loadSubScript(uri, sandbox, 'UTF-8');
- return sandbox;
-}
-
-function unloadSandbox(sandbox) {
- if (Cu.getClassName(sandbox, true) == "Sandbox")
- Cu.nukeSandbox(sandbox);
-}
-
-function setTimeout(callback, delay) {
- let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
- timer.initWithCallback({ notify: callback }, delay,
- Ci.nsITimer.TYPE_ONE_SHOT);
- return timer;
-}
-
-function shutdown(data, reasonCode) {
- let reason = REASON[reasonCode];
- if (loader) {
- unload(loader, reason);
- unload = null;
-
- // Don't waste time cleaning up if the application is shutting down
- if (reason != "shutdown") {
- // Avoid leaking all modules when something goes wrong with one particular
- // module. Do not clean it up immediatly in order to allow executing some
- // actions on addon disabling.
- // We need to keep a reference to the timer, otherwise it is collected
- // and won't ever fire.
- nukeTimer = setTimeout(nukeModules, 1000);
- }
- }
-};
-
-function nukeModules() {
- nukeTimer = null;
- // module objects store `exports` which comes from sandboxes
- // We should avoid keeping link to these object to avoid leaking sandboxes
- for (let key in loader.modules) {
- delete loader.modules[key];
- }
- // Direct links to sandboxes should be removed too
- for (let key in loader.sandboxes) {
- let sandbox = loader.sandboxes[key];
- delete loader.sandboxes[key];
- // Bug 775067: From FF17 we can kill all CCW from a given sandbox
- unloadSandbox(sandbox);
- }
- loader = null;
-
- // both `toolkit/loader` and `system/xul-app` are loaded as JSM's via
- // `cuddlefish.js`, and needs to be unloaded to avoid memory leaks, when
- // the addon is unload.
-
- unloadSandbox(cuddlefishSandbox.loaderSandbox);
- unloadSandbox(cuddlefishSandbox.xulappSandbox);
-
- // Bug 764840: We need to unload cuddlefish otherwise it will stay alive
- // and keep a reference to this compartment.
- unloadSandbox(cuddlefishSandbox);
- cuddlefishSandbox = null;
-}
diff --git a/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/defaults/preferences/prefs.js b/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/defaults/preferences/prefs.js
deleted file mode 100644
index 86f724a53..000000000
--- a/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/defaults/preferences/prefs.js
+++ /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/. */
-
-pref("extensions.test-simple-prefs@jetpack.somePreference", "TEST");
-pref("extensions.test-simple-prefs@jetpack.myInteger", 8);
-pref("extensions.test-simple-prefs@jetpack.myHiddenInt", 5);
diff --git a/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/install.rdf b/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/install.rdf
deleted file mode 100644
index 5e3aae0d7..000000000
--- a/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/install.rdf
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.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/. -->
-
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:em="http://www.mozilla.org/2004/em-rdf#">
- <Description about="urn:mozilla:install-manifest">
- <em:id>xulapp@toolness.com</em:id>
- <em:version>1.0</em:version>
- <em:type>2</em:type>
- <em:bootstrap>true</em:bootstrap>
- <em:unpack>false</em:unpack>
-
- <!-- Firefox -->
- <em:targetApplication>
- <Description>
- <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
- <em:minVersion>21.0</em:minVersion>
- <em:maxVersion>25.0a1</em:maxVersion>
- </Description>
- </em:targetApplication>
-
- <!-- Front End MetaData -->
- <em:name>Test App</em:name>
- <em:description>Harness for tests.</em:description>
- <em:creator>Mozilla Corporation</em:creator>
- <em:homepageURL></em:homepageURL>
- <em:optionsType></em:optionsType>
- <em:optionsURL></em:optionsURL>
- <em:updateURL></em:updateURL>
- </Description>
-</RDF>
diff --git a/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/options.xul b/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/options.xul
deleted file mode 100644
index 89b95e8d7..000000000
--- a/addon-sdk/source/test/addons/simple-prefs-regression/app-extension/options.xul
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" ?>
-<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
- <setting data-jetpack-id="test-simple-prefs@jetpack" pref="extensions.test-simple-prefs@jetpack.somePreference" pref-name="somePreference" title="some-title" type="string">Some short description for the preference</setting>
- <setting data-jetpack-id="test-simple-prefs@jetpack" pref="extensions.test-simple-prefs@jetpack.myInteger" pref-name="myInteger" title="my-int" type="integer">How many of them we have.</setting>
-</vbox>
diff --git a/addon-sdk/source/test/addons/simple-prefs-regression/lib/main.js b/addon-sdk/source/test/addons/simple-prefs-regression/lib/main.js
deleted file mode 100644
index 757759dcb..000000000
--- a/addon-sdk/source/test/addons/simple-prefs-regression/lib/main.js
+++ /dev/null
@@ -1,94 +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/. */
-'use strict';
-
-const { Cu } = require('chrome');
-const sp = require('sdk/simple-prefs');
-const app = require('sdk/system/xul-app');
-const tabs = require('sdk/tabs');
-const { preferencesBranch, id } = require('sdk/self');
-const { getAddonByID } = require('sdk/addon/manager');
-const { AddonManager } = Cu.import('resource://gre/modules/AddonManager.jsm', {});
-
-exports.testRegression = (assert) => {
- assert.equal(preferencesBranch, id, 'preferencesBranch returns id here');
-}
-
-exports.testDefaultValues = (assert) => {
- assert.equal(sp.prefs.myHiddenInt, 5, 'myHiddenInt default is 5');
- assert.equal(sp.prefs.myInteger, 8, 'myInteger default is 8');
- assert.equal(sp.prefs.somePreference, 'TEST', 'somePreference default is correct');
-}
-
-exports.testOptionsType = function*(assert) {
- let addon = yield getAddonByID(id);
- assert.equal(addon.optionsType, AddonManager.OPTIONS_TYPE_INLINE, 'options type is inline');
-}
-
-if (app.is('Firefox')) {
- exports.testAOM = function(assert, done) {
- tabs.open({
- url: 'about:addons',
- onReady: function(tab) {
- tab.attach({
- contentScriptWhen: 'end',
- contentScript: 'function onLoad() {\n' +
- 'unsafeWindow.removeEventListener("load", onLoad, false);\n' +
- 'AddonManager.getAddonByID("' + id + '", function(aAddon) {\n' +
- 'unsafeWindow.gViewController.viewObjects.detail.node.addEventListener("ViewChanged", function whenViewChanges() {\n' +
- 'unsafeWindow.gViewController.viewObjects.detail.node.removeEventListener("ViewChanged", whenViewChanges, false);\n' +
- 'setTimeout(function() {\n' + // TODO: figure out why this is necessary..
- 'self.postMessage({\n' +
- 'somePreference: getAttributes(unsafeWindow.document.querySelector("setting[title=\'some-title\']")),\n' +
- 'myInteger: getAttributes(unsafeWindow.document.querySelector("setting[title=\'my-int\']")),\n' +
- 'myHiddenInt: getAttributes(unsafeWindow.document.querySelector("setting[title=\'hidden-int\']"))\n' +
- '});\n' +
- '}, 250);\n' +
- '}, false);\n' +
- 'unsafeWindow.gViewController.commands.cmd_showItemDetails.doCommand(aAddon, true);\n' +
- '});\n' +
- 'function getAttributes(ele) {\n' +
- 'if (!ele) return {};\n' +
- 'return {\n' +
- 'pref: ele.getAttribute("pref"),\n' +
- 'type: ele.getAttribute("type"),\n' +
- 'title: ele.getAttribute("title"),\n' +
- 'desc: ele.getAttribute("desc")\n' +
- '}\n' +
- '}\n' +
- '}\n' +
- // Wait for the load event ?
- 'if (document.readyState == "complete") {\n' +
- 'onLoad()\n' +
- '} else {\n' +
- 'unsafeWindow.addEventListener("load", onLoad, false);\n' +
- '}\n',
- onMessage: function(msg) {
- // test somePreference
- assert.equal(msg.somePreference.type, 'string', 'some pref is a string');
- assert.equal(msg.somePreference.pref, 'extensions.'+preferencesBranch+'.somePreference', 'somePreference path is correct');
- assert.equal(msg.somePreference.title, 'some-title', 'somePreference title is correct');
- assert.equal(msg.somePreference.desc, 'Some short description for the preference', 'somePreference description is correct');
-
- // test myInteger
- assert.equal(msg.myInteger.type, 'integer', 'myInteger is a int');
- assert.equal(msg.myInteger.pref, 'extensions.'+preferencesBranch+'.myInteger', 'extensions.test-simple-prefs.myInteger');
- assert.equal(msg.myInteger.title, 'my-int', 'myInteger title is correct');
- assert.equal(msg.myInteger.desc, 'How many of them we have.', 'myInteger desc is correct');
-
- // test myHiddenInt
- assert.equal(msg.myHiddenInt.type, undefined, 'myHiddenInt was not displayed');
- assert.equal(msg.myHiddenInt.pref, undefined, 'myHiddenInt was not displayed');
- assert.equal(msg.myHiddenInt.title, undefined, 'myHiddenInt was not displayed');
- assert.equal(msg.myHiddenInt.desc, undefined, 'myHiddenInt was not displayed');
-
- tab.close(done);
- }
- });
- }
- });
- }
-}
-
-require('sdk/test/runner').runTestsFromModule(module);
diff --git a/addon-sdk/source/test/addons/simple-prefs-regression/package.json b/addon-sdk/source/test/addons/simple-prefs-regression/package.json
deleted file mode 100644
index 1de5e8ac2..000000000
--- a/addon-sdk/source/test/addons/simple-prefs-regression/package.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "id": "test-simple-prefs",
- "preferences": [{
- "name": "somePreference",
- "title": "some-title",
- "description": "Some short description for the preference",
- "type": "string",
- "value": "TEST"
- },
- {
- "description": "How many of them we have.",
- "name": "myInteger",
- "type": "integer",
- "value": 8,
- "title": "my-int"
- }, {
- "name": "myHiddenInt",
- "type": "integer",
- "hidden": true,
- "value": 5,
- "title": "hidden-int"
- }],
- "preferences-branch": "simple-prefs-regression"
-}