summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_background_script_and_service_worker.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_background_script_and_service_worker.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_background_script_and_service_worker.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_background_script_and_service_worker.js b/toolkit/components/extensions/test/xpcshell/test_ext_background_script_and_service_worker.js
new file mode 100644
index 0000000000..fc59b1810d
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_background_script_and_service_worker.js
@@ -0,0 +1,81 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+async function testExtensionWithBackground({
+ with_scripts = false,
+ with_service_worker = false,
+ with_page = false,
+ expected_background_type,
+ expected_manifest_warnings = [],
+}) {
+ let background = {};
+ if (with_scripts) {
+ background.scripts = ["scripts.js"];
+ }
+ if (with_service_worker) {
+ background.service_worker = "sw.js";
+ }
+ if (with_page) {
+ background.page = "page.html";
+ }
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: { background },
+ files: {
+ "scripts.js": () => {
+ browser.test.sendMessage("from_bg", "scripts");
+ },
+ "sw.js": () => {
+ browser.test.sendMessage("from_bg", "service_worker");
+ },
+ "page.html": `<!DOCTYPE html><script src="page.js"></script>`,
+ "page.js": () => {
+ browser.test.sendMessage("from_bg", "page");
+ },
+ },
+ });
+ ExtensionTestUtils.failOnSchemaWarnings(false);
+ await extension.startup();
+ ExtensionTestUtils.failOnSchemaWarnings(true);
+ Assert.deepEqual(
+ extension.extension.warnings,
+ expected_manifest_warnings,
+ "Expected manifest warnings"
+ );
+ info("Waiting for background to start");
+ Assert.equal(
+ await extension.awaitMessage("from_bg"),
+ expected_background_type,
+ "Expected background type"
+ );
+ await extension.unload();
+}
+
+add_task(async function test_page_and_scripts() {
+ await testExtensionWithBackground({
+ with_page: true,
+ with_scripts: true,
+ // Should be expected_background_type: "scripts", not "page".
+ // https://github.com/w3c/webextensions/issues/282#issuecomment-1443332913
+ // ... but changing that may potentially affect backcompat of existing
+ // Firefox add-ons.
+ expected_background_type: "page",
+ expected_manifest_warnings: [
+ "Reading manifest: Warning processing background.scripts: An unexpected property was found in the WebExtension manifest.",
+ ],
+ });
+});
+
+add_task(
+ { skip_if: () => WebExtensionPolicy.backgroundServiceWorkerEnabled },
+ async function test_scripts_and_service_worker_when_sw_disabled() {
+ await testExtensionWithBackground({
+ with_scripts: true,
+ with_service_worker: true,
+ expected_background_type: "scripts",
+ expected_manifest_warnings: [
+ "Reading manifest: Warning processing background.service_worker: An unexpected property was found in the WebExtension manifest.",
+ ],
+ });
+ }
+);