summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/test/browser_net_service-worker-timings.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/netmonitor/test/browser_net_service-worker-timings.js')
-rw-r--r--devtools/client/netmonitor/test/browser_net_service-worker-timings.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/test/browser_net_service-worker-timings.js b/devtools/client/netmonitor/test/browser_net_service-worker-timings.js
new file mode 100644
index 0000000000..2ae893703d
--- /dev/null
+++ b/devtools/client/netmonitor/test/browser_net_service-worker-timings.js
@@ -0,0 +1,72 @@
+"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);
+});