summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/mochitest/test_ext_tabs_sendMessage.html
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/mochitest/test_ext_tabs_sendMessage.html')
-rw-r--r--toolkit/components/extensions/test/mochitest/test_ext_tabs_sendMessage.html180
1 files changed, 180 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/mochitest/test_ext_tabs_sendMessage.html b/toolkit/components/extensions/test/mochitest/test_ext_tabs_sendMessage.html
index 4b230c258c..8c6dfeee7c 100644
--- a/toolkit/components/extensions/test/mochitest/test_ext_tabs_sendMessage.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_tabs_sendMessage.html
@@ -11,6 +11,10 @@
<script>
"use strict";
+const {
+ WebExtensionPolicy
+} = SpecialPowers.Cu.getGlobalForObject(SpecialPowers.Services);
+
add_task(async function test_tabs_sendMessage_to_extension_page_frame() {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
@@ -27,6 +31,10 @@ add_task(async function test_tabs_sendMessage_to_extension_page_frame() {
browser.runtime.onMessage.addListener(async (msg, sender) => {
browser.test.assertEq(msg, "page-script-ready");
browser.test.assertEq(sender.url, browser.runtime.getURL("page.html"));
+ browser.test.assertEq(
+ sender.origin,
+ new URL(browser.runtime.getURL("/")).origin
+ );
let tabId = sender.tab.id;
let response = await browser.tabs.sendMessage(tabId, "tab-sendMessage");
@@ -147,6 +155,178 @@ add_task(async function test_tabs_sendMessage_using_frameId() {
await extension.unload();
});
+add_task(async function test_tabs_sendMessage_aboutBlank() {
+ const PATH = "tests/toolkit/components/extensions/test/mochitest/file_with_about_blank.html";
+
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ content_scripts: [
+ {
+ match_about_blank: true,
+ matches: ["*://mochi.test/*/file_with_about_blank.html"],
+ all_frames: true,
+ js: ["cs.js"],
+ },
+ ],
+ },
+
+ background() {
+ browser.runtime.onMessage.addListener((msg, { url, origin }) => {
+ browser.test.assertEq("cs", msg, "expected message from cs.js");
+
+ const kind = url.startsWith("about:") ? url : "top";
+ switch (kind) {
+ case "top":
+ browser.test.assertTrue(
+ url.endsWith("/file_with_about_blank.html"),
+ "expected correct url"
+ );
+ browser.test.assertEq(
+ "http://mochi.test:8888",
+ origin,
+ "expected correct origin"
+ );
+ break;
+
+ case "about:blank":
+ browser.test.assertEq("about:blank", url, "expected correct url");
+ browser.test.assertEq(
+ "http://mochi.test:8888",
+ origin,
+ "expected correct origin"
+ );
+ break;
+
+ case "about:srcdoc":
+ browser.test.assertEq("about:srcdoc", url, "expected correct url");
+ browser.test.assertEq(
+ "http://mochi.test:8888",
+ origin,
+ "expected correct origin"
+ );
+ break;
+
+ default:
+ browser.test.fail(`Unexpected kind: ${kind}`);
+ }
+
+ browser.test.sendMessage(`done:${kind}`);
+ });
+
+ browser.test.sendMessage("ready");
+ },
+
+ files: {
+ "cs.js"() {
+ browser.runtime.sendMessage("cs");
+ },
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitMessage("ready");
+
+ let win = window.open("http://mochi.test:8888/" + PATH);
+ await extension.awaitMessage("done:top");
+ await extension.awaitMessage("done:about:blank");
+ await extension.awaitMessage("done:about:srcdoc");
+ win.close();
+
+ await extension.unload();
+});
+
+add_task(async function test_tabs_sendMessage_opaqueOrigin() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ content_scripts: [
+ {
+ match_about_blank: true,
+ // The combination of `matches` and `exclude_matches` below allows us
+ // to only inject in the top-level about:blank.
+ matches: ["*://*/*"],
+ exclude_matches: ["<all_urls>"],
+ js: ["cs.js"],
+ },
+ ],
+ },
+
+ async background() {
+ let tab;
+
+ browser.runtime.onMessage.addListener(async (msg, { url, origin }) => {
+ browser.test.assertEq("cs", msg, "expected message from cs.js");
+ browser.test.assertEq("about:blank", url, "expected correct url");
+ browser.test.assertEq("null", origin, "expected correct origin");
+
+ await browser.tabs.remove(tab.id);
+ browser.test.sendMessage("done");
+ });
+
+ tab = await browser.tabs.create({ url: "about:blank" });
+ },
+
+ files: {
+ "cs.js"() {
+ browser.runtime.sendMessage("cs");
+ },
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitMessage("done");
+ await extension.unload();
+});
+
+add_task(async function test_tabs_sendMessage_blob() {
+ // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1724099
+ if (!WebExtensionPolicy.useRemoteWebExtensions) {
+ await SpecialPowers.pushPrefEnv({
+ set: [["security.allow_unsafe_parent_loads", true]],
+ });
+ }
+
+ let extension = ExtensionTestUtils.loadExtension({
+ async background() {
+ browser.runtime.onMessage.addListener(async (msg, { url, origin }) => {
+ browser.test.assertEq("script", msg, "expected message from script.js");
+ browser.test.assertTrue(
+ url.startsWith("blob:moz-extension://"),
+ "expected correct url"
+ );
+ browser.test.assertEq(
+ new URL(browser.runtime.getURL("/")).origin,
+ origin,
+ "expected correct origin"
+ );
+
+ browser.test.sendMessage("done");
+ });
+
+ const blob = new Blob(
+ [`<script src="${browser.runtime.getURL("script.js")}"><\/script>`],
+ { type: "text/html" }
+ );
+ const iframe = document.createElement("iframe");
+ iframe.src = URL.createObjectURL(blob);
+ document.body.appendChild(iframe);
+ },
+
+ files: {
+ "script.js"() {
+ browser.runtime.sendMessage("script");
+ },
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitMessage("done");
+ await extension.unload();
+
+ if (!WebExtensionPolicy.useRemoteWebExtensions) {
+ await SpecialPowers.popPrefEnv();
+ }
+});
+
</script>
</body>
</html>