Bug 1884032 [wpt PR 44942] - [css-color] add missing colorscheme-aware tests, a=testonly
[gecko.git] / dom / serviceworkers / test / browser_intercepted_worker_script.js
blob123110952dec5f9b5d8a7e34d6e9246b1672a695
1 /* Any copyright is dedicated to the Public Domain.
2    http://creativecommons.org/publicdomain/zero/1.0/ */
4 "use strict";
6 /**
7  * This test tests if the service worker is able to intercept the script loading
8  * channel of a dedicated worker.
9  *
10  * On success, the test will not crash.
11  */
13 const SAME_ORIGIN = "https://example.com";
15 const SAME_ORIGIN_ROOT = getRootDirectory(gTestPath).replace(
16   "chrome://mochitests/content",
17   SAME_ORIGIN
20 const SW_REGISTER_URL = `${SAME_ORIGIN_ROOT}empty_with_utils.html`;
21 const SW_SCRIPT_URL = `${SAME_ORIGIN_ROOT}simple_fetch_worker.js`;
22 const SCRIPT_URL = `${SAME_ORIGIN_ROOT}empty.js`;
24 async function navigateTab(aTab, aUrl) {
25   BrowserTestUtils.startLoadingURIString(aTab.linkedBrowser, aUrl);
27   await BrowserTestUtils.waitForLocationChange(gBrowser, aUrl).then(() =>
28     BrowserTestUtils.browserStopped(aTab.linkedBrowser)
29   );
32 async function runTest(aTestSharedWorker) {
33   const tab = gBrowser.selectedTab;
35   await navigateTab(tab, SW_REGISTER_URL);
37   await SpecialPowers.spawn(
38     tab.linkedBrowser,
39     [SCRIPT_URL, aTestSharedWorker],
40     async (scriptUrl, testSharedWorker) => {
41       await new Promise(resolve => {
42         content.navigator.serviceWorker.onmessage = e => {
43           if (e.data == scriptUrl) {
44             resolve();
45           }
46         };
48         if (testSharedWorker) {
49           let worker = new content.Worker(scriptUrl);
50         } else {
51           let worker = new content.SharedWorker(scriptUrl);
52         }
53       });
54     }
55   );
57   ok(true, "The service worker has intercepted the script loading.");
60 add_task(async function setupPrefs() {
61   await SpecialPowers.pushPrefEnv({
62     set: [
63       ["dom.serviceWorkers.enabled", true],
64       ["dom.serviceWorkers.testing.enabled", true],
65       [
66         "network.cookie.cookieBehavior",
67         Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN,
68       ],
69     ],
70   });
71 });
73 add_task(async function setupBrowser() {
74   // The tab will be used by subsequent test steps via 'gBrowser.selectedTab'.
75   const tab = await BrowserTestUtils.openNewForegroundTab({
76     gBrowser,
77     opening: SW_REGISTER_URL,
78   });
80   registerCleanupFunction(async _ => {
81     await navigateTab(tab, SW_REGISTER_URL);
83     await SpecialPowers.spawn(tab.linkedBrowser, [], async () => {
84       await content.wrappedJSObject.unregisterAll();
85     });
87     BrowserTestUtils.removeTab(tab);
88   });
90   await SpecialPowers.spawn(
91     tab.linkedBrowser,
92     [SW_SCRIPT_URL],
93     async scriptUrl => {
94       await content.wrappedJSObject.registerAndWaitForActive(scriptUrl);
95     }
96   );
97 });
99 add_task(async function runTests() {
100   await runTest(false);
101   await runTest(true);