Bug 1462673 - Only load LightWeightThemeWebInstallListener when necessary. r=mconley
Convert LightWeightThemeWebInstallListener to a singleton, and add it as a lazy proxy listener.
MozReview-Commit-ID: EjCyax3sByX
--- a/browser/base/content/content.js
+++ b/browser/base/content/content.js
@@ -48,16 +48,19 @@ XPCOMUtils.defineLazyProxy(this, "contex
XPCOMUtils.defineLazyProxy(this, "formSubmitObserver", () => {
return new FormSubmitObserver(content, this);
}, { QueryInterface: ChromeUtils.generateQI([Ci.nsIFormSubmitObserver, Ci.nsISupportsWeakReference])});
XPCOMUtils.defineLazyProxy(this, "PageInfoListener",
"resource:///modules/PageInfoListener-content.jsm");
+XPCOMUtils.defineLazyProxy(this, "LightWeightThemeWebInstallListener",
+ "resource:///modules/LightWeightThemeWebInstallListener.jsm");
+
Services.els.addSystemEventListener(global, "contextmenu", contextMenu, false);
Services.obs.addObserver(formSubmitObserver, "invalidformsubmit", true);
addMessageListener("PageInfo:getData", PageInfoListener);
addMessageListener("RemoteLogins:fillForm", function(message) {
// intercept if ContextMenu.jsm had sent a plain object for remote targets
@@ -1005,16 +1008,20 @@ PageMetadataMessenger.init();
addMessageListener("Bookmarks:GetPageDetails", (message) => {
let doc = content.document;
let isErrorPage = /^about:(neterror|certerror|blocked)/.test(doc.documentURI);
sendAsyncMessage("Bookmarks:GetPageDetails:Result",
{ isErrorPage,
description: PlacesUIUtils.getDescriptionFromDocument(doc) });
});
+addEventListener("InstallBrowserTheme", LightWeightThemeWebInstallListener, false, true);
+addEventListener("PreviewBrowserTheme", LightWeightThemeWebInstallListener, false, true);
+addEventListener("ResetBrowserThemePreview", LightWeightThemeWebInstallListener, false, true);
+
let OfflineApps = {
_docId: 0,
_docIdMap: new Map(),
_docManifestSet: new Set(),
_observerAdded: false,
registerWindow(aWindow) {
--- a/browser/modules/LightWeightThemeWebInstallListener.jsm
+++ b/browser/modules/LightWeightThemeWebInstallListener.jsm
@@ -1,56 +1,59 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+var EXPORTED_SYMBOLS = ["LightWeightThemeWebInstallListener"];
+
var LightWeightThemeWebInstallListener = {
_previewWindow: null,
- init() {
- addEventListener("InstallBrowserTheme", this, false, true);
- addEventListener("PreviewBrowserTheme", this, false, true);
- addEventListener("ResetBrowserThemePreview", this, false, true);
- },
-
handleEvent(event) {
+ let mm = getMessageManagerForContent(event.target.ownerGlobal);
switch (event.type) {
case "InstallBrowserTheme": {
- sendAsyncMessage("LightWeightThemeWebInstaller:Install", {
+ mm.sendAsyncMessage("LightWeightThemeWebInstaller:Install", {
baseURI: event.target.baseURI,
principal: event.target.nodePrincipal,
themeData: event.target.getAttribute("data-browsertheme"),
});
break;
}
case "PreviewBrowserTheme": {
- sendAsyncMessage("LightWeightThemeWebInstaller:Preview", {
+ mm.sendAsyncMessage("LightWeightThemeWebInstaller:Preview", {
baseURI: event.target.baseURI,
principal: event.target.nodePrincipal,
themeData: event.target.getAttribute("data-browsertheme"),
});
this._previewWindow = event.target.ownerGlobal;
this._previewWindow.addEventListener("pagehide", this, true);
break;
}
case "pagehide": {
- sendAsyncMessage("LightWeightThemeWebInstaller:ResetPreview");
+ mm.sendAsyncMessage("LightWeightThemeWebInstaller:ResetPreview");
this._resetPreviewWindow();
break;
}
case "ResetBrowserThemePreview": {
if (this._previewWindow) {
- sendAsyncMessage("LightWeightThemeWebInstaller:ResetPreview",
+ mm.sendAsyncMessage("LightWeightThemeWebInstaller:ResetPreview",
{principal: event.target.nodePrincipal});
this._resetPreviewWindow();
}
break;
}
}
},
_resetPreviewWindow() {
this._previewWindow.removeEventListener("pagehide", this, true);
this._previewWindow = null;
}
};
-LightWeightThemeWebInstallListener.init();
+function getMessageManagerForContent(content) {
+ return content.QueryInterface(Ci.nsIInterfaceRequestor)
+ .getInterface(Ci.nsIDocShell)
+ .sameTypeRootTreeItem
+ .QueryInterface(Ci.nsIInterfaceRequestor)
+ .getInterface(Ci.nsIContentFrameMessageManager);
+}