зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1288901 - Create ExtensionContext at document-element-inserted r=billm
MozReview-Commit-ID: 9ZQWmNjoAXA --HG-- extra : rebase_source : d62d5169df1549d576e71bbc9ad51ecf0b4add9b
This commit is contained in:
Родитель
6cea2d2df8
Коммит
8a0b0a5460
|
@ -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>
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче