Bug 1251890: Fix RemoveTopWindowID listener. r?billm
MozReview-Commit-ID: 4nQdPszQOy
--- a/browser/components/extensions/test/browser/.eslintrc
+++ b/browser/components/extensions/test/browser/.eslintrc
@@ -10,16 +10,17 @@
"XPCOMUtils": true,
"Task": true,
// Browser window globals.
"PanelUI": false,
// Test harness globals
"ExtensionTestUtils": false,
+ "TestUtils": false,
"clickBrowserAction": true,
"clickPageAction": true,
"CustomizableUI": true,
"focusWindow": true,
"makeWidgetId": true,
}
}
--- a/browser/components/extensions/test/browser/browser.ini
+++ b/browser/components/extensions/test/browser/browser.ini
@@ -43,9 +43,10 @@ support-files =
[browser_ext_tabs_onUpdated.js]
[browser_ext_tabs_sendMessage.js]
[browser_ext_tabs_move.js]
[browser_ext_tabs_move_window.js]
[browser_ext_windows_create_tabId.js]
[browser_ext_windows_update.js]
[browser_ext_contentscript_connect.js]
[browser_ext_tab_runtimeConnect.js]
+[browser_ext_topwindowid.js]
[browser_ext_webNavigation_getFrames.js]
new file mode 100644
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_topwindowid.js
@@ -0,0 +1,23 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+add_task(function* test_topwindowid_cleanup() {
+ let {Frames} = Cu.import("resource://gre/modules/ExtensionManagement.jsm", {});
+
+ let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, "http://example.com/");
+
+ let {outerWindowID, messageManager} = tab.linkedBrowser;
+
+ ok(Frames.topWindowIds.has(outerWindowID), "Outer window ID is registered");
+
+ let awaitDisconnect = TestUtils.topicObserved("message-manager-disconnect",
+ subject => subject === messageManager);
+
+ yield BrowserTestUtils.removeTab(tab);
+
+ yield awaitDisconnect;
+
+ ok(!Frames.topWindowIds.has(outerWindowID), "Outer window ID is no longer registered");
+});
+
--- a/toolkit/components/extensions/ExtensionManagement.jsm
+++ b/toolkit/components/extensions/ExtensionManagement.jsm
@@ -30,17 +30,17 @@ var Frames = {
topWindowIds: new Set(),
init() {
if (Services.appinfo.processType == Services.appinfo.PROCESS_TYPE_CONTENT) {
return;
}
Services.mm.addMessageListener("Extension:TopWindowID", this);
- Services.mm.addMessageListener("Extension:RemoveTopWindowID", this);
+ Services.mm.addMessageListener("Extension:RemoveTopWindowID", this, true);
},
isTopWindowId(windowId) {
return this.topWindowIds.has(windowId);
},
// Convert an outer window ID to a frame ID. An outer window ID of 0
// is invalid.