browser_application_panel_worker-states.js (2196B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const TAB_URL = URL_ROOT + "resources/service-workers/controlled-install.html"; 7 8 add_task(async function () { 9 await enableApplicationPanel(); 10 11 const { panel, tab } = await openNewTabAndApplicationPanel(TAB_URL); 12 const doc = panel.panelWin.document; 13 14 selectPage(panel, "service-workers"); 15 16 info("Check for non-existing service worker"); 17 const isWorkerListEmpty = !!doc.querySelector(".js-registration-list-empty"); 18 ok(isWorkerListEmpty, "No Service Worker displayed"); 19 20 info("Register a service worker with a controlled install in the page."); 21 await SpecialPowers.spawn(tab.linkedBrowser, [], async function () { 22 content.wrappedJSObject.registerServiceWorker(); 23 }); 24 25 info("Wait until the service worker appears in the application panel"); 26 await waitUntil(() => !!getWorkerContainers(doc).length); 27 info("Wait until the 'Installing' state is displayed"); 28 await waitUntil(() => { 29 const containers = getWorkerContainers(doc); 30 if (containers.length === 0) { 31 return false; 32 } 33 34 const stateEl = containers[0].querySelector(".js-worker-status"); 35 return stateEl.textContent.toLowerCase() === "installing"; 36 }); 37 38 info("Allow the service worker to complete installation"); 39 await SpecialPowers.spawn(tab.linkedBrowser, [], async function () { 40 content.wrappedJSObject.installServiceWorker(); 41 }); 42 43 info("Wait until the 'running' state is displayed"); 44 await waitUntil(() => { 45 const workerContainer = getWorkerContainers(doc)[0]; 46 const stateEl = workerContainer.querySelector(".js-worker-status"); 47 return stateEl.textContent.toLowerCase() === "running"; 48 }); 49 50 info("Unregister the service worker"); 51 await SpecialPowers.spawn(tab.linkedBrowser, [], async function () { 52 const registration = await content.wrappedJSObject.sw; 53 registration.unregister(); 54 }); 55 56 info("Wait until the service worker is removed from the application panel"); 57 await waitUntil(() => getWorkerContainers(doc).length === 0); 58 59 // close the tab 60 info("Closing the tab."); 61 await BrowserTestUtils.removeTab(tab); 62 });