summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_runtime_getBackgroundPage.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_runtime_getBackgroundPage.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_runtime_getBackgroundPage.js172
1 files changed, 172 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_runtime_getBackgroundPage.js b/toolkit/components/extensions/test/xpcshell/test_ext_runtime_getBackgroundPage.js
new file mode 100644
index 0000000000..5af0bab639
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_runtime_getBackgroundPage.js
@@ -0,0 +1,172 @@
+"use strict";
+
+AddonTestUtils.init(this);
+AddonTestUtils.overrideCertDB();
+AddonTestUtils.createAppInfo(
+ "xpcshell@tests.mozilla.org",
+ "XPCShell",
+ "1",
+ "43"
+);
+
+add_task(async function setup() {
+ await AddonTestUtils.promiseStartupManager();
+
+ Services.prefs.setBoolPref("dom.serviceWorkers.testing.enabled", true);
+
+ registerCleanupFunction(() => {
+ Services.prefs.clearUserPref("dom.serviceWorkers.testing.enabled");
+ Services.prefs.clearUserPref("dom.serviceWorkers.idle_timeout");
+ });
+});
+
+add_task(async function test_getBackgroundPage_noBackground() {
+ async function testBackground() {
+ let page = await browser.runtime.getBackgroundPage();
+ browser.test.assertEq(
+ page,
+ null,
+ "getBackgroundPage returned null as expected"
+ );
+ browser.test.sendMessage("page-ready");
+ }
+
+ let extension = ExtensionTestUtils.loadExtension({
+ files: {
+ "page.html": `
+ <!DOCTYPE html>
+ <html>
+ <head><meta charset="utf-8"></head>
+ <body>
+ <script src="page.js"></script>
+ </body></html>
+ `,
+
+ "page.js": testBackground,
+ },
+ });
+ await extension.startup();
+ let contentPage = await ExtensionTestUtils.loadContentPage(
+ `moz-extension://${extension.uuid}//page.html`
+ );
+ await extension.awaitMessage("page-ready");
+ await contentPage.close();
+
+ await extension.unload();
+});
+
+add_task(
+ {
+ pref_set: [["extensions.eventPages.enabled", true]],
+ skip_if: () =>
+ Services.prefs.getBoolPref(
+ "extensions.backgroundServiceWorker.forceInTestExtension",
+ false
+ ),
+ },
+ async function test_getBackgroundPage_eventpage() {
+ async function wakeupBackground() {
+ let page = await browser.runtime.getBackgroundPage();
+ page.hello();
+ browser.test.sendMessage("page-ready");
+ }
+
+ let extension = ExtensionTestUtils.loadExtension({
+ useAddonManager: "temporary", // To automatically show sidebar on load.
+ manifest: {
+ background: { persistent: false },
+ },
+
+ files: {
+ "page.html": `
+ <!DOCTYPE html>
+ <html>
+ <head><meta charset="utf-8"></head>
+ <body>
+ <script src="page.js"></script>
+ </body></html>
+ `,
+
+ "page.js": wakeupBackground,
+ },
+ async background() {
+ // eslint-disable-next-line no-unused-vars
+ window.hello = () => {
+ browser.test.sendMessage("hello");
+ };
+
+ browser.test.sendMessage("ready");
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitMessage("ready");
+
+ await extension.terminateBackground();
+
+ // wake up the background
+ let contentPage = await ExtensionTestUtils.loadContentPage(
+ `moz-extension://${extension.uuid}//page.html`
+ );
+ await extension.awaitMessage("ready");
+ await extension.awaitMessage("hello");
+ await extension.awaitMessage("page-ready");
+ await contentPage.close();
+
+ ok(true, "getBackgroundPage wakes up background");
+
+ await extension.unload();
+ }
+);
+
+add_task(
+ {
+ skip_if: () => {
+ return !WebExtensionPolicy.backgroundServiceWorkerEnabled;
+ },
+ },
+ async function test_getBackgroundPage_serviceWorker() {
+ async function testBackground() {
+ let page = await browser.runtime.getBackgroundPage();
+ browser.test.assertEq(
+ page,
+ null,
+ "getBackgroundPage returned null as expected"
+ );
+ browser.test.sendMessage("page-ready");
+ }
+
+ let extension = ExtensionTestUtils.loadExtension({
+ useAddonManager: "temporary",
+ manifest: {
+ version: "1.0",
+ background: {
+ service_worker: "sw.js",
+ },
+ browser_specific_settings: { gecko: { id: "test-bg-sw@mochi.test" } },
+ },
+
+ files: {
+ "sw.js": "dump('Background ServiceWorker - executed\\n');",
+ "page.html": `
+ <!DOCTYPE html>
+ <html>
+ <head><meta charset="utf-8"></head>
+ <body>
+ <script src="page.js"></script>
+ </body></html>
+ `,
+
+ "page.js": testBackground,
+ },
+ });
+ await extension.startup();
+ let contentPage = await ExtensionTestUtils.loadContentPage(
+ `moz-extension://${extension.uuid}//page.html`
+ );
+ await extension.awaitMessage("page-ready");
+ await contentPage.close();
+
+ await extension.unload();
+ }
+);