Bug 1347514 - Tear down customize mode in a background tab if the users sends it to a different page. r?dao draft
authorMike Conley <mconley@mozilla.com>
Mon, 20 Mar 2017 11:08:48 -0400
changeset 501869 5900d940429f30ac89b84aa184e69a5d79edde98
parent 501522 8d967436d696d1f8e3fb33cf7e3d32a72457ffa6
child 501870 bf13fa41b578712c97f33461cc82dde3cfb142d1
child 502199 ac3fd516cebc3ef09377124b244d8a9d52059a1f
push id50138
push usermconley@mozilla.com
push dateTue, 21 Mar 2017 02:32:09 +0000
reviewersdao
bugs1347514
milestone55.0a1
Bug 1347514 - Tear down customize mode in a background tab if the users sends it to a different page. r?dao MozReview-Commit-ID: HQ39mwAhQjS
browser/components/customizableui/CustomizeMode.jsm
--- a/browser/components/customizableui/CustomizeMode.jsm
+++ b/browser/components/customizableui/CustomizeMode.jsm
@@ -60,20 +60,34 @@ function closeGlobalTab() {
   let win = gTab.ownerGlobal;
   if (win.gBrowser.browsers.length == 1) {
     win.BrowserOpenTab();
   }
   win.gBrowser.removeTab(gTab);
   gTab = null;
 }
 
+var gTabsProgressListener = {
+  onLocationChange(aBrowser, aWebProgress, aRequest, aLocation, aFlags) {
+    if (!gTab || gTab.linkedBrowser != aBrowser) {
+      return;
+    }
+
+    unregisterGlobalTab();
+  },
+}
+
 function unregisterGlobalTab() {
   gTab.removeEventListener("TabClose", unregisterGlobalTab);
-  gTab.ownerGlobal.removeEventListener("unload", unregisterGlobalTab);
+  let win = gTab.ownerGlobal;
+  win.removeEventListener("unload", unregisterGlobalTab);
+  win.gBrowser.removeTabsProgressListener(gTabsProgressListener);
+
   gTab.removeAttribute("customizemode");
+
   gTab = null;
 }
 
 function CustomizeMode(aWindow) {
   if (gDisableAnimation === null) {
     gDisableAnimation = Services.prefs.getPrefType(kPrefCustomizationAnimation) == Ci.nsIPrefBranch.PREF_BOOL &&
                         Services.prefs.getBoolPref(kPrefCustomizationAnimation);
   }
@@ -172,16 +186,19 @@ CustomizeMode.prototype = {
 
     let win = gTab.ownerGlobal;
 
     win.gBrowser.setTabTitle(gTab);
     win.gBrowser.setIcon(gTab,
                          "chrome://browser/skin/customizableui/customizeFavicon.ico");
 
     gTab.addEventListener("TabClose", unregisterGlobalTab);
+
+    win.gBrowser.addTabsProgressListener(gTabsProgressListener);
+
     win.addEventListener("unload", unregisterGlobalTab);
 
     if (gTab.selected) {
       win.gCustomizeMode.enter();
     }
   },
 
   enter() {