Bug 1251890: Fix RemoveTopWindowID listener. r?billm draft
authorKris Maglione <maglione.k@gmail.com>
Sat, 27 Feb 2016 14:11:25 -0800
changeset 335168 d9b728ad4b19e7a97f313672932391f67123f54f
parent 335162 aba2c94b1bf8d1b0423205a8b45e442c4b35252d
child 515094 853abe5194e09c0d0e6d28890b69262138f77f39
push id11744
push usermaglione.k@gmail.com
push dateSat, 27 Feb 2016 23:08:22 +0000
reviewersbillm
bugs1251890
milestone47.0a1
Bug 1251890: Fix RemoveTopWindowID listener. r?billm MozReview-Commit-ID: 4nQdPszQOy
browser/components/extensions/test/browser/.eslintrc
browser/components/extensions/test/browser/browser.ini
browser/components/extensions/test/browser/browser_ext_topwindowid.js
toolkit/components/extensions/ExtensionManagement.jsm
--- 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.