Bug 1314861: Lazily load most SDK module imports. r=rpl

MozReview-Commit-ID: 3mneEkzljiU

--HG--
extra : rebase_source : 72e988994ec70c643d869949967bdec3202d92c9
This commit is contained in:
Kris Maglione 2017-04-07 18:11:32 -07:00
Родитель b9b75a06d8
Коммит 56000a9cb0
53 изменённых файлов: 282 добавлений и 296 удалений

3
addon-sdk/source/lib/sdk/addon/bootstrap.js поставляемый
Просмотреть файл

@ -135,7 +135,8 @@ Bootstrap.prototype = {
const prefsURI = `${baseURI}defaults/preferences/prefs.js`;
// Init the 'sdk/webextension' module from the bootstrap addon parameter.
require("sdk/webextension").initFromBootstrapAddonParam(addon);
if (addon.webExtension)
require("sdk/webextension").initFromBootstrapAddonParam(addon);
const { startup } = require("sdk/addon/runner");
startup(reason, {loader, main, prefsURI});

Просмотреть файл

@ -10,14 +10,10 @@ const { Cc, Ci, Cu } = require('chrome');
const { rootURI, metadata, isNative } = require('@loader/options');
const { id, loadReason } = require('../self');
const { descriptor, Sandbox, evaluate, main, resolveURI } = require('toolkit/loader');
const { once } = require('../system/events');
const { exit, env, staticArgs } = require('../system');
const { when: unload } = require('../system/unload');
const globals = require('../system/globals');
const xulApp = require('../system/xul-app');
const { get } = require('../preferences/service');
const appShellService = Cc['@mozilla.org/appshell/appShellService;1'].
getService(Ci.nsIAppShellService);
const { preferences } = metadata;
const Startup = Cu.import("resource://gre/modules/sdk/system/Startup.js", {}).exports;

Просмотреть файл

@ -9,7 +9,7 @@ module.metadata = {
const { Ci, components } = require("chrome");
const { parseStack, sourceURI } = require("toolkit/loader");
const { readURISync } = require("../net/url");
lazyRequire(this, "../net/url", "readURISync");
function safeGetFileLine(path, line) {
try {

Просмотреть файл

@ -9,7 +9,7 @@ module.metadata = {
};
const { Ci } = require("chrome");
const { open } = require("../event/dom");
lazyRequire(this, "../event/dom", "open");
const { observe } = require("../event/chrome");
const { filter, merge, map, expand } = require("../event/utils");
const { windows } = require("../window/utils");

Просмотреть файл

@ -7,26 +7,20 @@ module.metadata = {
"stability": "stable"
};
const { getAttachEventType } = require('../content/utils');
lazyRequire(this, '../content/utils', 'getAttachEventType');
const { Class } = require('../core/heritage');
const { Disposable } = require('../core/disposable');
const { WeakReference } = require('../core/reference');
const { WorkerChild } = require('./worker-child');
lazyRequire(this, './worker-child', 'WorkerChild');
const { EventTarget } = require('../event/target');
const { on, emit, once, setListeners } = require('../event/core');
const { on: domOn, removeListener: domOff } = require('../dom/events');
const { isRegExp, isUndefined } = require('../lang/type');
const { merge } = require('../util/object');
const { isBrowser, getFrames } = require('../window/utils');
const { getTabs, getURI: getTabURI } = require('../tabs/utils');
const { ignoreWindow } = require('../private-browsing/utils');
const { Style } = require("../stylesheet/style");
const { attach, detach } = require("../content/mod");
const { has, hasAny } = require("../util/array");
const { Rules } = require("../util/rules");
const { List, addListItem, removeListItem } = require('../util/list');
const { when } = require("../system/unload");
const { uuid } = require('../util/uuid');
lazyRequire(this, '../dom/events',{'on': 'domOn', 'removeListener': 'domOff'});
lazyRequire(this, '../util/object', "merge");
lazyRequire(this, '../window/utils', "getFrames");
lazyRequire(this, '../private-browsing/utils', "ignoreWindow");
lazyRequire(this, '../stylesheet/style', 'Style');
lazyRequire(this, '../content/mod', 'attach', 'detach');
lazyRequire(this, '../util/rules', 'Rules');
lazyRequire(this, '../util/uuid', 'uuid');
const { frames, process } = require('../remote/child');
const pagemods = new Map();
@ -79,7 +73,7 @@ const ChildPageMod = Class({
// `applyOnExistingDocuments` has to be called after `pagemods.add()`
// otherwise its calls to `onContent` method won't do anything.
if (has(this.attachTo, 'existing'))
if (this.attachTo.includes('existing'))
applyOnExistingDocuments(this);
},
@ -132,9 +126,9 @@ function applyOnExistingDocuments (mod) {
if (!window || !window.frames)
return;
let uri = window.location.href;
if (has(mod.attachTo, "top") && modMatchesURI(mod, uri))
if (mod.attachTo.includes("top") && modMatchesURI(mod, uri))
onContent(mod, window);
if (has(mod.attachTo, "frame"))
if (mod.attachTo.includes("frame"))
getFrames(window).
filter(iframe => modMatchesURI(mod, iframe.location.href)).
forEach(frame => onContent(mod, frame));
@ -167,10 +161,10 @@ function createWorker(mod, window) {
function onContent (mod, window) {
let isTopDocument = window.top === window;
// Is a top level document and `top` is not set, ignore
if (isTopDocument && !has(mod.attachTo, "top"))
if (isTopDocument && !mod.attachTo.includes("top"))
return;
// Is a frame document and `frame` is not set, ignore
if (!isTopDocument && !has(mod.attachTo, "frame"))
if (!isTopDocument && !mod.attachTo.includes("frame"))
return;
// ensure we attach only once per document

Просмотреть файл

@ -6,19 +6,21 @@
const { frames } = require("../remote/child");
const { Class } = require("../core/heritage");
const { Disposable } = require('../core/disposable');
const { data } = require("../self");
const { once } = require("../dom/events");
const { getAttachEventType } = require("./utils");
const { Rules } = require('../util/rules');
const { uuid } = require('../util/uuid');
const { WorkerChild } = require("./worker-child");
lazyRequire(this, "../self", "data");
lazyRequire(this, "../dom/events", "once");
lazyRequire(this, "./utils", "getAttachEventType");
lazyRequire(this, '../util/rules', "Rules");
lazyRequire(this, '../util/uuid', "uuid");
lazyRequire(this, "./worker-child", "WorkerChild");
const { Cc, Ci, Cu } = require("chrome");
const { on: onSystemEvent } = require("../system/events");
const appShell = Cc["@mozilla.org/appshell/appShellService;1"].getService(Ci.nsIAppShellService);
const { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyServiceGetter(this, 'appShell',
"@mozilla.org/appshell/appShellService;1",
"nsIAppShellService");
const pages = new Map();
const DOC_INSERTED = "document-element-inserted";

Просмотреть файл

@ -9,19 +9,22 @@ module.metadata = {
const { Class } = require('../core/heritage');
const { EventTarget } = require('../event/target');
const { on, off, emit } = require('../event/core');
const { events } = require('./sandbox/events');
const { requiresAddonGlobal } = require('./utils');
const { delay: async } = require('../lang/functional');
lazyRequire(this, '../event/core', "on", "off", "emit");
lazyRequire(this, './sandbox/events', "events");
lazyRequire(this, './utils', "requiresAddonGlobal");
lazyRequire(this, '../lang/functional', {"delay": "async"});
const { Ci, Cu, Cc } = require('chrome');
const timer = require('../timers');
const { URL } = require('../url');
const { sandbox, evaluate, load } = require('../loader/sandbox');
const { merge } = require('../util/object');
const { getTabForContentWindowNoShim } = require('../tabs/utils');
const { getInnerId } = require('../window/utils');
const { PlainTextConsole } = require('../console/plain-text');
const { data } = require('../self');const { isChildLoader } = require('../remote/core');
lazyRequireModule(this, "../timers", "timer");
lazyRequire(this, '../url', "URL");
lazyRequire(this, '../loader/sandbox', "sandbox", "evaluate", "load");
lazyRequire(this, '../util/object', "merge");
lazyRequire(this, '../tabs/utils', "getTabForContentWindowNoShim");
lazyRequire(this, '../window/utils', "getInnerId");
lazyRequire(this, '../console/plain-text', "PlainTextConsole");
lazyRequire(this, '../self', "data");
lazyRequire(this, '../remote/core', "isChildLoader");
// WeakMap of sandboxes so we can access private values
const sandboxes = new WeakMap();

Просмотреть файл

@ -7,12 +7,12 @@ module.metadata = {
'stability': 'unstable'
};
var { merge } = require('../util/object');
var { data } = require('../self');
lazyRequire(this, '../util/object', "merge");
lazyRequire(this, '../self', "data");
var assetsURI = data.url();
var isArray = Array.isArray;
var method = require('../../method/core');
var { uuid } = require('../util/uuid');
lazyRequire(this, '../util/uuid', "uuid");
const isAddonContent = ({ contentURL }) =>
contentURL && data.url(contentURL).startsWith(assetsURI);

Просмотреть файл

@ -3,15 +3,15 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const { merge } = require('../util/object');
lazyRequire(this, '../util/object', 'merge');
const { Class } = require('../core/heritage');
const { emit } = require('../event/core');
lazyRequire(this, '../event/core', 'emit');
const { EventTarget } = require('../event/target');
const { getInnerId, getByInnerId } = require('../window/utils');
const { instanceOf, isObject } = require('../lang/type');
const system = require('../system/events');
lazyRequire(this, '../window/utils', 'getInnerId');
lazyRequire(this, '../lang/type', 'instanceOf', 'isObject');
lazyRequireModule(this, '../system/events', 'system');
const { when } = require('../system/unload');
const { WorkerSandbox } = require('./sandbox');
lazyRequire(this, './sandbox', 'WorkerSandbox');
const { Ci } = require('chrome');
const { process, frames } = require('../remote/child');

Просмотреть файл

@ -7,19 +7,19 @@ module.metadata = {
"stability": "unstable"
};
const { emit } = require('../event/core');
lazyRequire(this, '../event/core', "emit");
const { omit, merge } = require('../util/object');
const { Class } = require('../core/heritage');
const { method } = require('../lang/functional');
const { getInnerId } = require('../window/utils');
lazyRequire(this, '../window/utils', "getInnerId");
const { EventTarget } = require('../event/target');
const { isPrivate } = require('../private-browsing/utils');
const { getTabForBrowser, getTabForContentWindowNoShim, getBrowserForTab } = require('../tabs/utils');
const { attach, connect, detach, destroy, makeChildOptions } = require('./utils');
lazyRequire(this, '../private-browsing/utils', "isPrivate");
lazyRequire(this, '../tabs/utils', "getTabForBrowser", "getTabForContentWindowNoShim", "getBrowserForTab");
lazyRequire(this, './utils', "attach", "connect", "detach", "destroy", "makeChildOptions");
const { ensure } = require('../system/unload');
const { on: observe } = require('../system/events');
lazyRequire(this, '../system/events', {"on": "observe"});
const { Ci, Cu } = require('chrome');
const { modelFor: tabFor } = require('sdk/model/core');
lazyRequire(this, 'sdk/model/core', {"modelFor": "tabFor"});
const { remoteRequire, processes, frames } = require('../remote/parent');
remoteRequire('sdk/content/worker-child');

Просмотреть файл

@ -13,19 +13,18 @@ module.metadata = {
};
const { Class, mix } = require("./core/heritage");
const { addCollectionProperty } = require("./util/collection");
const { ns } = require("./core/namespace");
const { validateOptions, getTypeOf } = require("./deprecated/api-utils");
const { URL, isValidURI } = require("./url");
const { WindowTracker, browserWindowIterator } = require("./deprecated/window-utils");
const { isBrowser, getInnerId } = require("./window/utils");
const { MatchPattern } = require("./util/match-pattern");
lazyRequire(this, "./deprecated/api-utils", "validateOptions", "getTypeOf");
lazyRequire(this, "./url", "URL", "isValidURI");
lazyRequire(this, "./deprecated/window-utils", "WindowTracker", "browserWindowIterator");
lazyRequire(this, "./window/utils", "isBrowser", "getInnerId");
lazyRequire(this, "./util/match-pattern", "MatchPattern");
const { EventTarget } = require("./event/target");
const { emit } = require('./event/core');
lazyRequire(this, './event/core', "emit");
const { when } = require('./system/unload');
const { contract: loaderContract } = require('./content/loader');
const { omit } = require('./util/object');
const self = require('./self')
lazyRequireModule(this, './self', "self");
const { remoteRequire, processes } = require('./remote/parent');
remoteRequire('sdk/content/context-menu');

Просмотреть файл

@ -3,8 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const { Class } = require("../core/heritage");
const { extend } = require("../util/object");
const { MatchPattern } = require("../util/match-pattern");
lazyRequire(this, "../util/match-pattern", "MatchPattern");
const readers = require("./readers");
// Context class is required to implement a single `isCurrent(target)` method

Просмотреть файл

@ -10,8 +10,9 @@ module.metadata = {
const { Class } = require("./heritage");
const { Observer, subscribe, unsubscribe, observe } = require("./observer");
const { isWeak } = require("./reference");
const SDKWeakSet = require("../lang/weak-set");
lazyRequire(this, "./reference", "isWeak");
lazyRequireModule(this, "../lang/weak-set", "SDKWeakSet");
const method = require("../../method/core");

Просмотреть файл

@ -11,7 +11,7 @@ module.metadata = {
const { Cc, Ci, Cr, Cu } = require("chrome");
const { Class } = require("./heritage");
const { isWeak } = require("./reference");
lazyRequire(this, "./reference", "isWeak");
const method = require("../../method/core");
const observerService = Cc['@mozilla.org/observer-service;1'].

Просмотреть файл

@ -7,12 +7,12 @@ module.metadata = {
"stability": "deprecated"
};
const timer = require("../timers");
lazyRequireModule(this, "../timers", "timer");
const cfxArgs = require("../test/options");
const { getTabs, closeTab, getURI, getTabId, getSelectedTab } = require("../tabs/utils");
const { windows, isBrowser, getMostRecentBrowserWindow } = require("../window/utils");
lazyRequire(this, "../tabs/utils", "getTabs", "closeTab", "getURI", "getTabId", "getSelectedTab");
lazyRequire(this, "../window/utils", "windows", "isBrowser", "getMostRecentBrowserWindow");
const { defer, all, Debugging: PromiseDebugging, resolve } = require("../core/promise");
const { getInnerId } = require("../window/utils");
lazyRequire(this, "../window/utils", "getInnerId");
const { cleanUI } = require("../test/utils");
const findAndRunTests = function findAndRunTests(options) {

Просмотреть файл

@ -10,7 +10,7 @@ module.metadata = {
const { Ci } = require("chrome");
var { emit } = require("./core");
lazyRequire(this, "./core", "emit");
var { when: unload } = require("../system/unload");
var listeners = new WeakMap();

Просмотреть файл

@ -7,7 +7,7 @@ module.metadata = {
"stability": "unstable"
};
var { emit, on, once, off, EVENT_TYPE_PATTERN } = require("./core");
lazyRequire(this, "./core", "emit", "on", "once", "off", "EVENT_TYPE_PATTERN");
const { Cu } = require("chrome");
// This module provides set of high order function for working with event

Просмотреть файл

@ -12,13 +12,13 @@ const { Cc, Ci } = require("chrome");
const { Class } = require("../core/heritage");
const { List, addListItem, removeListItem } = require("../util/list");
const { EventTarget } = require("../event/target");
const { emit } = require("../event/core");
const { create: makeFrame } = require("./utils");
const { defer } = require("../core/promise");
lazyRequire(this, "../event/core", "emit");
lazyRequire(this, "./utils", { "create": "makeFrame" });
lazyRequire(this, "../core/promise", "defer");
const { when: unload } = require("../system/unload");
const { validateOptions, getTypeOf } = require("../deprecated/api-utils");
const { window } = require("../addon/window");
const { fromIterator } = require("../util/array");
lazyRequire(this, "../deprecated/api-utils", "validateOptions", "getTypeOf");
lazyRequire(this, "../addon/window", "window");
lazyRequire(this, "../util/array", "fromIterator");
// This cache is used to access friend properties between functions
// without exposing them on the public API.

Просмотреть файл

@ -18,8 +18,8 @@ module.metadata = {
*/
const { Cu } = require('chrome');
const { isNumber } = require('sdk/lang/type');
const { TextEncoder, TextDecoder } = Cu.import('resource://gre/modules/commonjs/toolkit/loader.js', {});
lazyRequire(this, 'sdk/lang/type', "isNumber");
Cu.importGlobalProperties(["TextEncoder", "TextDecoder"]);
exports.TextEncoder = TextEncoder;
exports.TextDecoder = TextDecoder;

Просмотреть файл

@ -9,8 +9,9 @@ module.metadata = {
};
const {Cc,Ci,Cr} = require("chrome");
const byteStreams = require("./byte-streams");
const textStreams = require("./text-streams");
lazyRequireModule(this, "./byte-streams", "byteStreams");
lazyRequireModule(this, "./text-streams", "textStreams");
// Flags passed when opening a file. See nsprpub/pr/include/prio.h.
const OPEN_FLAGS = {

Просмотреть файл

@ -9,10 +9,11 @@ module.metadata = {
const { Cc, Ci, CC } = require("chrome");
const { setTimeout } = require("../timers");
const { Stream, InputStream, OutputStream } = require("./stream");
const { emit, on } = require("../event/core");
const { Buffer } = require("./buffer");
lazyRequire(this, "../timers", "setTimeout");
lazyRequire(this, "./stream", "Stream", "InputStream", "OutputStream");
lazyRequire(this, "../event/core", "emit", "on");
lazyRequire(this, "./buffer", "Buffer");
const { ns } = require("../core/namespace");
const { Class } = require("../core/heritage");

Просмотреть файл

@ -9,10 +9,11 @@ module.metadata = {
const { CC, Cc, Ci, Cu, Cr, components } = require("chrome");
const { EventTarget } = require("../event/target");
const { emit } = require("../event/core");
const { Buffer } = require("./buffer");
const { Class } = require("../core/heritage");
const { setTimeout } = require("../timers");
lazyRequire(this, "../event/core", "emit");
lazyRequire(this, "./buffer", "Buffer");
lazyRequire(this, "../timers", "setTimeout");
const MultiplexInputStream = CC("@mozilla.org/io/multiplex-input-stream;1",

Просмотреть файл

@ -13,7 +13,8 @@ module.metadata = {
};
const { arity, name, derive, invoke } = require("./helpers");
const { setTimeout, clearTimeout, setImmediate } = require("../../timers");
lazyRequire(this, "sdk/timers", "setTimeout", "clearTimeout", "setImmediate");
/**
* Takes a function and returns a wrapped one instead, calling which will call

Просмотреть файл

@ -10,8 +10,7 @@ module.metadata = {
const { Ci, Cu, components } = require("chrome");
const { defer } = require("../core/promise");
const { merge } = require("../util/object");
lazyRequire(this, "../core/promise", "defer");
const { NetUtil } = Cu.import("resource://gre/modules/NetUtil.jsm", {});
const { Services } = Cu.import("resource://gre/modules/Services.jsm", {});

Просмотреть файл

@ -12,13 +12,13 @@ const { contract } = require('./util/contract');
const { WorkerHost, connect } = require('./content/utils');
const { Class } = require('./core/heritage');
const { Disposable } = require('./core/disposable');
const { Worker } = require('./content/worker');
lazyRequire(this, './content/worker', "Worker");
const { EventTarget } = require('./event/target');
const { on, emit, once, setListeners } = require('./event/core');
const { isRegExp, isUndefined } = require('./lang/type');
lazyRequire(this, './event/core', "on", "emit", "once", "setListeners");
lazyRequire(this, './lang/type', "isRegExp", "isUndefined");
const { merge, omit } = require('./util/object');
const { remove, has, hasAny } = require("./util/array");
const { Rules } = require("./util/rules");
lazyRequire(this, "./util/array", "remove", "has", "hasAny");
lazyRequire(this, "./util/rules", "Rules");
const { processes, frames, remoteRequire } = require('./remote/parent');
remoteRequire('sdk/content/page-mod');

Просмотреть файл

@ -9,19 +9,19 @@ module.metadata = {
const { Class } = require('./core/heritage');
const { ns } = require('./core/namespace');
const { pipe, stripListeners } = require('./event/utils');
lazyRequire(this, './event/utils', "pipe", "stripListeners");
const { connect, destroy, WorkerHost } = require('./content/utils');
const { Worker } = require('./content/worker');
lazyRequire(this, './content/worker', "Worker");
const { Disposable } = require('./core/disposable');
const { EventTarget } = require('./event/target');
const { setListeners } = require('./event/core');
const { window } = require('./addon/window');
const { create: makeFrame, getDocShell } = require('./frame/utils');
lazyRequire(this, './event/core', "setListeners");
lazyRequire(this, './addon/window', "window");
lazyRequire(this, './frame/utils', { "create": "makeFrame" }, "getDocShell");
const { contract } = require('./util/contract');
const { contract: loaderContract } = require('./content/loader');
const { Rules } = require('./util/rules');
lazyRequire(this, './util/rules', "Rules");
const { merge } = require('./util/object');
const { uuid } = require('./util/uuid');
lazyRequire(this, './util/uuid', "uuid");
const { useRemoteProcesses, remoteRequire, frames } = require("./remote/parent");
remoteRequire("sdk/content/page-worker");

Просмотреть файл

@ -14,28 +14,27 @@ module.metadata = {
};
const { Cu, Ci } = require("chrome");
const { setTimeout } = require('./timers');
lazyRequire(this, './timers', "setTimeout");
const { Class } = require("./core/heritage");
const { DefaultWeakMap, merge } = require("./util/object");
const { WorkerHost } = require("./content/utils");
const { Worker } = require("./deprecated/sync-worker");
lazyRequire(this, "./deprecated/sync-worker", "Worker");
const { Disposable } = require("./core/disposable");
const { WeakReference } = require('./core/reference');
const { contract: loaderContract } = require("./content/loader");
const { contract } = require("./util/contract");
const { on, off, emit, setListeners } = require("./event/core");
lazyRequire(this, "./event/core", "on", "off", "emit", "setListeners");
const { EventTarget } = require("./event/target");
const domPanel = require("./panel/utils");
const { getDocShell } = require('./frame/utils');
lazyRequireModule(this, "./panel/utils", "domPanel");
lazyRequire(this, './frame/utils', "getDocShell");
const { events } = require("./panel/events");
const systemEvents = require("./system/events");
const { filter, pipe, stripListeners } = require("./event/utils");
const { getNodeView, getActiveView } = require("./view/core");
const { isNil, isObject, isNumber } = require("./lang/type");
const { getAttachEventType } = require("./content/utils");
lazyRequire(this, "./view/core", "getNodeView", "getActiveView");
lazyRequire(this, "./lang/type", "isNil", "isObject", "isNumber");
lazyRequire(this, "./content/utils", "getAttachEventType");
const { number, boolean, object } = require('./deprecated/api-utils');
const { Style } = require("./stylesheet/style");
const { attach, detach } = require("./content/mod");
lazyRequire(this, "./stylesheet/style", "Style");
lazyRequire(this, "./content/mod", "attach", "detach");
var isRect = ({top, right, bottom, left}) => [top, right, bottom, left].
some(value => isNumber(value) && !isNaN(value));

Просмотреть файл

@ -12,7 +12,7 @@ module.metadata = {
};
const events = require("../system/events");
const { emit } = require("../event/core");
lazyRequire(this, "../event/core", "emit");
var channel = {};

Просмотреть файл

@ -10,17 +10,17 @@ module.metadata = {
const { Cc, Ci } = require("chrome");
const { Services } = require("resource://gre/modules/Services.jsm");
const { setTimeout } = require("../timers");
const { platform } = require("../system");
const { getMostRecentBrowserWindow, getOwnerBrowserWindow,
getScreenPixelsPerCSSPixel } = require("../window/utils");
lazyRequire(this, "../timers", "setTimeout");
lazyRequire(this, "../system", "platform");
lazyRequire(this, "../window/utils", "getMostRecentBrowserWindow", "getOwnerBrowserWindow",
"getScreenPixelsPerCSSPixel");
const { create: createFrame, swapFrameLoaders, getDocShell } = require("../frame/utils");
const { window: addonWindow } = require("../addon/window");
const { isNil } = require("../lang/type");
const { data } = require('../self');
lazyRequire(this, "../frame/utils", { "create": "createFrame" }, "swapFrameLoaders", "getDocShell");
lazyRequire(this, "../addon/window", { "window": "addonWindow" });
lazyRequire(this, "../lang/type", "isNil");
lazyRequire(this, '../self', "data");
const events = require("../system/events");
lazyRequireModule(this, "../system/events", "events");
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

Просмотреть файл

@ -12,9 +12,9 @@ const { Cc, Ci, Cr, Cm, components: { classesByID } } = require('chrome');
const { registerFactory, unregisterFactory, isCIDRegistered } =
Cm.QueryInterface(Ci.nsIComponentRegistrar);
const { merge } = require('../util/object');
const { Class, extend, mix } = require('../core/heritage');
const { uuid } = require('../util/uuid');
lazyRequire(this, '../util/object', 'merge');
lazyRequire(this, '../util/uuid', 'uuid');
// This is a base prototype, that provides bare bones of XPCOM. JS based
// components can be easily implement by extending it.

Просмотреть файл

@ -8,12 +8,13 @@ module.metadata = {
};
const { Cc, Ci, Cu } = require('chrome');
const { on } = require('../system/events');
const { id, preferencesBranch } = require('../self');
const { localizeInlineOptions } = require('../l10n/prefs');
const { Services } = require("resource://gre/modules/Services.jsm");
const { AddonManager } = Cu.import("resource://gre/modules/AddonManager.jsm");
const { defer } = require("sdk/core/promise");
lazyRequire(this, '../system/events', "on");
lazyRequire(this, '../self', "preferencesBranch");
lazyRequire(this, '../l10n/prefs', "localizeInlineOptions");
lazyRequire(this, "resource://gre/modules/Services.jsm", "Services");
lazyRequire(this, "resource://gre/modules/AddonManager.jsm", "AddonManager");
lazyRequire(this, "resource://gre/modules/Preferences.jsm", "Preferences");
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";;
const DEFAULT_OPTIONS_URL = 'data:text/xml,<placeholder/>';
@ -24,48 +25,46 @@ const VALID_PREF_TYPES = ['bool', 'boolint', 'integer', 'string', 'color',
const isFennec = require("sdk/system/xul-app").is("Fennec");
function enable({ preferences, id }) {
let enabled = defer();
return new Promise(resolve => {
validate(preferences);
validate(preferences);
setDefaults(preferences, preferencesBranch);
setDefaults(preferences, preferencesBranch);
// allow the use of custom options.xul
AddonManager.getAddonByID(id, (addon) => {
on('addon-options-displayed', onAddonOptionsDisplayed, true);
resolve({ id });
});
// allow the use of custom options.xul
AddonManager.getAddonByID(id, (addon) => {
on('addon-options-displayed', onAddonOptionsDisplayed, true);
enabled.resolve({ id: id });
});
function onAddonOptionsDisplayed({ subject: doc, data }) {
if (data === id) {
let parent;
function onAddonOptionsDisplayed({ subject: doc, data }) {
if (data === id) {
let parent;
if (isFennec) {
parent = doc.querySelector('.options-box');
if (isFennec) {
parent = doc.querySelector('.options-box');
// NOTE: This disable the CSS rule that makes the options invisible
let item = doc.querySelector('#addons-details .addon-item');
item.removeAttribute("optionsURL");
} else {
parent = doc.getElementById('detail-downloads').parentNode;
}
// NOTE: This disable the CSS rule that makes the options invisible
let item = doc.querySelector('#addons-details .addon-item');
item.removeAttribute("optionsURL");
} else {
parent = doc.getElementById('detail-downloads').parentNode;
}
if (parent) {
injectOptions({
preferences: preferences,
preferencesBranch: preferencesBranch,
document: doc,
parent: parent,
id: id
});
localizeInlineOptions(doc);
} else {
throw Error("Preferences parent node not found in Addon Details. The configured custom preferences will not be visible.");
if (parent) {
injectOptions({
preferences: preferences,
preferencesBranch: preferencesBranch,
document: doc,
parent: parent,
id: id
});
localizeInlineOptions(doc);
} else {
throw Error("Preferences parent node not found in Addon Details. The configured custom preferences will not be visible.");
}
}
}
}
return enabled.promise;
});
}
exports.enable = enable;
@ -103,28 +102,14 @@ exports.validate = validate;
// initializes default preferences, emulates defaults/prefs.js
function setDefaults(preferences, preferencesBranch) {
const branch = Cc['@mozilla.org/preferences-service;1'].
getService(Ci.nsIPrefService).
getDefaultBranch('extensions.' + preferencesBranch + '.');
for (let { name, value } of preferences) {
switch (typeof value) {
case 'boolean':
branch.setBoolPref(name, value);
break;
case 'number':
// must be integer, ignore otherwise
if (value % 1 === 0) {
branch.setIntPref(name, value);
}
break;
case 'string':
let str = Cc["@mozilla.org/supports-string;1"].
createInstance(Ci.nsISupportsString);
str.data = value;
branch.setComplexValue(name, Ci.nsISupportsString, str);
break;
}
}
let prefs = new Preferences({
branch: `extensions.${preferencesBranch}.`,
defaultBranch: true,
});
for (let { name, value } of preferences)
if (value !== undefined)
prefs.set(name, value);
}
exports.setDefaults = setDefaults;

Просмотреть файл

@ -9,10 +9,11 @@ module.metadata = {
const { Cc, Ci, Cu } = require('chrome');
const { is } = require('../system/xul-app');
const { isWindowPrivate } = require('../window/utils');
const { isPrivateBrowsingSupported } = require('../self');
const { dispatcher } = require("../util/dispatcher");
lazyRequire(this, '../window/utils', "isWindowPrivate");
lazyRequire(this, '../self', "isPrivateBrowsingSupported");
var PrivateBrowsingUtils;
// Private browsing is only supported in Fx

Просмотреть файл

@ -27,7 +27,8 @@ const system = require('../system/events');
const { EventParent } = require('./utils');
const options = require('@loader/options');
const loaderModule = require('toolkit/loader');
const { getTabForBrowser } = require('../tabs/utils');
lazyRequire(this, '../tabs/utils', "getTabForBrowser");
const appInfo = Cc["@mozilla.org/xre/app-info;1"].
getService(Ci.nsIXULRuntime);

Просмотреть файл

@ -5,8 +5,8 @@
const { Class } = require('../core/heritage');
const { List, addListItem, removeListItem } = require('../util/list');
const { emit } = require('../event/core');
const { pipe } = require('../event/utils');
lazyRequire(this, '../event/core', 'emit');
lazyRequire(this, '../event/utils', 'pipe');
// A helper class that maintains a list of EventTargets. Any events emitted
// to an EventTarget are also emitted by the EventParent. Likewise for an

Просмотреть файл

@ -12,18 +12,17 @@ module.metadata = {
}
};
const { Ci, Cc } = require("chrome"),
{ setTimeout } = require("./timers"),
{ emit, off } = require("./event/core"),
{ Class, obscure } = require("./core/heritage"),
{ EventTarget } = require("./event/target"),
{ ns } = require("./core/namespace"),
{ when: unload } = require("./system/unload"),
{ ignoreWindow } = require('./private-browsing/utils'),
{ getTabs, getTabForContentWindow,
getAllTabContentWindows } = require('./tabs/utils'),
winUtils = require("./window/utils"),
events = require("./system/events");
const { Ci, Cc } = require("chrome");
lazyRequire(this, "./timers", "setTimeout");
lazyRequire(this, "./event/core", "emit", "off");
const { Class, obscure } = require("./core/heritage");
const { EventTarget } = require("./event/target");
const { ns } = require("./core/namespace");
const { when: unload } = require("./system/unload");
lazyRequire(this, './private-browsing/utils', "ignoreWindow");
lazyRequire(this, './tabs/utils', "getTabs", "getTabForContentWindow", "getAllTabContentWindows");
lazyRequireModule(this, "./window/utils", "winUtils");
const events = require("./system/events");
// The selection types
const HTML = 0x01,

Просмотреть файл

@ -11,7 +11,7 @@ const { CC } = require('chrome');
const options = require('@loader/options');
const { get } = require("./preferences/service");
const { readURISync } = require('./net/url');
lazyRequire(this, './net/url', "readURISync");
const id = options.id;

Просмотреть файл

@ -9,12 +9,12 @@ module.metadata = {
};
const { Cc, Ci } = require("chrome");
const file = require("./io/file");
const prefs = require("./preferences/service");
const jpSelf = require("./self");
const timer = require("./timers");
lazyRequireModule(this, "./timers", "timer");
lazyRequireModule(this, "./io/file", "file");
lazyRequireModule(this, "./preferences/service", "prefs");
const unload = require("./system/unload");
const { emit, on, off } = require("./event/core");
lazyRequire(this, "./event/core", "emit", "on", "off");
const WRITE_PERIOD_PREF = "extensions.addon-sdk.simple-storage.writePeriod";
const WRITE_PERIOD_DEFAULT = 300000; // 5 minutes

Просмотреть файл

@ -7,14 +7,12 @@ module.metadata = {
"stability": "experimental"
};
const { Cc, Ci } = require("chrome");
const { Class } = require("../core/heritage");
const { URL, isLocalURL } = require('../url');
const events = require("../system/events");
const { loadSheet, removeSheet, isTypeValid } = require("./utils");
const { isString } = require("../lang/type");
lazyRequire(this, "../url", "isLocalURL");
lazyRequire(this, "./utils", "loadSheet", "removeSheet", "isTypeValid");
lazyRequire(this, "../lang/type", "isString");
const { attachTo, detachFrom } = require("../content/mod");
const { data } = require('../self');
lazyRequire(this, '../self', "data");
const { freeze, create } = Object;

Просмотреть файл

@ -12,12 +12,17 @@ const options = require('@loader/options');
const runtime = require("./system/runtime");
const { when: unload } = require("./system/unload");
const appStartup = Cc['@mozilla.org/toolkit/app-startup;1'].
getService(Ci.nsIAppStartup);
const { XPCOMUtils } = require('resource://gre/modules/XPCOMUtils.jsm');
XPCOMUtils.defineLazyServiceGetter(this, 'appStartup',
'@mozilla.org/toolkit/app-startup;1',
'nsIAppStartup');
XPCOMUtils.defineLazyServiceGetter(this, 'directoryService',
'@mozilla.org/file/directory_service;1',
'nsIProperties');
const appInfo = Cc["@mozilla.org/xre/app-info;1"].
getService(Ci.nsIXULAppInfo);
const directoryService = Cc['@mozilla.org/file/directory_service;1'].
getService(Ci.nsIProperties);
const PR_WRONLY = parseInt("0x02");
const PR_CREATE_FILE = parseInt("0x08");
@ -34,8 +39,6 @@ function openFile(path, mode) {
return stream
}
const { eAttemptQuit: E_ATTEMPT, eForceQuit: E_FORCE } = appStartup;
/**
* Parsed JSON object that was passed via `cfx --static-args "{ foo: 'bar' }"`
*/
@ -86,7 +89,7 @@ exports.exit = function exit(code) {
}
unloader();
appStartup.quit(code ? E_ATTEMPT : E_FORCE);
appStartup.quit(code ? appStartup.eAttemptQuit : appStartup.eForceQuit);
};
// Adapter for nodejs's stdout & stderr:

Просмотреть файл

@ -8,41 +8,42 @@ module.metadata = {
"stability": "unstable"
};
var { Cc, Ci, CC } = require('chrome');
var { PlainTextConsole } = require('../console/plain-text');
var { stdout } = require('../system');
var ScriptError = CC('@mozilla.org/scripterror;1', 'nsIScriptError');
var consoleService = Cc['@mozilla.org/consoleservice;1'].getService(Ci.nsIConsoleService);
defineLazyGetter(this, "console", () => new (require('../console/plain-text').PlainTextConsole)());
exports = module.exports = {};
// On windows dump does not writes into stdout so cfx can't read thous dumps.
// To workaround this issue we write to a special file from which cfx will
// read and print to the console.
// For more details see: bug-673383
exports.dump = stdout.write;
exports.console = new PlainTextConsole();
defineLazyGetter(exports, "console", () => console);
// Provide CommonJS `define` to allow authoring modules in a format that can be
// loaded both into jetpack and into browser via AMD loaders.
Object.defineProperty(exports, 'define', {
// `define` is provided as a lazy getter that binds below defined `define`
// function to the module scope, so that require, exports and module
// variables remain accessible.
configurable: true,
get: function() {
let sandbox = this;
return function define(factory) {
factory = Array.slice(arguments).pop();
factory.call(sandbox, sandbox.require, sandbox.exports, sandbox.module);
}
},
set: function(value) {
Object.defineProperty(this, 'define', {
// `define` is provided as a lazy getter that binds below defined `define`
// function to the module scope, so that require, exports and module
// variables remain accessible.
defineLazyGetter(exports, 'define', function() {
return (...args) => {
let factory = args.pop();
factory.call(this, this.require, this.exports, this.module);
};
});
function defineLazyGetter(object, prop, getter) {
let redefine = (obj, value) => {
Object.defineProperty(obj, prop, {
configurable: true,
enumerable: true,
writable: true,
value,
});
},
});
return value;
};
Object.defineProperty(object, prop, {
configurable: true,
get() {
return redefine(this, getter.call(this));
},
set(value) {
redefine(this, value);
}
});
}

Просмотреть файл

@ -11,7 +11,7 @@ module.metadata = {
// NOTE: This file should only export Tab instances
const { getTabForBrowser: getRawTabForBrowser } = require('./utils');
lazyRequire(this, './utils', { "getTabForBrowser": "getRawTabForBrowser" });
const { modelFor } = require('../model/core');
exports.getTabForRawTab = modelFor;

Просмотреть файл

@ -8,8 +8,8 @@ module.metadata = {
};
const { getTargetWindow } = require("../content/mod");
const { getTabContentWindow, isTab } = require("./utils");
const { viewFor } = require("../view/core");
lazyRequire(this, "./utils", "getTabContentWindow", "isTab");
lazyRequire(this, "../view/core", "viewFor");
if (require('../system/xul-app').name == 'Fennec') {
module.exports = require('./tab-fennec');

Просмотреть файл

@ -6,17 +6,17 @@
const { Class } = require('../core/heritage');
const { Tab, tabEvents } = require('./tab');
const { EventTarget } = require('../event/target');
const { emit, setListeners } = require('../event/core');
lazyRequire(this, '../event/core', "emit", "setListeners");
const { pipe } = require('../event/utils');
const { observer: windowObserver } = require('../windows/observer');
const { List, addListItem, removeListItem } = require('../util/list');
const { modelFor } = require('../model/core');
const { viewFor } = require('../view/core');
const { getTabs, getSelectedTab } = require('./utils');
const { getMostRecentBrowserWindow, isBrowser } = require('../window/utils');
const { Options } = require('./common');
const { isPrivate } = require('../private-browsing');
const { ignoreWindow, isWindowPBSupported } = require('../private-browsing/utils')
lazyRequire(this, '../model/core', "modelFor");
lazyRequire(this, '../view/core', "viewFor");
lazyRequire(this, './utils', "getTabs", "getSelectedTab");
lazyRequire(this, '../window/utils', "getMostRecentBrowserWindow", "isBrowser");
lazyRequire(this, './common', "Options");
lazyRequire(this, '../private-browsing', "isPrivate");
lazyRequire(this, '../private-browsing/utils', "ignoreWindow", "isWindowPBSupported")
const { isPrivateBrowsingSupported } = require('sdk/self');
const supportPrivateTabs = isPrivateBrowsingSupported && isWindowPBSupported;

Просмотреть файл

@ -12,9 +12,9 @@ module.metadata = {
const { Ci, Cu } = require('chrome');
const { defer } = require("../lang/functional");
const { windows, isBrowser } = require('../window/utils');
const { isPrivateBrowsingSupported } = require('../self');
lazyRequire(this, "../lang/functional", "defer");
lazyRequire(this, '../window/utils', "windows", "isBrowser");
lazyRequire(this, '../self', "isPrivateBrowsingSupported");
const { ShimWaiver } = Cu.import("resource://gre/modules/ShimWaiver.jsm");
// Bug 834961: ignore private windows when they are not supported

Просмотреть файл

@ -13,7 +13,7 @@ const { serializeStack, parseStack } = require("toolkit/loader");
const { setTimeout } = require('../timers');
const { PlainTextConsole } = require("../console/plain-text");
const { when: unload } = require("../system/unload");
const { format, fromException } = require("../console/traceback");
lazyRequire(this, "../console/traceback", "format", "fromException");
const system = require("../system");
const { gc: gcPromise } = require('./memory');
const { defer } = require('../core/promise');

Просмотреть файл

@ -7,13 +7,13 @@ module.metadata = {
'stability': 'unstable'
};
const { defer } = require('../core/promise');
const { setInterval, clearInterval } = require('../timers');
const { getTabs, closeTab } = require("../tabs/utils");
const { windows: getWindows } = require("../window/utils");
const { close: closeWindow } = require("../window/helpers");
const { isGenerator } = require("../lang/type");
const { env } = require("../system/environment");
lazyRequire(this, '../core/promise', "defer");
lazyRequire(this, '../timers', "setInterval", "clearInterval");
lazyRequire(this, "../tabs/utils", "getTabs", "closeTab");
lazyRequire(this, "../window/utils", {"windows": "getWindows"});
lazyRequire(this, "../window/helpers", {"close": "closeWindow"});
lazyRequire(this, "../lang/type", "isGenerator");
lazyRequire(this, "../system/environment", "env");
const { Task } = require("resource://gre/modules/Task.jsm");
const getTestNames = (exports) =>

Просмотреть файл

@ -8,8 +8,8 @@ module.metadata = {
"stability": "experimental"
};
const { get, format } = require("../console/traceback");
const { get: getPref } = require("../preferences/service");
lazyRequire(this, "../console/traceback", "get", "format");
lazyRequire(this, "../preferences/service", {"get": "getPref"});
const PREFERENCE = "devtools.errorconsole.deprecation_warnings";
function deprecateUsage(msg) {

Просмотреть файл

@ -7,7 +7,7 @@ module.metadata = {
"stability": "unstable"
};
const { URL } = require('../url');
lazyRequire(this, '../url', "URL");
const cache = {};
function MatchPattern(pattern) {

Просмотреть файл

@ -7,7 +7,7 @@ module.metadata = {
"stability": "unstable"
};
const { flatten } = require('./array');
lazyRequire(this, './array', "flatten");
// Create a shortcut for Array.prototype.slice.call().
const unbind = Function.call.bind(Function.bind, Function.call);

Просмотреть файл

@ -8,8 +8,8 @@ module.metadata = {
};
const { Class } = require('../core/heritage');
const { MatchPattern } = require('./match-pattern');
const { emit } = require('../event/core');
lazyRequire(this, './match-pattern', "MatchPattern");
lazyRequire(this, '../event/core', "emit");
const { EventTarget } = require('../event/target');
const { List, addListItem, removeListItem } = require('./list');

Просмотреть файл

@ -21,8 +21,8 @@ module.metadata = {
// - `_` used for argument(s) or variable(s) who's values are ignored.
const { complement, flip, identity } = require("../lang/functional");
const { isArray, isArguments, isMap, isSet, isGenerator,
isString, isBoolean, isNumber } = require("../lang/type");
lazyRequire(this, "../lang/type", "isArray", "isArguments", "isMap", "isSet",
"isGenerator", "isString", "isBoolean", "isNumber");
const Sequence = function Sequence(iterator) {
if (!isGenerator(iterator)) {

Просмотреть файл

@ -8,7 +8,7 @@ module.metadata = {
};
const { Cc, Ci } = require('chrome');
const array = require('../util/array');
lazyRequireModule(this, "../util/array", "array");
const { defer } = require('sdk/core/promise');
const { dispatcher } = require("../util/dispatcher");

Просмотреть файл

@ -40,7 +40,8 @@ exports.asyncWindowLeakTest = function*(assert, asyncTestFunc) {
// SelfSupportBackend periodically tries to open windows. This can
// mess up our window leak detection below, so turn it off.
SelfSupportBackend.uninit();
if (SelfSupportBackend._log)
SelfSupportBackend.uninit();
// Wait for the browser to finish loading.
yield Startup.onceInitialized;