summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_service_worker_messaging.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_service_worker_messaging.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_service_worker_messaging.js128
1 files changed, 128 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_service_worker_messaging.js b/toolkit/components/extensions/test/xpcshell/test_ext_service_worker_messaging.js
new file mode 100644
index 0000000000..b064da259b
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_service_worker_messaging.js
@@ -0,0 +1,128 @@
+/* Any copyright is dedicated to the Public Domain.
+https://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_task(async function test_runtime_sendMessage() {
+ const extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ background: {
+ service_worker: "sw.js",
+ },
+ browser_specific_settings: {
+ gecko: { id: "@test-messaging" },
+ },
+ },
+ files: {
+ "sw.js": async function () {
+ browser.test.onMessage.addListener(msg => {
+ browser.test.assertEq("send", msg, "expected correct message");
+ browser.runtime.sendMessage("hello-from-sw");
+ });
+
+ browser.test.sendMessage("background-ready");
+ },
+ "page.html": '<!DOCTYPE html><script src="page.js"></script>',
+ "page.js"() {
+ browser.runtime.onMessage.addListener((msg, sender) => {
+ browser.test.assertEq(
+ "hello-from-sw",
+ msg,
+ "expected message from service worker"
+ );
+
+ const { contextId, ...otherProps } = sender;
+ browser.test.assertTrue(!!contextId, "expected a truthy contextId");
+ browser.test.assertDeepEq(
+ {
+ envType: "addon_child",
+ id: "@test-messaging",
+ origin: self.origin,
+ url: browser.runtime.getURL("sw.js"),
+ },
+ otherProps,
+ "expected correct sender props"
+ );
+
+ browser.test.sendMessage("page-done");
+ });
+
+ browser.test.sendMessage("page-ready");
+ },
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitMessage("background-ready");
+
+ const page = await ExtensionTestUtils.loadContentPage(
+ `moz-extension://${extension.uuid}/page.html`,
+ { extension }
+ );
+ await extension.awaitMessage("page-ready");
+
+ extension.sendMessage("send");
+ await extension.awaitMessage("page-done");
+
+ await page.close();
+ await extension.unload();
+});
+
+add_task(async function test_runtime_connect() {
+ const extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ background: {
+ service_worker: "sw.js",
+ },
+ browser_specific_settings: {
+ gecko: { id: "@test-messaging" },
+ },
+ },
+ files: {
+ "sw.js": async function () {
+ browser.test.onMessage.addListener(msg => {
+ browser.test.assertEq("connect", msg, "expected correct message");
+ browser.runtime.connect();
+ });
+
+ browser.test.sendMessage("background-ready");
+ },
+ "page.html": '<!DOCTYPE html><script src="page.js"></script>',
+ "page.js"() {
+ browser.runtime.onConnect.addListener(port => {
+ const { contextId, ...otherProps } = port.sender;
+ browser.test.assertTrue(!!contextId, "expected a truthy contextId");
+ browser.test.assertDeepEq(
+ {
+ envType: "addon_child",
+ id: "@test-messaging",
+ origin: self.origin,
+ url: browser.runtime.getURL("sw.js"),
+ },
+ otherProps,
+ "expected correct sender props"
+ );
+
+ browser.test.sendMessage("page-done");
+ });
+
+ browser.test.sendMessage("page-ready");
+ },
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitMessage("background-ready");
+
+ const page = await ExtensionTestUtils.loadContentPage(
+ `moz-extension://${extension.uuid}/page.html`,
+ { extension }
+ );
+ await extension.awaitMessage("page-ready");
+
+ extension.sendMessage("connect");
+ await extension.awaitMessage("page-done");
+
+ await page.close();
+ await extension.unload();
+});