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
--- 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() {