summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_contentscript_permissions_fetch.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_permissions_fetch.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_permissions_fetch.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_contentscript_permissions_fetch.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_contentscript_permissions_fetch.js b/toolkit/components/extensions/test/xpcshell/test_ext_contentscript_permissions_fetch.js
new file mode 100644
index 0000000000..f9c1b360a0
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_contentscript_permissions_fetch.js
@@ -0,0 +1,87 @@
+"use strict";
+
+Services.prefs.setBoolPref("extensions.manifestV3.enabled", true);
+
+const server = createHttpServer({ hosts: ["example.com", "example.net"] });
+server.registerDirectory("/data/", do_get_file("data"));
+
+const { ExtensionPermissions } = ChromeUtils.importESModule(
+ "resource://gre/modules/ExtensionPermissions.sys.mjs"
+);
+
+function grantOptional({ extension: ext }, origins) {
+ return ExtensionPermissions.add(ext.id, { origins, permissions: [] }, ext);
+}
+
+function revokeOptional({ extension: ext }, origins) {
+ return ExtensionPermissions.remove(ext.id, { origins, permissions: [] }, ext);
+}
+
+// Test granted optional permissions work with XHR/fetch in new processes.
+add_task(
+ {
+ pref_set: [["dom.ipc.keepProcessesAlive.extension", 0]],
+ },
+ async function test_fetch_origin_permissions_change() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ host_permissions: ["http://example.com/*"],
+ optional_permissions: ["http://example.net/*"],
+ },
+ files: {
+ "page.js"() {
+ fetch("http://example.net/data/file_sample.html")
+ .then(req => req.text())
+ .then(text => browser.test.sendMessage("done", { text }))
+ .catch(e => browser.test.sendMessage("done", { error: e.message }));
+ },
+ "page.html": `<!DOCTYPE html><meta charset="utf-8"><script src="page.js"></script>`,
+ },
+ });
+
+ await extension.startup();
+
+ let osPid;
+ {
+ // Grant permissions before extension process exists.
+ await grantOptional(extension, ["http://example.net/*"]);
+
+ let page = await ExtensionTestUtils.loadContentPage(
+ extension.extension.baseURI.resolve("page.html")
+ );
+
+ let { text } = await extension.awaitMessage("done");
+ ok(text.includes("Sample text"), "Can read from granted optional host.");
+
+ osPid = page.browsingContext.currentWindowGlobal.osPid;
+ await page.close();
+ }
+
+ // Release the extension process so that next part starts a new one.
+ Services.ppmm.releaseCachedProcesses();
+
+ {
+ // Revoke permissions and confirm fetch fails.
+ await revokeOptional(extension, ["http://example.net/*"]);
+
+ let page = await ExtensionTestUtils.loadContentPage(
+ extension.extension.baseURI.resolve("page.html")
+ );
+
+ let { error } = await extension.awaitMessage("done");
+ ok(error.includes("NetworkError"), `Expected error: ${error}`);
+
+ if (WebExtensionPolicy.useRemoteWebExtensions) {
+ notEqual(
+ osPid,
+ page.browsingContext.currentWindowGlobal.osPid,
+ "Second part of the test used a new process."
+ );
+ }
+
+ await page.close();
+ }
+
+ await extension.unload();
+ }
+);