summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/mochitest/test_ext_scripting_permissions.html
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/mochitest/test_ext_scripting_permissions.html
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/mochitest/test_ext_scripting_permissions.html')
-rw-r--r--toolkit/components/extensions/test/mochitest/test_ext_scripting_permissions.html149
1 files changed, 149 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/mochitest/test_ext_scripting_permissions.html b/toolkit/components/extensions/test/mochitest/test_ext_scripting_permissions.html
new file mode 100644
index 0000000000..e3e6552290
--- /dev/null
+++ b/toolkit/components/extensions/test/mochitest/test_ext_scripting_permissions.html
@@ -0,0 +1,149 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Tests scripting APIs and permissions</title>
+ <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
+ <script type="text/javascript" src="head.js"></script>
+ <link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+
+<script type="text/javascript">
+
+"use strict";
+
+const verifyRegisterContentScripts = async ({ manifest_version }) => {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ manifest_version,
+ permissions: ["scripting"],
+ host_permissions: ["*://example.com/*"],
+ optional_permissions: ["*://example.org/*"],
+
+ },
+ async background() {
+ browser.test.onMessage.addListener(async (msg, value) => {
+ switch (msg) {
+ case "grant-permission":
+ let granted = await new Promise(resolve => {
+ browser.test.withHandlingUserInput(() => {
+ resolve(browser.permissions.request(value));
+ });
+ });
+ browser.test.assertTrue(granted, "permission request succeeded");
+ browser.test.sendMessage("permission-granted");
+ break;
+
+ default:
+ browser.test.fail(`invalid message received: ${msg}`);
+ }
+ });
+
+ await browser.scripting.registerContentScripts([
+ {
+ id: "script",
+ js: ["script.js"],
+ matches: [
+ "*://example.com/*",
+ "*://example.net/*",
+ "*://example.org/*",
+ ],
+ persistAcrossSessions: false,
+ },
+ ]);
+
+ browser.test.sendMessage("background-ready");
+ },
+ files: {
+ "script.js": () => {
+ browser.test.sendMessage(
+ "script-ran",
+ window.location.host + window.location.search
+ );
+ },
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitMessage("background-ready");
+
+ if (manifest_version > 2) {
+ extension.sendMessage("grant-permission", {
+ origins: ["*://example.com/*"],
+ });
+ await extension.awaitMessage("permission-granted");
+ }
+
+ // `example.net` is not declared in the list of `permissions`.
+ let tabExampleNet = await AppTestDelegate.openNewForegroundTab(
+ window,
+ "https://example.net/",
+ true
+ );
+ // `example.org` is listed in `optional_permissions`.
+ let tabExampleOrg = await AppTestDelegate.openNewForegroundTab(
+ window,
+ "https://example.org/",
+ true
+ );
+ // `example.com` is listed in `permissions`.
+ let tabExampleCom = await AppTestDelegate.openNewForegroundTab(
+ window,
+ "https://example.com/",
+ true
+ );
+
+ let value = await extension.awaitMessage("script-ran");
+ ok(
+ value === "example.com",
+ `expected: example.com, received: ${value}`
+ );
+
+ extension.sendMessage("grant-permission", {
+ origins: ["*://example.org/*"],
+ });
+ await extension.awaitMessage("permission-granted");
+
+ let tabExampleOrg2 = await AppTestDelegate.openNewForegroundTab(
+ window,
+ "https://example.org/?2",
+ true
+ );
+
+ value = await extension.awaitMessage("script-ran");
+ ok(
+ value === "example.org?2",
+ `expected: example.org?2, received: ${value}`
+ );
+
+ await AppTestDelegate.removeTab(window, tabExampleNet);
+ await AppTestDelegate.removeTab(window, tabExampleOrg);
+ await AppTestDelegate.removeTab(window, tabExampleCom);
+ await AppTestDelegate.removeTab(window, tabExampleOrg2);
+
+ await extension.unload();
+};
+
+add_task(async function setup() {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["extensions.manifestV3.enabled", true],
+ ["extensions.webextOptionalPermissionPrompts", false],
+ ],
+ });
+});
+
+add_task(async function test_scripting_registerContentScripts_mv2() {
+ await verifyRegisterContentScripts({ manifest_version: 2 });
+});
+
+add_task(async function test_scripting_registerContentScripts_mv3() {
+ await verifyRegisterContentScripts({ manifest_version: 3 });
+});
+
+</script>
+
+</body>
+</html>