/* 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": '', "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": '', "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(); });