Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

"use strict";
/**
* Tests that timings for requests from the service workers are displayed correctly.
*/
add_task(async function testServiceWorkerTimings() {
// Service workers only work on https
const TEST_URL = HTTPS_EXAMPLE_URL + "service-workers/status-codes.html";
const { tab, monitor } = await initNetMonitor(TEST_URL, {
enableCache: true,
requestCount: 1,
});
info("Starting test... ");
const { document, store, windowRequire } = monitor.panelWin;
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
store.dispatch(Actions.batchEnable(false));
info("Registering the service worker...");
await SpecialPowers.spawn(tab.linkedBrowser, [], async function () {
await content.wrappedJSObject.registerServiceWorker();
});
info("Performing requests which are intercepted by service worker...");
await performRequests(monitor, tab, 1);
const timingsSelector =
"#timings-panel .tabpanel-summary-container.service-worker";
wait = waitForDOM(document, timingsSelector, 3);
AccessibilityUtils.setEnv({
// Keyboard users will will see the sidebar when the request row is
// selected. Accessibility is handled on the container level.
actionCountRule: false,
interactiveRule: false,
labelRule: false,
});
EventUtils.sendMouseEvent(
{ type: "click" },
document.querySelectorAll(".request-list-item")[0]
);
AccessibilityUtils.resetEnv();
store.dispatch(Actions.toggleNetworkDetails());
clickOnSidebarTab(document, "timings");
await wait;
const timings = document.querySelectorAll(timingsSelector, 3);
// Note: The specific timing numbers change so this only asserts that the
// timings are visible
ok(
timings[0].textContent.includes("Startup"),
"The service worker timing for launch of the service worker is visible"
);
ok(
timings[1].textContent.includes("Dispatch fetch:"),
"The service worker timing for dispatching the fetch event is visible"
);
ok(
timings[2].textContent.includes("Handle fetch:"),
"The service worker timing for handling the fetch event is visible"
);
info("Unregistering the service worker...");
await SpecialPowers.spawn(tab.linkedBrowser, [], async function () {
await content.wrappedJSObject.unregisterServiceWorker();
});
await teardown(monitor);
});