summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/mochitest
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/mochitest')
-rw-r--r--toolkit/components/extensions/test/mochitest/mochitest-common.toml10
-rw-r--r--toolkit/components/extensions/test/mochitest/test_ext_all_apis.js2
-rw-r--r--toolkit/components/extensions/test/mochitest/test_ext_contentscript_activeTab.html5
-rw-r--r--toolkit/components/extensions/test/mochitest/test_ext_extension_getViews.html108
-rw-r--r--toolkit/components/extensions/test/mochitest/test_ext_runtime_getContexts.html126
-rw-r--r--toolkit/components/extensions/test/mochitest/test_ext_scripting_executeScript_activeTab.html5
-rw-r--r--toolkit/components/extensions/test/mochitest/test_ext_subframes_privileges.html67
7 files changed, 298 insertions, 25 deletions
diff --git a/toolkit/components/extensions/test/mochitest/mochitest-common.toml b/toolkit/components/extensions/test/mochitest/mochitest-common.toml
index 782069a79c..f49fb131c5 100644
--- a/toolkit/components/extensions/test/mochitest/mochitest-common.toml
+++ b/toolkit/components/extensions/test/mochitest/mochitest-common.toml
@@ -268,6 +268,8 @@ skip-if = [
"http2",
]
+["test_ext_extension_getViews.html"]
+
["test_ext_extension_iframe_messaging.html"]
skip-if = [
"http3",
@@ -350,6 +352,8 @@ skip-if = [
"http2",
]
+["test_ext_runtime_getContexts.html"]
+
["test_ext_script_filenames.html"]
["test_ext_scripting_contentScripts.html"]
@@ -443,12 +447,6 @@ skip-if = [
]
["test_ext_subframes_privileges.html"]
-skip-if = [
- "os == 'android'", # Bug 1845918
- "verify", # Bug 1489771
- "http3",
- "http2",
-]
["test_ext_tabs_captureTab.html"]
skip-if = [
diff --git a/toolkit/components/extensions/test/mochitest/test_ext_all_apis.js b/toolkit/components/extensions/test/mochitest/test_ext_all_apis.js
index 95ac9af50d..8dec0c6ae5 100644
--- a/toolkit/components/extensions/test/mochitest/test_ext_all_apis.js
+++ b/toolkit/components/extensions/test/mochitest/test_ext_all_apis.js
@@ -89,8 +89,10 @@ let expectedBackgroundApis = [
"permissions.remove",
"permissions.onAdded",
"permissions.onRemoved",
+ "runtime.ContextType",
"runtime.getBackgroundPage",
"runtime.getBrowserInfo",
+ "runtime.getContexts",
"runtime.getPlatformInfo",
"runtime.onConnectExternal",
"runtime.onInstalled",
diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_activeTab.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_activeTab.html
index 076c177dfa..28bbe3b253 100644
--- a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_activeTab.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_activeTab.html
@@ -14,7 +14,10 @@
add_task(async function setup() {
await SpecialPowers.pushPrefEnv({
- set: [["extensions.manifestV3.enabled", true]],
+ set: [
+ ["extensions.manifestV3.enabled", true],
+ ["extensions.originControls.grantByDefault", false],
+ ],
});
});
diff --git a/toolkit/components/extensions/test/mochitest/test_ext_extension_getViews.html b/toolkit/components/extensions/test/mochitest/test_ext_extension_getViews.html
new file mode 100644
index 0000000000..9309d45cdf
--- /dev/null
+++ b/toolkit/components/extensions/test/mochitest/test_ext_extension_getViews.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>extension.getViews Test</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";
+
+function genericChecker() {
+ const params = new URLSearchParams(window.location.search);
+ const kind = params.get("kind");
+ const createdTabIds = [];
+
+ browser.test.onMessage.addListener(async msg => {
+ if (msg == `${kind}-test-get-views`) {
+ try {
+ let result = browser.extension.getViews({});
+ browser.test.assertEq(3, result.length, "Expect 3 extension views to be found");
+
+ result = browser.extension.getViews({ type: "tab" });
+ browser.test.assertEq(1, result.length, "Expect 1 tab extension view to be found");
+
+ result = browser.extension.getViews({ type: "popup" });
+ browser.test.assertEq(1, result.length, "Expect 1 popup extension view to be found");
+
+ browser.test.sendMessage(`${msg}:done`);
+ } catch (err) {
+ browser.test.fail(`browser.extension.getViews exception: ${err}`);
+ browser.test.sendMessage(`${msg}:done`);
+ }
+ } else if (msg == `${kind}-open-tab`) {
+ const tab = await browser.tabs.create({ url: "/page.html?kind=tab" });
+ createdTabIds.push(tab.id);
+ } else if (msg == `${kind}-close-tabs`) {
+ await browser.tabs.remove(createdTabIds);
+ browser.test.sendMessage(`${msg}:done`);
+ }
+ });
+
+ browser.test.log(`${kind} extension page loaded`);
+ browser.test.sendMessage(`${kind}-loaded`);
+}
+
+add_task(async function test_runtime_getContexts() {
+ const EXT_ID = "runtime-getContexts@mochitest";
+ let extension = ExtensionTestUtils.loadExtension({
+ useAddonManager: "temporary", // To automatically show sidebar on load.
+ incognitoOverride: "spanning",
+ manifest: {
+ manifest_version: 3,
+ browser_specific_settings: { gecko: { id: EXT_ID } },
+
+ action: {
+ default_popup: "page.html?kind=action",
+ default_area: "navbar",
+ },
+
+ background: {
+ page: "page.html?kind=background",
+ },
+ },
+
+ files: {
+ "page.html": `
+ <!DOCTYPE html>
+ <html>
+ <head><meta charset="utf-8"><\/head>
+ <body>
+ <script src="page.js"><\/script>
+ <\/body>
+ <\/html>
+ `,
+
+ "page.js": genericChecker,
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitMessage("background-loaded");
+
+ extension.sendMessage("background-open-tab");
+ await extension.awaitMessage("tab-loaded");
+
+ await AppTestDelegate.clickBrowserAction(window, extension);
+ await extension.awaitMessage("action-loaded");
+
+ extension.sendMessage("background-test-get-views");
+ await extension.awaitMessage("background-test-get-views:done");
+
+ // Close popup window.
+ await AppTestDelegate.closeBrowserAction(window, extension);
+
+ // Close extension page tabs.
+ extension.sendMessage("background-close-tabs");
+ await extension.awaitMessage("background-close-tabs:done");
+
+ await extension.unload();
+});
+
+</script>
+</body>
+</html>
diff --git a/toolkit/components/extensions/test/mochitest/test_ext_runtime_getContexts.html b/toolkit/components/extensions/test/mochitest/test_ext_runtime_getContexts.html
new file mode 100644
index 0000000000..fa3b7385da
--- /dev/null
+++ b/toolkit/components/extensions/test/mochitest/test_ext_runtime_getContexts.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>runtime.getContexts Test</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";
+
+function genericChecker() {
+ const params = new URLSearchParams(window.location.search);
+ const kind = params.get("kind");
+ const createdTabIds = [];
+
+ browser.test.onMessage.addListener(async msg => {
+ if (msg == `${kind}-test-get-contexts`) {
+ try {
+ const result = await browser.runtime.getContexts({});
+ browser.test.assertEq(3, result.length, "Expect 3 extension contexts to be found");
+
+ const bgContext = result.find(it => it.contextType === browser.runtime.ContextType.BACKGROUND);
+ const tabContext = result.find(it => it.documentUrl.endsWith("kind=tab"));
+ const popupContext = result.find(it => it.documentUrl.endsWith("kind=action"));
+
+ browser.test.assertEq(window.location.href, bgContext.documentUrl, "background context has the expected documentUrl");
+ browser.test.assertEq(-1, bgContext.windowId, "background context has the expected windowId");
+ browser.test.assertEq(-1, bgContext.tabId, "background context has the expected tabId");
+ browser.test.assertEq("TAB", tabContext.contextType, "Got expected tab context type");
+ browser.test.assertTrue(
+ typeof tabContext.windowId === "number" && tabContext.windowId > 0,
+ "Got expected windowId on tab context"
+ );
+ browser.test.assertTrue(
+ typeof tabContext.windowId === "number" && tabContext.tabId > 0,
+ "Got expected tabId on tab context"
+ );
+ browser.test.assertEq(
+ tabContext.windowId,
+ popupContext.windowId,
+ "Poup and tab expected to have the same windowId"
+ );
+ browser.test.assertEq(-1, popupContext.tabId, "popup context has the expected tabId");
+ browser.test.assertEq("POPUP", popupContext.contextType, "Got expected popup context type");
+
+ browser.test.sendMessage(`${msg}:done`);
+ } catch (err) {
+ browser.test.fail(`broser.runtime.getContexts call rejected: ${err}`);
+ browser.test.sendMessage(`${msg}:done`);
+ }
+ } else if (msg == `${kind}-open-tab`) {
+ const tab = await browser.tabs.create({ url: "/page.html?kind=tab" });
+ createdTabIds.push(tab.id);
+ } else if (msg == `${kind}-close-tabs`) {
+ await browser.tabs.remove(createdTabIds);
+ browser.test.sendMessage(`${msg}:done`);
+ }
+ });
+
+ browser.test.log(`${kind} extension page loaded`);
+ browser.test.sendMessage(`${kind}-loaded`);
+}
+
+add_task(async function test_runtime_getContexts() {
+ const EXT_ID = "runtime-getContexts@mochitest";
+ let extension = ExtensionTestUtils.loadExtension({
+ useAddonManager: "temporary", // To automatically show sidebar on load.
+ incognitoOverride: "spanning",
+ manifest: {
+ manifest_version: 3,
+ browser_specific_settings: { gecko: { id: EXT_ID } },
+
+ action: {
+ default_popup: "page.html?kind=action",
+ default_area: "navbar",
+ },
+
+ background: {
+ page: "page.html?kind=background",
+ },
+ },
+
+ files: {
+ "page.html": `
+ <!DOCTYPE html>
+ <html>
+ <head><meta charset="utf-8"><\/head>
+ <body>
+ <script src="page.js"><\/script>
+ <\/body>
+ <\/html>
+ `,
+
+ "page.js": genericChecker,
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitMessage("background-loaded");
+
+ extension.sendMessage("background-open-tab");
+ await extension.awaitMessage("tab-loaded");
+
+ await AppTestDelegate.clickBrowserAction(window, extension);
+ await extension.awaitMessage("action-loaded");
+
+ extension.sendMessage("background-test-get-contexts");
+ await extension.awaitMessage("background-test-get-contexts:done");
+
+ // Close popup window.
+ await AppTestDelegate.closeBrowserAction(window, extension);
+
+ // Close extension page tabs.
+ extension.sendMessage("background-close-tabs");
+ await extension.awaitMessage("background-close-tabs:done");
+
+ await extension.unload();
+});
+
+</script>
+</body>
+</html>
diff --git a/toolkit/components/extensions/test/mochitest/test_ext_scripting_executeScript_activeTab.html b/toolkit/components/extensions/test/mochitest/test_ext_scripting_executeScript_activeTab.html
index 5eb2193409..a0ceed72d5 100644
--- a/toolkit/components/extensions/test/mochitest/test_ext_scripting_executeScript_activeTab.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_scripting_executeScript_activeTab.html
@@ -27,7 +27,10 @@ const makeExtension = ({ manifest: manifestProps, ...otherProps }) => {
add_task(async function setup() {
await SpecialPowers.pushPrefEnv({
- set: [["extensions.manifestV3.enabled", true]],
+ set: [
+ ["extensions.manifestV3.enabled", true],
+ ["extensions.originControls.grantByDefault", false],
+ ],
});
});
diff --git a/toolkit/components/extensions/test/mochitest/test_ext_subframes_privileges.html b/toolkit/components/extensions/test/mochitest/test_ext_subframes_privileges.html
index f791d08602..0586275808 100644
--- a/toolkit/components/extensions/test/mochitest/test_ext_subframes_privileges.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_subframes_privileges.html
@@ -14,6 +14,32 @@
"use strict";
/* eslint-disable mozilla/balanced-listeners */
+const {
+ WebExtensionPolicy,
+} = SpecialPowers.Cu.getGlobalForObject(SpecialPowers.Services);
+
+
+// Some tests load non-moz-extension:-URLs in their extension document. When
+// extensions run in-process (extensions.webextensions.remote set to false),
+// that fails.
+// For details, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1724099 and
+// the same function in toolkit/components/extensions/test/xpcshell/head.js
+async function allow_unsafe_parent_loads_when_extensions_not_remote() {
+ if (!WebExtensionPolicy.useRemoteWebExtensions) {
+ await SpecialPowers.pushPrefEnv({
+ set: [["security.allow_unsafe_parent_loads", true]],
+ });
+ }
+}
+
+async function revert_allow_unsafe_parent_loads_when_extensions_not_remote() {
+ if (!WebExtensionPolicy.useRemoteWebExtensions) {
+ // Assume that the previous call to pushPrefEnv was from
+ // allow_unsafe_parent_loads_when_extensions_not_remote.
+ await SpecialPowers.popPrefEnv();
+ }
+}
+
add_task(async function test_webext_tab_subframe_privileges() {
function background() {
browser.runtime.onMessage.addListener(async ({msg, success, tabId, error}) => {
@@ -198,19 +224,25 @@ add_task(async function test_webext_contentscript_iframe_subframe_privileges() {
});
add_task(async function test_webext_background_remote_subframe_privileges() {
- function backgroundSubframeScript() {
+ // file_remote_frame.html is opened at the same origin as this test page.
+ document.cookie = "cookie=monster";
+
+ function backgroundScript() {
window.addEventListener("message", evt => {
- browser.test.assertEq("http://mochi.test:8888", evt.origin, "postmessage origin ok");
+ browser.test.assertTrue(
+ evt.origin === "http://mochi.test:8888" ||
+ evt.origin === "https://mochi.test:8888", // using https-first, http2/http3 server.
+ `postmessage origin ok: ${evt.origin}`
+ );
browser.test.assertFalse(evt.data.tabs, "remote frame cannot access webextension APIs");
browser.test.assertEq("cookie=monster", evt.data.cookie, "Expected cookie value");
browser.test.notifyPass("webext-background-subframe-privileges");
}, {once: true});
- browser.cookies.set({url: "http://mochi.test:8888", name: "cookie", "value": "monster"});
}
let extensionData = {
manifest: {
- permissions: ["cookies", "*://mochi.test/*", "tabs"],
+ permissions: ["*://mochi.test/*", "tabs"],
background: {
page: "background.html",
},
@@ -219,32 +251,32 @@ add_task(async function test_webext_background_remote_subframe_privileges() {
"background.html": `<!DOCTYPE>
<head>
<meta charset="utf-8">
- <script src="background-subframe.js"><\/script>
+ <script src="background.js"><\/script>
</head>
<body>
<iframe src='${SimpleTest.getTestFileURL("file_remote_frame.html")}'></iframe>
</body>
</html>`,
- "background-subframe.js": backgroundSubframeScript,
+ "background.js": backgroundScript,
},
};
// Need remote webextensions to be able to load remote content from a background page.
- if (!SpecialPowers.getBoolPref("extensions.webextensions.remote", true)) {
- return;
- }
+ await allow_unsafe_parent_loads_when_extensions_not_remote();
let extension = ExtensionTestUtils.loadExtension(extensionData);
await extension.startup();
await extension.awaitFinish("webext-background-subframe-privileges");
await extension.unload();
+ await revert_allow_unsafe_parent_loads_when_extensions_not_remote();
});
// Test a moz-extension:// iframe inside a content iframe in an extension page.
add_task(async function test_sub_subframe_conduit_verified_env() {
let manifest = {
content_scripts: [{
- matches: ["http://mochi.test/*/file_sample.html"],
+ // Note: no :8888 because of bug 1468162.
+ matches: ["*://mochi.test/*/file_sample.html"],
all_frames: true,
js: ["cs.js"],
}],
@@ -311,19 +343,20 @@ add_task(async function test_sub_subframe_conduit_verified_env() {
is(err, "Unknown sender or wrong actor for recvCreateProxyContext");
}
- let remote = SpecialPowers.getBoolPref("extensions.webextensions.remote");
-
let badProcess = { message: /Bad {[\w-]+} process: web/ };
let badPrincipal = { message: /Bad {[\w-]+} principal: http/ };
- consoleMonitor.start(remote ? [badPrincipal, badProcess] : [badProcess]);
+ consoleMonitor.start([badPrincipal, badProcess]);
let extension = ExtensionTestUtils.loadExtension({ manifest, files });
+
+
+ // Need OOP to spoof from a web iframe inside background page.
+ await allow_unsafe_parent_loads_when_extensions_not_remote();
await extension.startup();
- if (remote) {
- info("Need OOP to spoof from a web iframe inside background page.");
- await expectErrors(extension);
- }
+ info("Spoof from a web iframe inside background page.");
+ await expectErrors(extension);
+ await revert_allow_unsafe_parent_loads_when_extensions_not_remote();
info("Try spoofing from the web process.");
let win = window.open("./file_sample.html");