1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
7 * This test tests if the service worker is able to intercept the script loading
8 * channel of a dedicated worker.
10 * On success, the test will not crash.
13 const SAME_ORIGIN = "https://example.com";
15 const SAME_ORIGIN_ROOT = getRootDirectory(gTestPath).replace(
16 "chrome://mochitests/content",
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)
32 async function runTest(aTestSharedWorker) {
33 const tab = gBrowser.selectedTab;
35 await navigateTab(tab, SW_REGISTER_URL);
37 await SpecialPowers.spawn(
39 [SCRIPT_URL, aTestSharedWorker],
40 async (scriptUrl, testSharedWorker) => {
41 await new Promise(resolve => {
42 content.navigator.serviceWorker.onmessage = e => {
43 if (e.data == scriptUrl) {
48 if (testSharedWorker) {
49 let worker = new content.Worker(scriptUrl);
51 let worker = new content.SharedWorker(scriptUrl);
57 ok(true, "The service worker has intercepted the script loading.");
60 add_task(async function setupPrefs() {
61 await SpecialPowers.pushPrefEnv({
63 ["dom.serviceWorkers.enabled", true],
64 ["dom.serviceWorkers.testing.enabled", true],
66 "network.cookie.cookieBehavior",
67 Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN,
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({
77 opening: SW_REGISTER_URL,
80 registerCleanupFunction(async _ => {
81 await navigateTab(tab, SW_REGISTER_URL);
83 await SpecialPowers.spawn(tab.linkedBrowser, [], async () => {
84 await content.wrappedJSObject.unregisterAll();
87 BrowserTestUtils.removeTab(tab);
90 await SpecialPowers.spawn(
94 await content.wrappedJSObject.registerAndWaitForActive(scriptUrl);
99 add_task(async function runTests() {
100 await runTest(false);