summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_contentscript_teardown.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /toolkit/components/extensions/test/xpcshell/test_ext_contentscript_teardown.js
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_contentscript_teardown.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_contentscript_teardown.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_contentscript_teardown.js b/toolkit/components/extensions/test/xpcshell/test_ext_contentscript_teardown.js
new file mode 100644
index 0000000000..9ec72e6455
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_contentscript_teardown.js
@@ -0,0 +1,101 @@
+"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();
+});