forked from mirrors/gecko-dev
Depends on D175553 Differential Revision: https://phabricator.services.mozilla.com/D176005
101 lines
2.8 KiB
JavaScript
101 lines
2.8 KiB
JavaScript
"use strict";
|
|
|
|
const server = createHttpServer({ hosts: ["example.com"] });
|
|
server.registerDirectory("/data/", do_get_file("data"));
|
|
|
|
add_task(async function test_contentscript_reload_and_unload() {
|
|
let extensionData = {
|
|
manifest: {
|
|
content_scripts: [
|
|
{
|
|
matches: ["http://example.com/data/file_sample.html"],
|
|
js: ["contentscript.js"],
|
|
},
|
|
],
|
|
},
|
|
|
|
files: {
|
|
"contentscript.js"() {
|
|
browser.test.sendMessage("contentscript-run");
|
|
},
|
|
},
|
|
};
|
|
|
|
let extension = ExtensionTestUtils.loadExtension(extensionData);
|
|
await extension.startup();
|
|
|
|
let events = [];
|
|
{
|
|
const { Management } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/Extension.sys.mjs"
|
|
);
|
|
let record = (type, extensionContext) => {
|
|
let eventType = type == "proxy-context-load" ? "load" : "unload";
|
|
let url = extensionContext.uri.spec;
|
|
let extensionId = extensionContext.extension.id;
|
|
events.push({ eventType, url, extensionId });
|
|
};
|
|
|
|
Management.on("proxy-context-load", record);
|
|
Management.on("proxy-context-unload", record);
|
|
registerCleanupFunction(() => {
|
|
Management.off("proxy-context-load", record);
|
|
Management.off("proxy-context-unload", record);
|
|
});
|
|
}
|
|
|
|
const tabUrl = "http://example.com/data/file_sample.html";
|
|
let contentPage = await ExtensionTestUtils.loadContentPage(tabUrl);
|
|
|
|
await extension.awaitMessage("contentscript-run");
|
|
|
|
let contextEvents = events.splice(0);
|
|
equal(
|
|
contextEvents.length,
|
|
1,
|
|
"ExtensionContext state change after loading a content script"
|
|
);
|
|
equal(
|
|
contextEvents[0].eventType,
|
|
"load",
|
|
"Create ExtensionContext for content script"
|
|
);
|
|
equal(contextEvents[0].url, tabUrl, "ExtensionContext URL = page");
|
|
|
|
await contentPage.spawn([], () => {
|
|
this.content.location.reload();
|
|
});
|
|
await extension.awaitMessage("contentscript-run");
|
|
|
|
contextEvents = events.splice(0);
|
|
equal(
|
|
contextEvents.length,
|
|
2,
|
|
"ExtensionContext state changes after reloading a content script"
|
|
);
|
|
equal(contextEvents[0].eventType, "unload", "Unload old ExtensionContext");
|
|
equal(contextEvents[0].url, tabUrl, "ExtensionContext URL = page");
|
|
equal(
|
|
contextEvents[1].eventType,
|
|
"load",
|
|
"Create new ExtensionContext for content script"
|
|
);
|
|
equal(contextEvents[1].url, tabUrl, "ExtensionContext URL = page");
|
|
|
|
await contentPage.close();
|
|
|
|
contextEvents = events.splice(0);
|
|
equal(
|
|
contextEvents.length,
|
|
1,
|
|
"ExtensionContext state change after unloading a content script"
|
|
);
|
|
equal(
|
|
contextEvents[0].eventType,
|
|
"unload",
|
|
"Unload ExtensionContext after closing the tab with the content script"
|
|
);
|
|
equal(contextEvents[0].url, tabUrl, "ExtensionContext URL = page");
|
|
|
|
await extension.unload();
|
|
});
|