browser_aboutdebugging_serviceworker_fetch_flag.js (2180B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 /* import-globals-from helper-serviceworker.js */ 7 Services.scriptloader.loadSubScript( 8 CHROME_URL_ROOT + "helper-serviceworker.js", 9 this 10 ); 11 12 const FETCH_SW_JS = 13 URL_ROOT_SSL + "resources/service-workers/fetch-sw.worker.js"; 14 const FETCH_SW_HTML = URL_ROOT_SSL + "resources/service-workers/fetch-sw.html"; 15 16 const EMPTY_SW_JS = 17 URL_ROOT_SSL + "resources/service-workers/empty-sw.worker.js"; 18 const EMPTY_SW_HTML = URL_ROOT_SSL + "resources/service-workers/empty-sw.html"; 19 20 /** 21 * Test that the appropriate fetch flag is displayed for service workers. 22 */ 23 add_task(async function () { 24 await enableServiceWorkerDebugging(); 25 const { document, tab, window } = await openAboutDebugging({ 26 enableWorkerUpdates: true, 27 }); 28 await selectThisFirefoxPage(document, window.AboutDebugging.store); 29 30 info("Test fetch status for a service worker listening to fetch events"); 31 await testServiceWorkerFetchStatus( 32 document, 33 FETCH_SW_HTML, 34 FETCH_SW_JS, 35 true 36 ); 37 38 info("Test fetch status for a service worker not listening to fetch events"); 39 await testServiceWorkerFetchStatus( 40 document, 41 EMPTY_SW_HTML, 42 EMPTY_SW_JS, 43 false 44 ); 45 46 await removeTab(tab); 47 }); 48 49 async function testServiceWorkerFetchStatus(doc, url, workerUrl, isListening) { 50 // Open a tab that registers a fetch service worker. 51 const swTab = await addTab(url); 52 53 info("Wait until the service worker appears and is running"); 54 const targetElement = await waitForServiceWorkerRunning(workerUrl, doc); 55 56 const expectedClassName = isListening 57 ? ".qa-worker-fetch-listening" 58 : ".qa-worker-fetch-not-listening"; 59 const fetchStatus = targetElement.querySelector(expectedClassName); 60 ok(!!fetchStatus, "Found the expected fetch status: " + expectedClassName); 61 62 info("Unregister the service worker"); 63 await unregisterServiceWorker(swTab); 64 65 info("Wait until the service worker disappears from about:debugging"); 66 await waitUntil(() => !findDebugTargetByText(workerUrl, doc)); 67 68 info("Remove the service worker tab"); 69 await removeTab(swTab); 70 }