diff options
Diffstat (limited to '')
-rw-r--r-- | toolkit/components/extensions/test/xpcshell/test_ext_background_type_module.js | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_background_type_module.js b/toolkit/components/extensions/test/xpcshell/test_ext_background_type_module.js new file mode 100644 index 0000000000..74512e1e41 --- /dev/null +++ b/toolkit/components/extensions/test/xpcshell/test_ext_background_type_module.js @@ -0,0 +1,133 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +async function assertBackgroundScriptTypes( + extensionTestWrapper, + expectedScriptTypesMap +) { + const { baseURI } = extensionTestWrapper.extension; + let expectedMapWithResolvedURLs = Object.keys(expectedScriptTypesMap).reduce( + (result, scriptPath) => { + result[baseURI.resolve(scriptPath)] = expectedScriptTypesMap[scriptPath]; + return result; + }, + {} + ); + const page = await ExtensionTestUtils.loadContentPage( + baseURI.resolve("_generated_background_page.html") + ); + const scriptTypesMap = await page.spawn([], () => { + const scripts = Array.from( + this.content.document.querySelectorAll("script") + ); + return scripts.reduce((result, script) => { + result[script.getAttribute("src")] = script.getAttribute("type"); + return result; + }, {}); + }); + await page.close(); + Assert.deepEqual( + scriptTypesMap, + expectedMapWithResolvedURLs, + "Got the expected script type from the generated background page" + ); +} + +async function testBackgroundScriptClassic({ manifestTypeClassicSet }) { + const extension = ExtensionTestUtils.loadExtension({ + manifest: { + background: { + scripts: ["anotherScript.js", "main.js"], + type: manifestTypeClassicSet ? "classic" : undefined, + }, + }, + files: { + "main.js": ``, + "anotherScript.js": ``, + }, + }); + + await extension.startup(); + await assertBackgroundScriptTypes(extension, { + "main.js": "text/javascript", + "anotherScript.js": "text/javascript", + }); + await extension.unload(); +} + +add_task(async function test_background_scripts_type_default() { + await testBackgroundScriptClassic({ manifestTypeClassicSet: false }); +}); + +add_task(async function test_background_scripts_type_classic() { + await testBackgroundScriptClassic({ manifestTypeClassicSet: true }); +}); + +add_task(async function test_background_scripts_type_module() { + const extension = ExtensionTestUtils.loadExtension({ + manifest: { + background: { + scripts: ["anotherModule.js", "mainModule.js"], + type: "module", + }, + }, + files: { + "mainModule.js": ` + import { initBackground } from "/importedModule.js"; + browser.test.log("mainModule.js - ESM module executing"); + initBackground(); + `, + "importedModule.js": ` + export function initBackground() { + browser.test.onMessage.addListener((msg) => { + browser.test.log("importedModule.js - test message received"); + browser.test.sendMessage("esm-module-reply", msg); + }); + browser.test.log("importedModule.js - initBackground executed"); + } + browser.test.log("importedModule.js - ESM module loaded"); + `, + "anotherModule.js": ` + browser.test.log("anotherModule.js - ESM module loaded"); + `, + }, + }); + + await extension.startup(); + await extension.sendMessage("test-event-value"); + equal( + await extension.awaitMessage("esm-module-reply"), + "test-event-value", + "Got the expected event from the ESM module loaded from the background script" + ); + await assertBackgroundScriptTypes(extension, { + "mainModule.js": "module", + "anotherModule.js": "module", + }); + await extension.unload(); +}); + +add_task(async function test_background_scripts_type_invalid() { + const extension = ExtensionTestUtils.loadExtension({ + manifest: { + background: { + scripts: ["anotherScript.js", "main.js"], + type: "invalid", + }, + }, + files: { + "main.js": ``, + "anotherScript.js": ``, + }, + }); + + ExtensionTestUtils.failOnSchemaWarnings(false); + await Assert.rejects( + extension.startup(), + /Error processing background: .* \.type must be one of/, + "Expected install to fail" + ); + ExtensionTestUtils.failOnSchemaWarnings(true); +}); |