diff --git a/toolkit/components/extensions/Extension.jsm b/toolkit/components/extensions/Extension.jsm index 64fef9124330..5279267796ef 100644 --- a/toolkit/components/extensions/Extension.jsm +++ b/toolkit/components/extensions/Extension.jsm @@ -614,7 +614,7 @@ GlobalManager = { init(extension) { if (this.extensionMap.size == 0) { - Services.obs.addObserver(this, "content-document-global-created", false); + Services.obs.addObserver(this, "document-element-inserted", false); UninstallObserver.init(); this.initialized = true; } @@ -626,7 +626,7 @@ GlobalManager = { this.extensionMap.delete(extension.id); if (this.extensionMap.size == 0 && this.initialized) { - Services.obs.removeObserver(this, "content-document-global-created"); + Services.obs.removeObserver(this, "document-element-inserted"); this.initialized = false; } }, @@ -712,7 +712,12 @@ GlobalManager = { Schemas.inject(dest, schemaWrapper); }, - observe(contentWindow, topic, data) { + observe(document, topic, data) { + let contentWindow = document.defaultView; + if (!contentWindow) { + return; + } + let inject = (extension, context) => { // We create two separate sets of bindings, one for the `chrome` // global, and one for the `browser` global. The latter returns @@ -741,7 +746,6 @@ GlobalManager = { return; } - let docShell = contentWindow.QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIDocShell); @@ -765,9 +769,8 @@ GlobalManager = { type = "popup"; } - let extension = this.extensionMap.get(id); - let uri = contentWindow.document.documentURIObject; + let uri = document.documentURIObject; let incognito = PrivateBrowsingUtils.isContentWindowPrivate(contentWindow); let context = new ExtensionContext(extension, {type, contentWindow, uri, docShell, incognito}); diff --git a/toolkit/components/extensions/test/mochitest/test_ext_tab_teardown.html b/toolkit/components/extensions/test/mochitest/test_ext_tab_teardown.html index b7859b6d4dc6..777f9944e04b 100644 --- a/toolkit/components/extensions/test/mochitest/test_ext_tab_teardown.html +++ b/toolkit/components/extensions/test/mochitest/test_ext_tab_teardown.html @@ -14,7 +14,7 @@ "use strict"; // Test for tabs opened using tabs.create and window.open -function* runTabReloadAndCloseTest({extension, isInitiallyBlankUrl}) { +function* runTabReloadAndCloseTest(extension) { let chromeScript = SpecialPowers.loadChromeScript( SimpleTest.getTestFileURL("file_teardown_test.js")); yield chromeScript.promiseOneMessage("chromescript-startup"); @@ -37,17 +37,8 @@ function* runTabReloadAndCloseTest({extension, isInitiallyBlankUrl}) { extension.sendMessage("reload extension page"); let extensionPageUrl2 = yield extension.awaitMessage("extension page loaded"); - // When the tab is opened with window.open, the initial URL happens to be - // about:blank. - if (isInitiallyBlankUrl) { - is(extensionPageUrl, "about:blank", - "The tab URL before reload should be about:blank"); - isnot(extensionPageUrl, extensionPageUrl2, - "After a page reload the tab URL shouldn't be blank."); - } else { - is(extensionPageUrl, extensionPageUrl2, - "The tab's URL is expected to not change after a page reload"); - } + is(extensionPageUrl, extensionPageUrl2, + "The tab's URL is expected to not change after a page reload"); contextEvents = yield* getContextEvents(); is(contextEvents.length, 2, "ExtensionContext change after tab reload"); @@ -105,7 +96,7 @@ add_task(function* test_extension_page_tabs_create_reload_and_close() { let extension = ExtensionTestUtils.loadExtension(extensionData); yield extension.startup(); - yield* runTabReloadAndCloseTest({extension}); + yield* runTabReloadAndCloseTest(extension); }); add_task(function* test_extension_page_window_open_reload_and_close() { @@ -136,16 +127,7 @@ add_task(function* test_extension_page_window_open_reload_and_close() { } function pageScript() { - if (performance.navigation.type === 0) { // TYPE_NAVIGATION - // The ExtensionContext URL happens to be "about:blank" when the page is - // loaded via window.open(). - browser.test.sendMessage("extension page loaded", "about:blank"); - } else if (performance.navigation.type === 1) { // TYPE_RELOAD - browser.test.sendMessage("extension page loaded", document.URL); - } else { - browser.test.notifyFail( - "Unexpected navigation type: " + performance.navigation.type); - } + browser.test.sendMessage("extension page loaded", document.URL); } let extensionData = { @@ -160,7 +142,7 @@ add_task(function* test_extension_page_window_open_reload_and_close() { let extension = ExtensionTestUtils.loadExtension(extensionData); yield extension.startup(); yield extension.awaitMessage("setup-intermediate-tab"); - yield* runTabReloadAndCloseTest({extension, isInitiallyBlankUrl: true}); + yield* runTabReloadAndCloseTest(extension); });