Bug 1288901 - Create ExtensionContext at document-element-inserted r=billm

MozReview-Commit-ID: 9ZQWmNjoAXA

--HG--
extra : rebase_source : d62d5169df1549d576e71bbc9ad51ecf0b4add9b
This commit is contained in:
Rob Wu 2016-08-07 19:10:01 -07:00
Родитель 6cea2d2df8
Коммит 8a0b0a5460
2 изменённых файлов: 15 добавлений и 30 удалений

Просмотреть файл

@ -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});

Просмотреть файл

@ -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);
});
</script>