Bug 1314855 - keep a strong reference to the listener for background thumbnail pages, r?markh draft
authorGijs Kruitbosch <gijskruitbosch@gmail.com>
Thu, 02 Mar 2017 16:05:49 +0000
changeset 492007 c942063daa8ec7e15491b8feb829633ed68ef85e
parent 491917 66535e831760421b270662aa8d0773b0fde7c9f3
child 547606 1a88272ede221aee76a63110ff03e2c77fa0da7b
push id47481
push usergijskruitbosch@gmail.com
push dateThu, 02 Mar 2017 16:06:23 +0000
reviewersmarkh
bugs1314855
milestone54.0a1
Bug 1314855 - keep a strong reference to the listener for background thumbnail pages, r?markh MozReview-Commit-ID: 1mWv4kpmqwE
toolkit/components/thumbnails/BackgroundPageThumbs.jsm
--- a/toolkit/components/thumbnails/BackgroundPageThumbs.jsm
+++ b/toolkit/components/thumbnails/BackgroundPageThumbs.jsm
@@ -160,34 +160,35 @@ const BackgroundPageThumbs = {
 
     this._startedParentWinInit = true;
 
     // Create a windowless browser and load our hosting
     // (privileged) document in it.
     let wlBrowser = Services.appShell.createWindowlessBrowser(true);
     wlBrowser.QueryInterface(Ci.nsIInterfaceRequestor);
     let webProgress = wlBrowser.getInterface(Ci.nsIWebProgress);
-    let listener = {
+    this._listener = {
       QueryInterface: XPCOMUtils.generateQI([
         Ci.nsIWebProgressListener, Ci.nsIWebProgressListener2,
         Ci.nsISupportsWeakReference]),
     };
-    listener.onStateChange = (wbp, request, stateFlags, status) => {
+    this._listener.onStateChange = (wbp, request, stateFlags, status) => {
       if (!request) {
         return;
       }
       if (stateFlags & Ci.nsIWebProgressListener.STATE_STOP &&
           stateFlags & Ci.nsIWebProgressListener.STATE_IS_NETWORK) {
-        webProgress.removeProgressListener(listener);
+        webProgress.removeProgressListener(this._listener);
+        delete this._listener;
         // Get the window reference via the document.
         this._parentWin = wlBrowser.document.defaultView;
         this._processCaptureQueue();
       }
     };
-    webProgress.addProgressListener(listener, Ci.nsIWebProgress.NOTIFY_STATE_ALL);
+    webProgress.addProgressListener(this._listener, Ci.nsIWebProgress.NOTIFY_STATE_ALL);
     wlBrowser.loadURI("chrome://global/content/backgroundPageThumbs.xhtml", 0, null, null, null);
     this._windowlessContainer = wlBrowser;
 
     return false;
   },
 
   /**
    * Destroys the service.  Queued and pending captures will never complete, and
@@ -198,16 +199,17 @@ const BackgroundPageThumbs = {
       this._captureQueue.forEach(cap => cap.destroy());
     this._destroyBrowser();
     if (this._windowlessContainer)
       this._windowlessContainer.close();
     delete this._captureQueue;
     delete this._windowlessContainer;
     delete this._startedParentWinInit;
     delete this._parentWin;
+    delete this._listener;
   },
 
   /**
    * Creates the thumbnail browser if it doesn't already exist.
    */
   _ensureBrowser() {
     if (this._thumbBrowser && !this._renewThumbBrowser)
       return;