summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/test/browser_net_worker_stacks.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/netmonitor/test/browser_net_worker_stacks.js')
-rw-r--r--devtools/client/netmonitor/test/browser_net_worker_stacks.js119
1 files changed, 119 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/test/browser_net_worker_stacks.js b/devtools/client/netmonitor/test/browser_net_worker_stacks.js
new file mode 100644
index 0000000000..febbea8d09
--- /dev/null
+++ b/devtools/client/netmonitor/test/browser_net_worker_stacks.js
@@ -0,0 +1,119 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Test that we get stack traces for the network requests made when starting or
+// running worker threads.
+
+const TOP_FILE_NAME = "html_worker-test-page.html";
+const TOP_URL = HTTPS_EXAMPLE_URL + TOP_FILE_NAME;
+const WORKER_FILE_NAME = "js_worker-test.js";
+const WORKER_URL = HTTPS_EXAMPLE_URL + WORKER_FILE_NAME;
+
+const EXPECTED_REQUESTS = [
+ {
+ method: "GET",
+ url: TOP_URL,
+ causeType: "document",
+ causeUri: null,
+ stack: false,
+ },
+ {
+ method: "GET",
+ url: WORKER_URL,
+ causeType: "script",
+ causeUri: TOP_URL,
+ stack: [
+ { fn: "startWorkerInner", file: TOP_URL, line: 11 },
+ { fn: "startWorker", file: TOP_URL, line: 8 },
+ { file: TOP_URL, line: 4 },
+ ],
+ },
+ {
+ method: "GET",
+ url: HTTPS_EXAMPLE_URL + "missing1.js",
+ causeType: "script",
+ causeUri: TOP_URL,
+ stack: [
+ { fn: "importScriptsFromWorker", file: WORKER_URL, line: 14 },
+ { file: WORKER_URL, line: 10 },
+ ],
+ },
+ {
+ method: "GET",
+ url: HTTPS_EXAMPLE_URL + "missing2.js",
+ causeType: "script",
+ causeUri: TOP_URL,
+ stack: [
+ { fn: "importScriptsFromWorker", file: WORKER_URL, line: 14 },
+ { file: WORKER_URL, line: 10 },
+ ],
+ },
+ {
+ method: "GET",
+ url: HTTPS_EXAMPLE_URL + "js_worker-test2.js",
+ causeType: "script",
+ causeUri: TOP_URL,
+ stack: [
+ { fn: "startWorkerFromWorker", file: WORKER_URL, line: 7 },
+ { file: WORKER_URL, line: 3 },
+ ],
+ },
+ {
+ method: "GET",
+ url: HTTPS_EXAMPLE_URL + "missing.json",
+ causeType: "xhr",
+ causeUri: TOP_URL,
+ stack: [
+ { fn: "createJSONRequest", file: WORKER_URL, line: 22 },
+ { file: WORKER_URL, line: 18 },
+ ],
+ },
+ {
+ method: "GET",
+ url: HTTPS_EXAMPLE_URL + "missing.txt",
+ causeType: "fetch",
+ causeUri: TOP_URL,
+ stack: [
+ { fn: "fetchThing", file: WORKER_URL, line: 29 },
+ { file: WORKER_URL, line: 26 },
+ ],
+ },
+];
+
+add_task(async function () {
+ // Load a different URL first to instantiate the network monitor before we
+ // load the page we're really interested in.
+ const { monitor } = await initNetMonitor(SIMPLE_URL, { requestCount: 1 });
+
+ const { store, windowRequire, connector } = monitor.panelWin;
+ const { getSortedRequests } = windowRequire(
+ "devtools/client/netmonitor/src/selectors/index"
+ );
+
+ const onNetworkEvents = waitForNetworkEvents(
+ monitor,
+ EXPECTED_REQUESTS.length
+ );
+ await navigateTo(TOP_URL);
+ await onNetworkEvents;
+
+ is(
+ store.getState().requests.requests.length,
+ EXPECTED_REQUESTS.length,
+ "All the page events should be recorded."
+ );
+
+ // Wait for stack traces from all requests.
+ const requests = getSortedRequests(store.getState());
+ await Promise.all(
+ requests.map(requestItem =>
+ connector.requestData(requestItem.id, "stackTrace")
+ )
+ );
+
+ validateRequests(EXPECTED_REQUESTS, monitor, { allowDifferentOrder: true });
+
+ await teardown(monitor);
+});