Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
/* import-globals-from helper-serviceworker.js */
Services.scriptloader.loadSubScript(
CHROME_URL_ROOT + "helper-serviceworker.js",
this
);
const SW_TAB_URL =
URL_ROOT_SSL + "resources/service-workers/controlled-sw.html";
const SW_URL = URL_ROOT_SSL + "resources/service-workers/controlled-sw.js";
/**
* Test that the service worker has the status "registering" when the service worker is
* not installed yet. Other states (stopped, running) are covered by the existing tests.
*/
add_task(async function () {
await enableServiceWorkerDebugging();
const { document, tab, window } = await openAboutDebugging({
enableWorkerUpdates: true,
});
await selectThisFirefoxPage(document, window.AboutDebugging.store);
info("Open tab with a service worker that never leaves `registering` status");
const swTab = await addTab(SW_TAB_URL);
// Wait for the registration to make sure service worker has been started, and that we
// are not just reading STOPPED as the initial state.
await waitForRegistration(swTab);
info("Wait until the service worker is in registering status");
await waitForServiceWorkerRegistering(SW_URL, document);
// Check that the buttons are displayed as expected.
checkButtons(
{ inspect: true, push: false, start: false, unregister: false },
SW_URL,
document
);
info("Install the service worker");
SpecialPowers.spawn(swTab.linkedBrowser, [], () =>
content.wrappedJSObject.installServiceWorker()
);
info("Wait until the service worker is running");
await waitForServiceWorkerRunning(SW_URL, document);
checkButtons(
{ inspect: true, push: true, start: false, unregister: true },
SW_URL,
document
);
info("Unregister service worker");
await unregisterServiceWorker(swTab);
info("Wait until the service worker disappears from about:debugging");
await waitUntil(() => !findDebugTargetByText(SW_URL, document));
info("Remove tabs");
await removeTab(swTab);
await removeTab(tab);
});
function checkButtons(
{ inspect, push, start, unregister },
workerText,
document
) {
const targetElement = findDebugTargetByText(SW_URL, document);
const inspectButton = targetElement.querySelector(
".qa-debug-target-inspect-button"
);
const pushButton = targetElement.querySelector(".qa-push-button");
const startButton = targetElement.querySelector(".qa-start-button");
const unregisterButton = targetElement.querySelector(".qa-unregister-button");
is(
!!inspectButton,
inspect,
"Inspect button should be " + (inspect ? "visible" : "hidden")
);
is(
!!pushButton,
push,
"Push button should be " + (push ? "visible" : "hidden")
);
is(
!!startButton,
start,
"Start button should be " + (start ? "visible" : "hidden")
);
is(
!!unregisterButton,
unregister,
"Unregister button should be " + (unregister ? "visible" : "hidden")
);
}