Bug 1462673 - Only load LightWeightThemeWebInstallListener when necessary. r=mconley draft
authorFelipe Gomes <felipc@gmail.com>
Fri, 18 May 2018 11:55:30 -0300
changeset 796912 8f974eeb0af70ff3e653ec6f28fb54950d68276f
parent 796911 1dba41f5810b8726a45d8dd563add61a87be4e20
push id110392
push userfelipc@gmail.com
push dateFri, 18 May 2018 14:56:01 +0000
reviewersmconley
bugs1462673
milestone62.0a1
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
browser/base/content/content.js
browser/modules/LightWeightThemeWebInstallListener.jsm
--- 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);
+}