зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1772095 - Part 4: Use plain object for lazy getter in mobile/android/modules/geckoview/. r=geckoview-reviewers,agi
Differential Revision: https://phabricator.services.mozilla.com/D147996
This commit is contained in:
Родитель
d37d7fac1b
Коммит
50161bda46
|
@ -13,26 +13,28 @@ const { GeckoViewUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/GeckoViewUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
AppConstants: "resource://gre/modules/AppConstants.jsm",
|
||||
EventDispatcher: "resource://gre/modules/Messaging.jsm",
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
});
|
||||
|
||||
ChromeUtils.defineModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm");
|
||||
ChromeUtils.defineModuleGetter(lazy, "OS", "resource://gre/modules/osfile.jsm");
|
||||
|
||||
const { debug, warn } = GeckoViewUtils.initLogging("ChildCrashHandler");
|
||||
|
||||
function getDir(name) {
|
||||
const uAppDataPath = Services.dirsvc.get("UAppData", Ci.nsIFile).path;
|
||||
return OS.Path.join(uAppDataPath, "Crash Reports", name);
|
||||
const uAppDataPath = lazy.Services.dirsvc.get("UAppData", Ci.nsIFile).path;
|
||||
return lazy.OS.Path.join(uAppDataPath, "Crash Reports", name);
|
||||
}
|
||||
|
||||
function getPendingMinidump(id) {
|
||||
const pendingDir = getDir("pending");
|
||||
|
||||
return [".dmp", ".extra"].map(suffix => {
|
||||
return OS.Path.join(pendingDir, `${id}${suffix}`);
|
||||
return lazy.OS.Path.join(pendingDir, `${id}${suffix}`);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -54,7 +56,7 @@ var ChildCrashHandler = {
|
|||
|
||||
if (
|
||||
!aSubject.get("abnormal") ||
|
||||
!AppConstants.MOZ_CRASHREPORTER ||
|
||||
!lazy.AppConstants.MOZ_CRASHREPORTER ||
|
||||
disableReporting
|
||||
) {
|
||||
return;
|
||||
|
@ -64,7 +66,7 @@ var ChildCrashHandler = {
|
|||
// to report the crash.
|
||||
const dumpID = aSubject.get("dumpID");
|
||||
if (!dumpID) {
|
||||
Services.telemetry
|
||||
lazy.Services.telemetry
|
||||
.getHistogramById("FX_CONTENT_CRASH_DUMP_UNAVAILABLE")
|
||||
.add(1);
|
||||
return;
|
||||
|
@ -79,7 +81,7 @@ var ChildCrashHandler = {
|
|||
? "BACKGROUND_CHILD"
|
||||
: "FOREGROUND_CHILD";
|
||||
|
||||
EventDispatcher.instance.sendRequest({
|
||||
lazy.EventDispatcher.instance.sendRequest({
|
||||
type: "GeckoView:ChildCrashReport",
|
||||
minidumpPath,
|
||||
extrasPath,
|
||||
|
|
|
@ -11,8 +11,10 @@ const { XPCOMUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/XPCOMUtils.jsm"
|
||||
);
|
||||
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(
|
||||
this,
|
||||
lazy,
|
||||
"MessageLoop",
|
||||
"@mozilla.org/message-loop;1",
|
||||
"nsIMessageLoop"
|
||||
|
@ -96,7 +98,7 @@ var Impl = {
|
|||
|
||||
if (nextDue !== undefined) {
|
||||
// Schedule the next idle, if we still have pending inits.
|
||||
MessageLoop.postIdleTask(
|
||||
lazy.MessageLoop.postIdleTask(
|
||||
() => this.onIdle(),
|
||||
Math.max(0, nextDue - time)
|
||||
);
|
||||
|
@ -121,7 +123,7 @@ var Impl = {
|
|||
|
||||
if (!this.pendingInits.length) {
|
||||
// Schedule for the first idle.
|
||||
MessageLoop.postIdleTask(() => this.onIdle(), wait);
|
||||
lazy.MessageLoop.postIdleTask(() => this.onIdle(), wait);
|
||||
}
|
||||
this.pendingInits.push(init);
|
||||
return init;
|
||||
|
|
|
@ -20,12 +20,14 @@ const { GeckoViewUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/GeckoViewUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
EventDispatcher: "resource://gre/modules/Messaging.jsm",
|
||||
GeckoViewPrompter: "resource://gre/modules/GeckoViewPrompter.jsm",
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "LoginInfo", () =>
|
||||
XPCOMUtils.defineLazyGetter(lazy, "LoginInfo", () =>
|
||||
Components.Constructor(
|
||||
"@mozilla.org/login-manager/loginInfo;1",
|
||||
"nsILoginInfo",
|
||||
|
@ -62,7 +64,7 @@ class LoginEntry {
|
|||
}
|
||||
|
||||
toLoginInfo() {
|
||||
const info = new LoginInfo(
|
||||
const info = new lazy.LoginInfo(
|
||||
this.origin,
|
||||
this.formActionOrigin,
|
||||
this.httpRealm,
|
||||
|
@ -325,7 +327,7 @@ const GeckoViewAutocomplete = {
|
|||
fetchLogins(aDomain = null) {
|
||||
debug`fetchLogins for ${aDomain ?? "All domains"}`;
|
||||
|
||||
return EventDispatcher.instance.sendRequestForResult({
|
||||
return lazy.EventDispatcher.instance.sendRequestForResult({
|
||||
type: "GeckoView:Autocomplete:Fetch:Login",
|
||||
domain: aDomain,
|
||||
});
|
||||
|
@ -344,7 +346,7 @@ const GeckoViewAutocomplete = {
|
|||
fetchCreditCards() {
|
||||
debug`fetchCreditCards`;
|
||||
|
||||
return EventDispatcher.instance.sendRequestForResult({
|
||||
return lazy.EventDispatcher.instance.sendRequestForResult({
|
||||
type: "GeckoView:Autocomplete:Fetch:CreditCard",
|
||||
});
|
||||
},
|
||||
|
@ -364,7 +366,7 @@ const GeckoViewAutocomplete = {
|
|||
fetchAddresses() {
|
||||
debug`fetchAddresses`;
|
||||
|
||||
return EventDispatcher.instance.sendRequestForResult({
|
||||
return lazy.EventDispatcher.instance.sendRequestForResult({
|
||||
type: "GeckoView:Autocomplete:Fetch:Address",
|
||||
});
|
||||
},
|
||||
|
@ -378,7 +380,7 @@ const GeckoViewAutocomplete = {
|
|||
onCreditCardSave(aCreditCard) {
|
||||
debug`onCreditCardSave ${aCreditCard}`;
|
||||
|
||||
EventDispatcher.instance.sendRequest({
|
||||
lazy.EventDispatcher.instance.sendRequest({
|
||||
type: "GeckoView:Autocomplete:Save:CreditCard",
|
||||
creditCard: aCreditCard,
|
||||
});
|
||||
|
@ -393,7 +395,7 @@ const GeckoViewAutocomplete = {
|
|||
onAddressSave(aAddress) {
|
||||
debug`onAddressSave ${aAddress}`;
|
||||
|
||||
EventDispatcher.instance.sendRequest({
|
||||
lazy.EventDispatcher.instance.sendRequest({
|
||||
type: "GeckoView:Autocomplete:Save:Address",
|
||||
address: aAddress,
|
||||
});
|
||||
|
@ -409,7 +411,7 @@ const GeckoViewAutocomplete = {
|
|||
onLoginSave(aLogin) {
|
||||
debug`onLoginSave ${aLogin}`;
|
||||
|
||||
EventDispatcher.instance.sendRequest({
|
||||
lazy.EventDispatcher.instance.sendRequest({
|
||||
type: "GeckoView:Autocomplete:Save:Login",
|
||||
login: aLogin,
|
||||
});
|
||||
|
@ -426,7 +428,7 @@ const GeckoViewAutocomplete = {
|
|||
onLoginPasswordUsed(aLogin) {
|
||||
debug`onLoginUsed ${aLogin}`;
|
||||
|
||||
EventDispatcher.instance.sendRequest({
|
||||
lazy.EventDispatcher.instance.sendRequest({
|
||||
type: "GeckoView:Autocomplete:Used:Login",
|
||||
usedFields: UsedField.PASSWORD,
|
||||
login: aLogin,
|
||||
|
@ -453,7 +455,7 @@ const GeckoViewAutocomplete = {
|
|||
return;
|
||||
}
|
||||
|
||||
const prompt = new GeckoViewPrompter(aBrowser.ownerGlobal);
|
||||
const prompt = new lazy.GeckoViewPrompter(aBrowser.ownerGlobal);
|
||||
prompt.asyncShowPrompt(
|
||||
{
|
||||
type: "Autocomplete:Select:Login",
|
||||
|
@ -493,7 +495,7 @@ const GeckoViewAutocomplete = {
|
|||
return;
|
||||
}
|
||||
|
||||
const prompt = new GeckoViewPrompter(aBrowser.ownerGlobal);
|
||||
const prompt = new lazy.GeckoViewPrompter(aBrowser.ownerGlobal);
|
||||
prompt.asyncShowPrompt(
|
||||
{
|
||||
type: "Autocomplete:Select:CreditCard",
|
||||
|
@ -533,7 +535,7 @@ const GeckoViewAutocomplete = {
|
|||
return;
|
||||
}
|
||||
|
||||
const prompt = new GeckoViewPrompter(aBrowser.ownerGlobal);
|
||||
const prompt = new lazy.GeckoViewPrompter(aBrowser.ownerGlobal);
|
||||
prompt.asyncShowPrompt(
|
||||
{
|
||||
type: "Autocomplete:Select:Address",
|
||||
|
|
|
@ -12,7 +12,9 @@ const { GeckoViewUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/GeckoViewUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
});
|
||||
|
||||
|
@ -49,7 +51,7 @@ var GeckoViewConsole = {
|
|||
|
||||
observe(aSubject, aTopic, aData) {
|
||||
if (aTopic == "nsPref:changed") {
|
||||
this.enabled = Services.prefs.getBoolPref(aData, false);
|
||||
this.enabled = lazy.Services.prefs.getBoolPref(aData, false);
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -80,9 +82,9 @@ var GeckoViewConsole = {
|
|||
flag,
|
||||
"content javascript"
|
||||
);
|
||||
Services.console.logMessage(consoleMsg);
|
||||
lazy.Services.console.logMessage(consoleMsg);
|
||||
} else if (aMessage.level == "trace") {
|
||||
const bundle = Services.strings.createBundle(
|
||||
const bundle = lazy.Services.strings.createBundle(
|
||||
"chrome://browser/locale/browser.properties"
|
||||
);
|
||||
const args = aMessage.arguments;
|
||||
|
@ -112,30 +114,30 @@ var GeckoViewConsole = {
|
|||
"\n";
|
||||
});
|
||||
|
||||
Services.console.logStringMessage(body);
|
||||
lazy.Services.console.logStringMessage(body);
|
||||
} else if (aMessage.level == "time" && aMessage.arguments) {
|
||||
const bundle = Services.strings.createBundle(
|
||||
const bundle = lazy.Services.strings.createBundle(
|
||||
"chrome://browser/locale/browser.properties"
|
||||
);
|
||||
const body = bundle.formatStringFromName("timer.start", [
|
||||
aMessage.arguments.name,
|
||||
]);
|
||||
Services.console.logStringMessage(body);
|
||||
lazy.Services.console.logStringMessage(body);
|
||||
} else if (aMessage.level == "timeEnd" && aMessage.arguments) {
|
||||
const bundle = Services.strings.createBundle(
|
||||
const bundle = lazy.Services.strings.createBundle(
|
||||
"chrome://browser/locale/browser.properties"
|
||||
);
|
||||
const body = bundle.formatStringFromName("timer.end", [
|
||||
aMessage.arguments.name,
|
||||
aMessage.arguments.duration,
|
||||
]);
|
||||
Services.console.logStringMessage(body);
|
||||
lazy.Services.console.logStringMessage(body);
|
||||
} else if (
|
||||
["group", "groupCollapsed", "groupEnd"].includes(aMessage.level)
|
||||
) {
|
||||
// Do nothing yet
|
||||
} else {
|
||||
Services.console.logStringMessage(joinedArguments);
|
||||
lazy.Services.console.logStringMessage(joinedArguments);
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -13,7 +13,9 @@ const { XPCOMUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/XPCOMUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
});
|
||||
|
||||
|
@ -59,8 +61,8 @@ class GeckoViewContent extends GeckoViewModule {
|
|||
this.window.addEventListener("pagetitlechanged", this);
|
||||
this.window.addEventListener("pageinfo", this);
|
||||
|
||||
Services.obs.addObserver(this, "oop-frameloader-crashed");
|
||||
Services.obs.addObserver(this, "ipc:content-shutdown");
|
||||
lazy.Services.obs.addObserver(this, "oop-frameloader-crashed");
|
||||
lazy.Services.obs.addObserver(this, "ipc:content-shutdown");
|
||||
}
|
||||
|
||||
onDisable() {
|
||||
|
@ -84,8 +86,8 @@ class GeckoViewContent extends GeckoViewModule {
|
|||
this.window.removeEventListener("pagetitlechanged", this);
|
||||
this.window.removeEventListener("pageinfo", this);
|
||||
|
||||
Services.obs.removeObserver(this, "oop-frameloader-crashed");
|
||||
Services.obs.removeObserver(this, "ipc:content-shutdown");
|
||||
lazy.Services.obs.removeObserver(this, "oop-frameloader-crashed");
|
||||
lazy.Services.obs.removeObserver(this, "ipc:content-shutdown");
|
||||
}
|
||||
|
||||
get actor() {
|
||||
|
|
|
@ -13,13 +13,15 @@ const { XPCOMUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/XPCOMUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
E10SUtils: "resource://gre/modules/E10SUtils.jsm",
|
||||
LoadURIDelegate: "resource://gre/modules/LoadURIDelegate.jsm",
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "ReferrerInfo", () =>
|
||||
XPCOMUtils.defineLazyGetter(lazy, "ReferrerInfo", () =>
|
||||
Components.Constructor(
|
||||
"@mozilla.org/referrer-info;1",
|
||||
"nsIReferrerInfo",
|
||||
|
@ -45,10 +47,10 @@ const HEADER_FILTER_UNRESTRICTED_UNSAFE = 2;
|
|||
const createReferrerInfo = aReferrer => {
|
||||
let referrerUri;
|
||||
try {
|
||||
referrerUri = Services.io.newURI(aReferrer);
|
||||
referrerUri = lazy.Services.io.newURI(aReferrer);
|
||||
} catch (ignored) {}
|
||||
|
||||
return new ReferrerInfo(Ci.nsIReferrerInfo.EMPTY, true, referrerUri);
|
||||
return new lazy.ReferrerInfo(Ci.nsIReferrerInfo.EMPTY, true, referrerUri);
|
||||
};
|
||||
|
||||
function convertFlags(aFlags) {
|
||||
|
@ -109,7 +111,7 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
// There may be a GeckoViewNavigation module in another window waiting for
|
||||
// us to create a browser so it can set openWindowInfo, so allow them to do
|
||||
// that now.
|
||||
Services.obs.notifyObservers(this.window, "geckoview-window-created");
|
||||
lazy.Services.obs.notifyObservers(this.window, "geckoview-window-created");
|
||||
}
|
||||
|
||||
onInit() {
|
||||
|
@ -185,7 +187,7 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
|
||||
let triggeringPrincipal, referrerInfo, csp;
|
||||
if (referrerSessionId) {
|
||||
const referrerWindow = Services.ww.getWindowByName(
|
||||
const referrerWindow = lazy.Services.ww.getWindowByName(
|
||||
referrerSessionId,
|
||||
this.window
|
||||
);
|
||||
|
@ -196,7 +198,7 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
? referrerWindow.browser.referrerInfo.referrerPolicy
|
||||
: Ci.nsIReferrerInfo.EMPTY;
|
||||
|
||||
referrerInfo = new ReferrerInfo(
|
||||
referrerInfo = new lazy.ReferrerInfo(
|
||||
referrerPolicy,
|
||||
true,
|
||||
referrerWindow.browser.documentURI
|
||||
|
@ -212,12 +214,12 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
// Always use the system principal as the triggering principal
|
||||
// for user-initiated (ie. no referrer session and not external)
|
||||
// loads. See discussion in bug 1573860.
|
||||
triggeringPrincipal = Services.scriptSecurityManager.getSystemPrincipal();
|
||||
triggeringPrincipal = lazy.Services.scriptSecurityManager.getSystemPrincipal();
|
||||
}
|
||||
}
|
||||
|
||||
if (!triggeringPrincipal) {
|
||||
triggeringPrincipal = Services.scriptSecurityManager.createNullPrincipal(
|
||||
triggeringPrincipal = lazy.Services.scriptSecurityManager.createNullPrincipal(
|
||||
{}
|
||||
);
|
||||
}
|
||||
|
@ -235,7 +237,9 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
}
|
||||
|
||||
if (additionalHeaders != "") {
|
||||
additionalHeaders = E10SUtils.makeInputStream(additionalHeaders);
|
||||
additionalHeaders = lazy.E10SUtils.makeInputStream(
|
||||
additionalHeaders
|
||||
);
|
||||
} else {
|
||||
additionalHeaders = null;
|
||||
}
|
||||
|
@ -310,14 +314,17 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
aSubject.browser.setAttribute("remote", "false");
|
||||
aSubject.browser.removeAttribute("remoteType");
|
||||
}
|
||||
Services.obs.removeObserver(handler, "geckoview-window-created");
|
||||
lazy.Services.obs.removeObserver(
|
||||
handler,
|
||||
"geckoview-window-created"
|
||||
);
|
||||
resolve(aSubject);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
// This event is emitted from createBrowser() in geckoview.js
|
||||
Services.obs.addObserver(handler, "geckoview-window-created");
|
||||
lazy.Services.obs.addObserver(handler, "geckoview-window-created");
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -329,7 +336,7 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
return null;
|
||||
}
|
||||
|
||||
const newSessionId = Services.uuid
|
||||
const newSessionId = lazy.Services.uuid
|
||||
.generateUUID()
|
||||
.toString()
|
||||
.slice(1, -1)
|
||||
|
@ -368,7 +375,7 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
);
|
||||
|
||||
// Wait indefinitely for app to respond with a browser or null
|
||||
Services.tm.spinEventLoopUntil(
|
||||
lazy.Services.tm.spinEventLoopUntil(
|
||||
"GeckoViewNavigation.jsm:handleNewSession",
|
||||
() => this.window.closed || browser !== undefined
|
||||
);
|
||||
|
@ -388,7 +395,7 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
where=${aWhere} flags=${aFlags}`;
|
||||
|
||||
if (
|
||||
LoadURIDelegate.load(
|
||||
lazy.LoadURIDelegate.load(
|
||||
this.window,
|
||||
this.eventDispatcher,
|
||||
aUri,
|
||||
|
@ -428,7 +435,7 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
}
|
||||
|
||||
if (
|
||||
LoadURIDelegate.load(
|
||||
lazy.LoadURIDelegate.load(
|
||||
this.window,
|
||||
this.eventDispatcher,
|
||||
aUri,
|
||||
|
@ -471,7 +478,7 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
where=${where} flags=${flags}`;
|
||||
|
||||
if (
|
||||
LoadURIDelegate.load(
|
||||
lazy.LoadURIDelegate.load(
|
||||
this.window,
|
||||
this.eventDispatcher,
|
||||
uri,
|
||||
|
@ -564,8 +571,8 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
serializePermission({ type, capability, principal }) {
|
||||
const { URI, originAttributes, privateBrowsingId } = principal;
|
||||
return {
|
||||
uri: Services.io.createExposableURI(URI).displaySpec,
|
||||
principal: E10SUtils.serializePrincipal(principal),
|
||||
uri: lazy.Services.io.createExposableURI(URI).displaySpec,
|
||||
principal: lazy.E10SUtils.serializePrincipal(principal),
|
||||
perm: type,
|
||||
value: capability,
|
||||
contextId: originAttributes.geckoViewSessionContextId,
|
||||
|
@ -580,7 +587,7 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
let fixedURI = aLocationURI;
|
||||
|
||||
try {
|
||||
fixedURI = Services.io.createExposableURI(aLocationURI);
|
||||
fixedURI = lazy.Services.io.createExposableURI(aLocationURI);
|
||||
} catch (ex) {}
|
||||
|
||||
// We manually fire the initial about:blank messages to make sure that we
|
||||
|
@ -595,7 +602,7 @@ class GeckoViewNavigation extends GeckoViewModule {
|
|||
const { contentPrincipal } = this.browser;
|
||||
let permissions;
|
||||
if (contentPrincipal) {
|
||||
const rawPerms = Services.perms.getAllForPrincipal(contentPrincipal);
|
||||
const rawPerms = lazy.Services.perms.getAllForPrincipal(contentPrincipal);
|
||||
permissions = rawPerms.map(this.serializePermission);
|
||||
|
||||
// The only way for apps to set permissions is to get hold of an existing
|
||||
|
|
|
@ -14,7 +14,9 @@ const { XPCOMUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/XPCOMUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
});
|
||||
|
||||
|
@ -55,14 +57,14 @@ class GeckoViewProcessHangMonitor extends GeckoViewModule {
|
|||
|
||||
onInit() {
|
||||
debug`onInit`;
|
||||
Services.obs.addObserver(this, "process-hang-report");
|
||||
Services.obs.addObserver(this, "clear-hang-report");
|
||||
lazy.Services.obs.addObserver(this, "process-hang-report");
|
||||
lazy.Services.obs.addObserver(this, "clear-hang-report");
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
debug`onDestroy`;
|
||||
Services.obs.removeObserver(this, "process-hang-report");
|
||||
Services.obs.removeObserver(this, "clear-hang-report");
|
||||
lazy.Services.obs.removeObserver(this, "process-hang-report");
|
||||
lazy.Services.obs.removeObserver(this, "clear-hang-report");
|
||||
}
|
||||
|
||||
onEnable() {
|
||||
|
@ -123,7 +125,9 @@ class GeckoViewProcessHangMonitor extends GeckoViewModule {
|
|||
*/
|
||||
get WAIT_EXPIRATION_TIME() {
|
||||
try {
|
||||
return Services.prefs.getIntPref("browser.hangNotification.waitPeriod");
|
||||
return lazy.Services.prefs.getIntPref(
|
||||
"browser.hangNotification.waitPeriod"
|
||||
);
|
||||
} catch (ex) {
|
||||
return 10000;
|
||||
}
|
||||
|
|
|
@ -14,21 +14,23 @@ const { XPCOMUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/XPCOMUtils.jsm"
|
||||
);
|
||||
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(
|
||||
this,
|
||||
lazy,
|
||||
"OverrideService",
|
||||
"@mozilla.org/security/certoverride;1",
|
||||
"nsICertOverrideService"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(
|
||||
this,
|
||||
lazy,
|
||||
"IDNService",
|
||||
"@mozilla.org/network/idn-service;1",
|
||||
"nsIIDNService"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
BrowserTelemetryUtils: "resource://gre/modules/BrowserTelemetryUtils.jsm",
|
||||
HistogramStopwatch: "resource://gre/modules/GeckoViewTelemetry.jsm",
|
||||
});
|
||||
|
@ -140,7 +142,7 @@ var IdentityHandler = {
|
|||
} catch (e) {}
|
||||
|
||||
try {
|
||||
result.host = IDNService.convertToDisplayIDN(uri.host, {});
|
||||
result.host = lazy.IDNService.convertToDisplayIDN(uri.host, {});
|
||||
} catch (e) {
|
||||
result.host = uri.host;
|
||||
}
|
||||
|
@ -150,7 +152,7 @@ var IdentityHandler = {
|
|||
result.certificate = aBrowser.securityUI.secInfo.serverCert.getBase64DERString();
|
||||
|
||||
try {
|
||||
result.securityException = OverrideService.hasMatchingOverride(
|
||||
result.securityException = lazy.OverrideService.hasMatchingOverride(
|
||||
uri.host,
|
||||
uri.port,
|
||||
{},
|
||||
|
@ -188,9 +190,12 @@ class ProgressTracker extends Tracker {
|
|||
constructor(aModule) {
|
||||
super(aModule);
|
||||
const window = aModule.browser.ownerGlobal;
|
||||
this.pageLoadProbe = new HistogramStopwatch("GV_PAGE_LOAD_MS", window);
|
||||
this.pageReloadProbe = new HistogramStopwatch("GV_PAGE_RELOAD_MS", window);
|
||||
this.pageLoadProgressProbe = new HistogramStopwatch(
|
||||
this.pageLoadProbe = new lazy.HistogramStopwatch("GV_PAGE_LOAD_MS", window);
|
||||
this.pageReloadProbe = new lazy.HistogramStopwatch(
|
||||
"GV_PAGE_RELOAD_MS",
|
||||
window
|
||||
);
|
||||
this.pageLoadProgressProbe = new lazy.HistogramStopwatch(
|
||||
"GV_PAGE_LOAD_PROGRESS_MS",
|
||||
window
|
||||
);
|
||||
|
@ -440,7 +445,7 @@ class StateTracker extends Tracker {
|
|||
success: aIsSuccess,
|
||||
});
|
||||
|
||||
BrowserTelemetryUtils.recordSiteOriginTelemetry(
|
||||
lazy.BrowserTelemetryUtils.recordSiteOriginTelemetry(
|
||||
Services.wm.getEnumerator("navigator:geckoview"),
|
||||
true
|
||||
);
|
||||
|
|
|
@ -14,8 +14,10 @@ const { XPCOMUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/XPCOMUtils.jsm"
|
||||
);
|
||||
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(
|
||||
this,
|
||||
lazy,
|
||||
"PushNotifier",
|
||||
"@mozilla.org/push/Notifier;1",
|
||||
"nsIPushNotifier"
|
||||
|
@ -52,7 +54,7 @@ const GeckoViewPushController = {
|
|||
}
|
||||
|
||||
if (!data) {
|
||||
PushNotifier.notifyPush(url, principal, "");
|
||||
lazy.PushNotifier.notifyPush(url, principal, "");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -60,7 +62,7 @@ const GeckoViewPushController = {
|
|||
ChromeUtils.base64URLDecode(data, { padding: "ignore" })
|
||||
);
|
||||
|
||||
PushNotifier.notifyPushWithData(url, principal, "", payload);
|
||||
lazy.PushNotifier.notifyPushWithData(url, principal, "", payload);
|
||||
break;
|
||||
}
|
||||
case "GeckoView:PushSubscriptionChanged": {
|
||||
|
@ -68,7 +70,7 @@ const GeckoViewPushController = {
|
|||
|
||||
const [url, principal] = createScopeAndPrincipal(scope);
|
||||
|
||||
PushNotifier.notifySubscriptionChange(url, principal);
|
||||
lazy.PushNotifier.notifySubscriptionChange(url, principal);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,24 +13,26 @@ const { GeckoViewUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/GeckoViewUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "require", () => {
|
||||
XPCOMUtils.defineLazyGetter(lazy, "require", () => {
|
||||
const { require } = ChromeUtils.import(
|
||||
"resource://devtools/shared/loader/Loader.jsm"
|
||||
);
|
||||
return require;
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "DevToolsServer", () => {
|
||||
const { DevToolsServer } = require("devtools/server/devtools-server");
|
||||
XPCOMUtils.defineLazyGetter(lazy, "DevToolsServer", () => {
|
||||
const { DevToolsServer } = lazy.require("devtools/server/devtools-server");
|
||||
return DevToolsServer;
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "SocketListener", () => {
|
||||
const { SocketListener } = require("devtools/shared/security/socket");
|
||||
XPCOMUtils.defineLazyGetter(lazy, "SocketListener", () => {
|
||||
const { SocketListener } = lazy.require("devtools/shared/security/socket");
|
||||
return SocketListener;
|
||||
});
|
||||
|
||||
|
@ -42,7 +44,7 @@ var GeckoViewRemoteDebugger = {
|
|||
return;
|
||||
}
|
||||
|
||||
if (Services.prefs.getBoolPref(aData, false)) {
|
||||
if (lazy.Services.prefs.getBoolPref(aData, false)) {
|
||||
this.onEnable();
|
||||
} else {
|
||||
this.onDisable();
|
||||
|
@ -61,16 +63,16 @@ var GeckoViewRemoteDebugger = {
|
|||
}
|
||||
|
||||
debug`onEnable`;
|
||||
DevToolsServer.init();
|
||||
DevToolsServer.registerAllActors();
|
||||
const {
|
||||
createRootActor,
|
||||
} = require("resource://gre/modules/dbg-browser-actors.js");
|
||||
DevToolsServer.setRootActor(createRootActor);
|
||||
DevToolsServer.allowChromeProcess = true;
|
||||
DevToolsServer.chromeWindowType = "navigator:geckoview";
|
||||
lazy.DevToolsServer.init();
|
||||
lazy.DevToolsServer.registerAllActors();
|
||||
const { createRootActor } = lazy.require(
|
||||
"resource://gre/modules/dbg-browser-actors.js"
|
||||
);
|
||||
lazy.DevToolsServer.setRootActor(createRootActor);
|
||||
lazy.DevToolsServer.allowChromeProcess = true;
|
||||
lazy.DevToolsServer.chromeWindowType = "navigator:geckoview";
|
||||
// Force the Server to stay alive even if there are no connections at the moment.
|
||||
DevToolsServer.keepAlive = true;
|
||||
lazy.DevToolsServer.keepAlive = true;
|
||||
|
||||
// Socket address for USB remote debugger expects
|
||||
// @ANDROID_PACKAGE_NAME/firefox-debugger-socket.
|
||||
|
@ -110,14 +112,19 @@ var GeckoViewRemoteDebugger = {
|
|||
class USBRemoteDebugger {
|
||||
start(aPortOrPath) {
|
||||
try {
|
||||
const AuthenticatorType = DevToolsServer.Authenticators.get("PROMPT");
|
||||
const AuthenticatorType = lazy.DevToolsServer.Authenticators.get(
|
||||
"PROMPT"
|
||||
);
|
||||
const authenticator = new AuthenticatorType.Server();
|
||||
authenticator.allowConnection = this.allowConnection.bind(this);
|
||||
const socketOptions = {
|
||||
authenticator,
|
||||
portOrPath: aPortOrPath,
|
||||
};
|
||||
this._listener = new SocketListener(DevToolsServer, socketOptions);
|
||||
this._listener = new lazy.SocketListener(
|
||||
lazy.DevToolsServer,
|
||||
socketOptions
|
||||
);
|
||||
this._listener.open();
|
||||
debug`USB remote debugger - listening on ${aPortOrPath}`;
|
||||
} catch (e) {
|
||||
|
@ -140,12 +147,12 @@ class USBRemoteDebugger {
|
|||
|
||||
allowConnection(aSession) {
|
||||
if (!this._listener) {
|
||||
return DevToolsServer.AuthenticationResult.DENY;
|
||||
return lazy.DevToolsServer.AuthenticationResult.DENY;
|
||||
}
|
||||
|
||||
if (aSession.server.port) {
|
||||
return DevToolsServer.AuthenticationResult.DENY;
|
||||
return lazy.DevToolsServer.AuthenticationResult.DENY;
|
||||
}
|
||||
return DevToolsServer.AuthenticationResult.ALLOW;
|
||||
return lazy.DevToolsServer.AuthenticationResult.ALLOW;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,9 @@ const { XPCOMUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/XPCOMUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
});
|
||||
|
||||
|
|
|
@ -14,25 +14,27 @@ const { XPCOMUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/XPCOMUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "MOBILE_USER_AGENT", function() {
|
||||
XPCOMUtils.defineLazyGetter(lazy, "MOBILE_USER_AGENT", function() {
|
||||
return Cc["@mozilla.org/network/protocol;1?name=http"].getService(
|
||||
Ci.nsIHttpProtocolHandler
|
||||
).userAgent;
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "DESKTOP_USER_AGENT", function() {
|
||||
return MOBILE_USER_AGENT.replace(
|
||||
XPCOMUtils.defineLazyGetter(lazy, "DESKTOP_USER_AGENT", function() {
|
||||
return lazy.MOBILE_USER_AGENT.replace(
|
||||
/Android \d.+?; [a-zA-Z]+/,
|
||||
"X11; Linux x86_64"
|
||||
).replace(/Gecko\/[0-9\.]+/, "Gecko/20100101");
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "VR_USER_AGENT", function() {
|
||||
return MOBILE_USER_AGENT.replace(/Mobile/, "Mobile VR");
|
||||
XPCOMUtils.defineLazyGetter(lazy, "VR_USER_AGENT", function() {
|
||||
return lazy.MOBILE_USER_AGENT.replace(/Mobile/, "Mobile VR");
|
||||
});
|
||||
|
||||
// This needs to match GeckoSessionSettings.java
|
||||
|
@ -62,7 +64,7 @@ class GeckoViewSettings extends GeckoViewModule {
|
|||
|
||||
switch (aEvent) {
|
||||
case "GeckoView:GetUserAgent": {
|
||||
aCallback.onSuccess(this.customUserAgent ?? MOBILE_USER_AGENT);
|
||||
aCallback.onSuccess(this.customUserAgent ?? lazy.MOBILE_USER_AGENT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -101,10 +103,10 @@ class GeckoViewSettings extends GeckoViewModule {
|
|||
return this.userAgentOverride;
|
||||
}
|
||||
if (this.userAgentMode === USER_AGENT_MODE_DESKTOP) {
|
||||
return DESKTOP_USER_AGENT;
|
||||
return lazy.DESKTOP_USER_AGENT;
|
||||
}
|
||||
if (this.userAgentMode === USER_AGENT_MODE_VR) {
|
||||
return VR_USER_AGENT;
|
||||
return lazy.VR_USER_AGENT;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -18,7 +18,9 @@ const { ExtensionUtils } = ChromeUtils.import(
|
|||
|
||||
const { ExtensionError } = ExtensionUtils;
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
EventDispatcher: "resource://gre/modules/Messaging.jsm",
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
mobileWindowTracker: "resource://gre/modules/GeckoViewWebExtension.jsm",
|
||||
|
@ -86,7 +88,7 @@ const GeckoViewTabBridge = {
|
|||
debug`openOptionsPage for extensionId ${extensionId}`;
|
||||
|
||||
try {
|
||||
await EventDispatcher.instance.sendRequestForResult({
|
||||
await lazy.EventDispatcher.instance.sendRequestForResult({
|
||||
type: "GeckoView:WebExtension:OpenOptionsPage",
|
||||
extensionId,
|
||||
});
|
||||
|
@ -115,7 +117,7 @@ const GeckoViewTabBridge = {
|
|||
async createNewTab({ extensionId, createProperties } = {}) {
|
||||
debug`createNewTab`;
|
||||
|
||||
const newSessionId = Services.uuid
|
||||
const newSessionId = lazy.Services.uuid
|
||||
.generateUUID()
|
||||
.toString()
|
||||
.slice(1, -1)
|
||||
|
@ -130,22 +132,27 @@ const GeckoViewTabBridge = {
|
|||
aTopic === "geckoview-window-created" &&
|
||||
aSubject.name === newSessionId
|
||||
) {
|
||||
Services.obs.removeObserver(handler, "geckoview-window-created");
|
||||
lazy.Services.obs.removeObserver(
|
||||
handler,
|
||||
"geckoview-window-created"
|
||||
);
|
||||
resolve(aSubject);
|
||||
}
|
||||
},
|
||||
};
|
||||
Services.obs.addObserver(handler, "geckoview-window-created");
|
||||
lazy.Services.obs.addObserver(handler, "geckoview-window-created");
|
||||
});
|
||||
|
||||
let didOpenSession = false;
|
||||
try {
|
||||
didOpenSession = await EventDispatcher.instance.sendRequestForResult({
|
||||
type: "GeckoView:WebExtension:NewTab",
|
||||
extensionId,
|
||||
createProperties,
|
||||
newSessionId,
|
||||
});
|
||||
didOpenSession = await lazy.EventDispatcher.instance.sendRequestForResult(
|
||||
{
|
||||
type: "GeckoView:WebExtension:NewTab",
|
||||
extensionId,
|
||||
createProperties,
|
||||
newSessionId,
|
||||
}
|
||||
);
|
||||
} catch (errorMessage) {
|
||||
// The error message coming from GeckoView is about :NewTab not being
|
||||
// registered so we need to have one that's extension friendly here.
|
||||
|
@ -216,7 +223,7 @@ class GeckoViewTab extends GeckoViewModule {
|
|||
switch (aEvent) {
|
||||
case "GeckoView:WebExtension:SetTabActive": {
|
||||
const { active } = aData;
|
||||
mobileWindowTracker.setTabActive(this.window, active);
|
||||
lazy.mobileWindowTracker.setTabActive(this.window, active);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,9 @@ const { XPCOMUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/XPCOMUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
AndroidLog: "resource://gre/modules/AndroidLog.jsm",
|
||||
EventDispatcher: "resource://gre/modules/Messaging.jsm",
|
||||
Log: "resource://gre/modules/Log.jsm",
|
||||
|
@ -20,7 +22,7 @@ var EXPORTED_SYMBOLS = ["GeckoViewUtils"];
|
|||
* A formatter that does not prepend time/name/level information to messages,
|
||||
* because those fields are logged separately when using the Android logger.
|
||||
*/
|
||||
class AndroidFormatter extends Log.BasicFormatter {
|
||||
class AndroidFormatter extends lazy.Log.BasicFormatter {
|
||||
format(message) {
|
||||
return this.formatText(message);
|
||||
}
|
||||
|
@ -30,20 +32,20 @@ class AndroidFormatter extends Log.BasicFormatter {
|
|||
* AndroidAppender
|
||||
* Logs to Android logcat using AndroidLog.jsm
|
||||
*/
|
||||
class AndroidAppender extends Log.Appender {
|
||||
class AndroidAppender extends lazy.Log.Appender {
|
||||
constructor(aFormatter) {
|
||||
super(aFormatter || new AndroidFormatter());
|
||||
this._name = "AndroidAppender";
|
||||
|
||||
// Map log level to AndroidLog.foo method.
|
||||
this._mapping = {
|
||||
[Log.Level.Fatal]: "e",
|
||||
[Log.Level.Error]: "e",
|
||||
[Log.Level.Warn]: "w",
|
||||
[Log.Level.Info]: "i",
|
||||
[Log.Level.Config]: "d",
|
||||
[Log.Level.Debug]: "d",
|
||||
[Log.Level.Trace]: "v",
|
||||
[lazy.Log.Level.Fatal]: "e",
|
||||
[lazy.Log.Level.Error]: "e",
|
||||
[lazy.Log.Level.Warn]: "w",
|
||||
[lazy.Log.Level.Info]: "i",
|
||||
[lazy.Log.Level.Config]: "d",
|
||||
[lazy.Log.Level.Debug]: "d",
|
||||
[lazy.Log.Level.Trace]: "v",
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -56,7 +58,7 @@ class AndroidAppender extends Log.Appender {
|
|||
// leading "Gecko" here. Also strip dots to save space.
|
||||
const tag = aMessage.loggerName.replace(/^Gecko|\./g, "");
|
||||
const msg = this._formatter.format(aMessage);
|
||||
AndroidLog[this._mapping[aMessage.level]](tag, msg);
|
||||
lazy.AndroidLog[this._mapping[aMessage.level]](tag, msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -109,13 +111,15 @@ var GeckoViewUtils = {
|
|||
|
||||
if (observers) {
|
||||
const observer = (subject, topic, data) => {
|
||||
Services.obs.removeObserver(observer, topic);
|
||||
lazy.Services.obs.removeObserver(observer, topic);
|
||||
if (!once) {
|
||||
Services.obs.addObserver(scope[name], topic);
|
||||
lazy.Services.obs.addObserver(scope[name], topic);
|
||||
}
|
||||
scope[name].observe(subject, topic, data); // Explicitly notify new observer
|
||||
};
|
||||
observers.forEach(topic => Services.obs.addObserver(observer, topic));
|
||||
observers.forEach(topic =>
|
||||
lazy.Services.obs.addObserver(observer, topic)
|
||||
);
|
||||
}
|
||||
|
||||
if (!this.IS_PARENT_PROCESS) {
|
||||
|
@ -134,21 +138,21 @@ var GeckoViewUtils = {
|
|||
names.forEach(msg => target.addMessageListener(msg, listener));
|
||||
};
|
||||
if (ppmm) {
|
||||
addMMListener(Services.ppmm, ppmm);
|
||||
addMMListener(lazy.Services.ppmm, ppmm);
|
||||
}
|
||||
if (mm) {
|
||||
addMMListener(Services.mm, mm);
|
||||
addMMListener(lazy.Services.mm, mm);
|
||||
}
|
||||
|
||||
if (ged) {
|
||||
const listener = (event, data, callback) => {
|
||||
EventDispatcher.instance.unregisterListener(listener, event);
|
||||
lazy.EventDispatcher.instance.unregisterListener(listener, event);
|
||||
if (!once) {
|
||||
EventDispatcher.instance.registerListener(scope[name], event);
|
||||
lazy.EventDispatcher.instance.registerListener(scope[name], event);
|
||||
}
|
||||
scope[name].onEvent(event, data, callback);
|
||||
};
|
||||
EventDispatcher.instance.registerListener(listener, ged);
|
||||
lazy.EventDispatcher.instance.registerListener(listener, ged);
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -234,7 +238,9 @@ var GeckoViewUtils = {
|
|||
scope,
|
||||
name,
|
||||
(prefs, observer) => {
|
||||
prefs.forEach(pref => Services.prefs.addObserver(pref.name, observer));
|
||||
prefs.forEach(pref =>
|
||||
lazy.Services.prefs.addObserver(pref.name, observer)
|
||||
);
|
||||
prefs.forEach(pref => {
|
||||
if (pref.default === undefined) {
|
||||
return;
|
||||
|
@ -242,26 +248,26 @@ var GeckoViewUtils = {
|
|||
let value;
|
||||
switch (typeof pref.default) {
|
||||
case "string":
|
||||
value = Services.prefs.getCharPref(pref.name, pref.default);
|
||||
value = lazy.Services.prefs.getCharPref(pref.name, pref.default);
|
||||
break;
|
||||
case "number":
|
||||
value = Services.prefs.getIntPref(pref.name, pref.default);
|
||||
value = lazy.Services.prefs.getIntPref(pref.name, pref.default);
|
||||
break;
|
||||
case "boolean":
|
||||
value = Services.prefs.getBoolPref(pref.name, pref.default);
|
||||
value = lazy.Services.prefs.getBoolPref(pref.name, pref.default);
|
||||
break;
|
||||
}
|
||||
if (pref.default !== value) {
|
||||
// Notify observer if value already changed from default.
|
||||
observer(Services.prefs, "nsPref:changed", pref.name);
|
||||
observer(lazy.Services.prefs, "nsPref:changed", pref.name);
|
||||
}
|
||||
});
|
||||
},
|
||||
(handlers, observer, args) => {
|
||||
if (!once) {
|
||||
Services.prefs.removeObserver(args[2], observer);
|
||||
lazy.Services.prefs.removeObserver(args[2], observer);
|
||||
handlers.forEach(handler =>
|
||||
Services.prefs.addObserver(args[2], observer)
|
||||
lazy.Services.prefs.addObserver(args[2], observer)
|
||||
);
|
||||
}
|
||||
handlers.forEach(handler => handler.observe(...args));
|
||||
|
@ -314,11 +320,11 @@ var GeckoViewUtils = {
|
|||
try {
|
||||
if (!this.IS_PARENT_PROCESS) {
|
||||
const mm = this.getContentFrameMessageManager(aWin.top || aWin);
|
||||
return mm && EventDispatcher.forMessageManager(mm);
|
||||
return mm && lazy.EventDispatcher.forMessageManager(mm);
|
||||
}
|
||||
const win = this.getChromeWindow(aWin.top || aWin);
|
||||
if (!win.closed) {
|
||||
return win.WindowEventDispatcher || EventDispatcher.for(win);
|
||||
return win.WindowEventDispatcher || lazy.EventDispatcher.for(win);
|
||||
}
|
||||
} catch (e) {}
|
||||
return null;
|
||||
|
@ -356,7 +362,7 @@ var GeckoViewUtils = {
|
|||
this._log(log.logger, level, strings, exprs);
|
||||
|
||||
XPCOMUtils.defineLazyGetter(log, "logger", _ => {
|
||||
const logger = Log.repository.getLogger(tag);
|
||||
const logger = lazy.Log.repository.getLogger(tag);
|
||||
logger.parent = this.rootLogger;
|
||||
return logger;
|
||||
});
|
||||
|
@ -370,7 +376,7 @@ var GeckoViewUtils = {
|
|||
|
||||
get rootLogger() {
|
||||
if (!this._rootLogger) {
|
||||
this._rootLogger = Log.repository.getLogger("GeckoView");
|
||||
this._rootLogger = lazy.Log.repository.getLogger("GeckoView");
|
||||
this._rootLogger.addAppender(new AndroidAppender());
|
||||
this._rootLogger.manageLevelFromPref("geckoview.logging");
|
||||
}
|
||||
|
@ -387,7 +393,7 @@ var GeckoViewUtils = {
|
|||
);
|
||||
}
|
||||
|
||||
if (aLogger.level > Log.Level.Numbers[aLevel]) {
|
||||
if (aLogger.level > lazy.Log.Level.Numbers[aLevel]) {
|
||||
// Log disabled.
|
||||
return;
|
||||
}
|
||||
|
@ -432,5 +438,7 @@ var GeckoViewUtils = {
|
|||
XPCOMUtils.defineLazyGetter(
|
||||
GeckoViewUtils,
|
||||
"IS_PARENT_PROCESS",
|
||||
_ => Services.appinfo.processType == Services.appinfo.PROCESS_TYPE_DEFAULT
|
||||
_ =>
|
||||
lazy.Services.appinfo.processType ==
|
||||
lazy.Services.appinfo.PROCESS_TYPE_DEFAULT
|
||||
);
|
||||
|
|
|
@ -28,7 +28,9 @@ const PRIVATE_BROWSING_PERMISSION = {
|
|||
origins: [],
|
||||
};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
AddonManager: "resource://gre/modules/AddonManager.jsm",
|
||||
EventDispatcher: "resource://gre/modules/Messaging.jsm",
|
||||
Extension: "resource://gre/modules/Extension.jsm",
|
||||
|
@ -40,7 +42,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
|
|||
});
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(
|
||||
this,
|
||||
lazy,
|
||||
"mimeService",
|
||||
"@mozilla.org/mime;1",
|
||||
"nsIMIMEService"
|
||||
|
@ -134,10 +136,10 @@ class ExtensionActionHelper {
|
|||
|
||||
eventDispatcherFor(aTabId) {
|
||||
if (!aTabId) {
|
||||
return EventDispatcher.instance;
|
||||
return lazy.EventDispatcher.instance;
|
||||
}
|
||||
|
||||
const windowId = GeckoViewTabBridge.tabIdToWindowId(aTabId);
|
||||
const windowId = lazy.GeckoViewTabBridge.tabIdToWindowId(aTabId);
|
||||
const window = this.windowTracker.getWindow(windowId);
|
||||
return window.WindowEventDispatcher;
|
||||
}
|
||||
|
@ -155,7 +157,7 @@ class EmbedderPort {
|
|||
constructor(portId, messenger) {
|
||||
this.id = portId;
|
||||
this.messenger = messenger;
|
||||
this.dispatcher = EventDispatcher.byName(`port:${portId}`);
|
||||
this.dispatcher = lazy.EventDispatcher.byName(`port:${portId}`);
|
||||
this.dispatcher.registerListener(this, [
|
||||
"GeckoView:WebExtension:PortMessageFromApp",
|
||||
"GeckoView:WebExtension:PortDisconnect",
|
||||
|
@ -224,7 +226,7 @@ class GeckoViewConnection {
|
|||
|
||||
// No dispatcher means this message is coming from a background script,
|
||||
// use the global event handler
|
||||
return EventDispatcher.instance;
|
||||
return lazy.EventDispatcher.instance;
|
||||
} else if (
|
||||
this.sender.envType === "content_child" &&
|
||||
this.allowContentMessaging
|
||||
|
@ -277,7 +279,7 @@ async function filterPromptPermissions(aPermissions) {
|
|||
}
|
||||
const promptPermissions = [];
|
||||
for (const permission of aPermissions) {
|
||||
if (!(await Extension.shouldPromptFor(permission))) {
|
||||
if (!(await lazy.Extension.shouldPromptFor(permission))) {
|
||||
continue;
|
||||
}
|
||||
promptPermissions.push(permission);
|
||||
|
@ -333,7 +335,8 @@ async function exportExtension(aAddon, aPermissions, aSourceURI) {
|
|||
creatorName = name;
|
||||
creatorURL = url;
|
||||
}
|
||||
const openOptionsPageInTab = optionsType === AddonManager.OPTIONS_TYPE_TAB;
|
||||
const openOptionsPageInTab =
|
||||
optionsType === lazy.AddonManager.OPTIONS_TYPE_TAB;
|
||||
const disabledFlags = [];
|
||||
if (userDisabled) {
|
||||
disabledFlags.push("userDisabled");
|
||||
|
@ -384,11 +387,11 @@ class ExtensionInstallListener {
|
|||
this.installId = aInstallId;
|
||||
this.resolve = result => {
|
||||
aResolve(result);
|
||||
EventDispatcher.instance.unregisterListener(this, [
|
||||
lazy.EventDispatcher.instance.unregisterListener(this, [
|
||||
"GeckoView:WebExtension:CancelInstall",
|
||||
]);
|
||||
};
|
||||
EventDispatcher.instance.registerListener(this, [
|
||||
lazy.EventDispatcher.instance.registerListener(this, [
|
||||
"GeckoView:WebExtension:CancelInstall",
|
||||
]);
|
||||
}
|
||||
|
@ -471,7 +474,7 @@ class ExtensionInstallListener {
|
|||
if (id != addonId) {
|
||||
return;
|
||||
}
|
||||
Management.off("ready", onReady);
|
||||
lazy.Management.off("ready", onReady);
|
||||
const extension = await exportExtension(
|
||||
aAddon,
|
||||
aAddon.userPermissions,
|
||||
|
@ -479,7 +482,7 @@ class ExtensionInstallListener {
|
|||
);
|
||||
this.resolve({ extension });
|
||||
};
|
||||
Management.on("ready", onReady);
|
||||
lazy.Management.on("ready", onReady);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -493,7 +496,7 @@ class ExtensionPromptObserver {
|
|||
const { sourceURI } = aInstall;
|
||||
const { permissions } = aInfo;
|
||||
const extension = await exportExtension(aAddon, permissions, sourceURI);
|
||||
const response = await EventDispatcher.instance.sendRequestForResult({
|
||||
const response = await lazy.EventDispatcher.instance.sendRequestForResult({
|
||||
type: "GeckoView:WebExtension:InstallPrompt",
|
||||
extension,
|
||||
});
|
||||
|
@ -506,7 +509,7 @@ class ExtensionPromptObserver {
|
|||
}
|
||||
|
||||
async optionalPermissionPrompt(aExtensionId, aPermissions, resolve) {
|
||||
const response = await EventDispatcher.instance.sendRequestForResult({
|
||||
const response = await lazy.EventDispatcher.instance.sendRequestForResult({
|
||||
type: "GeckoView:WebExtension:OptionalPrompt",
|
||||
extensionId: aExtensionId,
|
||||
permissions: aPermissions,
|
||||
|
@ -562,7 +565,7 @@ class MobileWindowTracker extends EventEmitter {
|
|||
|
||||
if (aActive) {
|
||||
this._topWindow = Cu.getWeakReference(aWindow);
|
||||
const isPrivate = PrivateBrowsingUtils.isBrowserPrivate(browser);
|
||||
const isPrivate = lazy.PrivateBrowsingUtils.isBrowserPrivate(browser);
|
||||
if (!isPrivate) {
|
||||
this._topNonPBWindow = this._topWindow;
|
||||
}
|
||||
|
@ -586,7 +589,7 @@ async function updatePromptHandler(aInfo) {
|
|||
|
||||
const newPerms = aInfo.addon.userPermissions;
|
||||
|
||||
const difference = Extension.comparePermissions(oldPerms, newPerms);
|
||||
const difference = lazy.Extension.comparePermissions(oldPerms, newPerms);
|
||||
|
||||
// We only care about permissions that we can prompt the user for
|
||||
const newPermissions = await filterPromptPermissions(difference.permissions);
|
||||
|
@ -602,7 +605,7 @@ async function updatePromptHandler(aInfo) {
|
|||
oldPerms
|
||||
);
|
||||
const updatedExtension = await exportExtension(aInfo.addon, newPerms);
|
||||
const response = await EventDispatcher.instance.sendRequestForResult({
|
||||
const response = await lazy.EventDispatcher.instance.sendRequestForResult({
|
||||
type: "GeckoView:WebExtension:UpdatePrompt",
|
||||
currentlyInstalled,
|
||||
updatedExtension,
|
||||
|
@ -625,14 +628,14 @@ var GeckoViewWebExtension = {
|
|||
// We pretend devtools installed/uninstalled this addon so we don't
|
||||
// have to add an API just for internal testing.
|
||||
// TODO: assert this is under a test
|
||||
EventDispatcher.instance.sendRequest({
|
||||
lazy.EventDispatcher.instance.sendRequest({
|
||||
type: "GeckoView:WebExtension:DebuggerListUpdated",
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case "devtools-installed-addon": {
|
||||
EventDispatcher.instance.sendRequest({
|
||||
lazy.EventDispatcher.instance.sendRequest({
|
||||
type: "GeckoView:WebExtension:DebuggerListUpdated",
|
||||
});
|
||||
break;
|
||||
|
@ -641,7 +644,7 @@ var GeckoViewWebExtension = {
|
|||
},
|
||||
|
||||
async extensionById(aId) {
|
||||
const addon = await AddonManager.getAddonByID(aId);
|
||||
const addon = await lazy.AddonManager.getAddonByID(aId);
|
||||
if (!addon) {
|
||||
debug`Could not find extension with id=${aId}`;
|
||||
return null;
|
||||
|
@ -650,11 +653,11 @@ var GeckoViewWebExtension = {
|
|||
},
|
||||
|
||||
async ensureBuiltIn(aUri, aId) {
|
||||
await AddonManager.readyPromise;
|
||||
await lazy.AddonManager.readyPromise;
|
||||
// Although the add-on is privileged in practice due to it being installed
|
||||
// as a built-in extension, we pass isPrivileged=false since the exact flag
|
||||
// doesn't matter as we are only using ExtensionData to read the version.
|
||||
const extensionData = new ExtensionData(aUri, false);
|
||||
const extensionData = new lazy.ExtensionData(aUri, false);
|
||||
const [extensionVersion, extension] = await Promise.all([
|
||||
extensionData.getExtensionVersionWithoutValidation(),
|
||||
this.extensionById(aId),
|
||||
|
@ -673,14 +676,14 @@ var GeckoViewWebExtension = {
|
|||
},
|
||||
|
||||
async installBuiltIn(aUri) {
|
||||
await AddonManager.readyPromise;
|
||||
const addon = await AddonManager.installBuiltinAddon(aUri.spec);
|
||||
await lazy.AddonManager.readyPromise;
|
||||
const addon = await lazy.AddonManager.installBuiltinAddon(aUri.spec);
|
||||
const exported = await exportExtension(addon, addon.userPermissions, aUri);
|
||||
return { extension: exported };
|
||||
},
|
||||
|
||||
async installWebExtension(aInstallId, aUri) {
|
||||
const install = await AddonManager.getInstallForURL(aUri.spec, {
|
||||
const install = await lazy.AddonManager.getInstallForURL(aUri.spec, {
|
||||
telemetryInfo: {
|
||||
source: "geckoview-app",
|
||||
},
|
||||
|
@ -692,8 +695,8 @@ var GeckoViewWebExtension = {
|
|||
});
|
||||
|
||||
const systemPrincipal = Services.scriptSecurityManager.getSystemPrincipal();
|
||||
const mimeType = mimeService.getTypeFromURI(aUri);
|
||||
AddonManager.installAddonFromWebpage(
|
||||
const mimeType = lazy.mimeService.getTypeFromURI(aUri);
|
||||
lazy.AddonManager.installAddonFromWebpage(
|
||||
mimeType,
|
||||
null,
|
||||
systemPrincipal,
|
||||
|
@ -705,9 +708,9 @@ var GeckoViewWebExtension = {
|
|||
|
||||
async setPrivateBrowsingAllowed(aId, aAllowed) {
|
||||
if (aAllowed) {
|
||||
await ExtensionPermissions.add(aId, PRIVATE_BROWSING_PERMISSION);
|
||||
await lazy.ExtensionPermissions.add(aId, PRIVATE_BROWSING_PERMISSION);
|
||||
} else {
|
||||
await ExtensionPermissions.remove(aId, PRIVATE_BROWSING_PERMISSION);
|
||||
await lazy.ExtensionPermissions.remove(aId, PRIVATE_BROWSING_PERMISSION);
|
||||
}
|
||||
|
||||
// Reload the extension if it is already enabled. This ensures any change
|
||||
|
@ -821,7 +824,10 @@ var GeckoViewWebExtension = {
|
|||
resolve(null);
|
||||
},
|
||||
};
|
||||
aAddon.findUpdates(listener, AddonManager.UPDATE_WHEN_USER_REQUESTED);
|
||||
aAddon.findUpdates(
|
||||
listener,
|
||||
lazy.AddonManager.UPDATE_WHEN_USER_REQUESTED
|
||||
);
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -1048,8 +1054,10 @@ var GeckoViewWebExtension = {
|
|||
|
||||
case "GeckoView:WebExtension:List": {
|
||||
try {
|
||||
await AddonManager.readyPromise;
|
||||
const addons = await AddonManager.getAddonsByTypes(["extension"]);
|
||||
await lazy.AddonManager.readyPromise;
|
||||
const addons = await lazy.AddonManager.getAddonsByTypes([
|
||||
"extension",
|
||||
]);
|
||||
const extensions = await Promise.all(
|
||||
addons.map(addon =>
|
||||
exportExtension(addon, addon.userPermissions, null)
|
||||
|
|
|
@ -13,7 +13,9 @@ const { GeckoViewUtils } = ChromeUtils.import(
|
|||
"resource://gre/modules/GeckoViewUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
const lazy = {};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(lazy, {
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
});
|
||||
|
||||
|
@ -51,7 +53,7 @@ const LoadURIDelegate = {
|
|||
handled = false;
|
||||
}
|
||||
);
|
||||
Services.tm.spinEventLoopUntil(
|
||||
lazy.Services.tm.spinEventLoopUntil(
|
||||
"LoadURIDelegate.jsm:load",
|
||||
() => aWindow.closed || handled !== undefined
|
||||
);
|
||||
|
@ -80,7 +82,7 @@ const LoadURIDelegate = {
|
|||
aEventDispatcher.sendRequestForResult(msg).then(
|
||||
response => {
|
||||
try {
|
||||
errorPageURI = response ? Services.io.newURI(response) : null;
|
||||
errorPageURI = response ? lazy.Services.io.newURI(response) : null;
|
||||
} catch (e) {
|
||||
warn`Failed to parse URI '${response}`;
|
||||
errorPageURI = null;
|
||||
|
@ -92,7 +94,7 @@ const LoadURIDelegate = {
|
|||
Components.returnCode = Cr.NS_ERROR_ABORT;
|
||||
}
|
||||
);
|
||||
Services.tm.spinEventLoopUntil(
|
||||
lazy.Services.tm.spinEventLoopUntil(
|
||||
"LoadURIDelegate.jsm:handleLoadError",
|
||||
() => aWindow.closed || errorPageURI !== undefined
|
||||
);
|
||||
|
|
Загрузка…
Ссылка в новой задаче