browser_intercepted_worker_script.js (2686B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 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 */ 12 13 const SAME_ORIGIN = "https://example.com"; 14 15 const SAME_ORIGIN_ROOT = getRootDirectory(gTestPath).replace( 16 "chrome://mochitests/content", 17 SAME_ORIGIN 18 ); 19 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`; 23 24 async function navigateTab(aTab, aUrl) { 25 BrowserTestUtils.startLoadingURIString(aTab.linkedBrowser, aUrl); 26 27 await BrowserTestUtils.waitForLocationChange(gBrowser, aUrl).then(() => 28 BrowserTestUtils.browserStopped(aTab.linkedBrowser) 29 ); 30 } 31 32 async function runTest(aTestSharedWorker) { 33 const tab = gBrowser.selectedTab; 34 35 await navigateTab(tab, SW_REGISTER_URL); 36 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 }; 47 48 if (testSharedWorker) { 49 let worker = new content.Worker(scriptUrl); 50 } else { 51 let worker = new content.SharedWorker(scriptUrl); 52 } 53 }); 54 } 55 ); 56 57 ok(true, "The service worker has intercepted the script loading."); 58 } 59 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 }); 72 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 }); 79 80 registerCleanupFunction(async _ => { 81 await navigateTab(tab, SW_REGISTER_URL); 82 83 await SpecialPowers.spawn(tab.linkedBrowser, [], async () => { 84 await content.wrappedJSObject.unregisterAll(); 85 }); 86 87 BrowserTestUtils.removeTab(tab); 88 }); 89 90 await SpecialPowers.spawn( 91 tab.linkedBrowser, 92 [SW_SCRIPT_URL], 93 async scriptUrl => { 94 await content.wrappedJSObject.registerAndWaitForActive(scriptUrl); 95 } 96 ); 97 }); 98 99 add_task(async function runTests() { 100 await runTest(false); 101 await runTest(true); 102 });