summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/test/browser_net_http3_request_details.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/netmonitor/test/browser_net_http3_request_details.js')
-rw-r--r--devtools/client/netmonitor/test/browser_net_http3_request_details.js153
1 files changed, 153 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/test/browser_net_http3_request_details.js b/devtools/client/netmonitor/test/browser_net_http3_request_details.js
new file mode 100644
index 0000000000..8ec7aa1b03
--- /dev/null
+++ b/devtools/client/netmonitor/test/browser_net_http3_request_details.js
@@ -0,0 +1,153 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests request details with HTTP/3
+ */
+
+add_task(async function () {
+ const { monitor } = await initNetMonitor(HTTPS_SIMPLE_SJS, {
+ 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));
+
+ const wait = waitForNetworkEvents(monitor, 1);
+ await reloadBrowser();
+ await wait;
+
+ const waitForHeaders = waitForDOM(document, ".headers-overview");
+ store.dispatch(Actions.toggleNetworkDetails());
+ await waitForHeaders;
+
+ info("Assert the content of the headers");
+
+ const tabpanel = document.querySelector("#headers-panel");
+ // Request URL
+ is(
+ tabpanel.querySelector(".url-preview .url").innerText,
+ HTTPS_SIMPLE_SJS,
+ "The url summary value is incorrect."
+ );
+
+ // Request method
+ is(
+ tabpanel.querySelectorAll(".treeLabel")[0].innerText,
+ "GET",
+ "The method summary value is incorrect."
+ );
+ // Status code
+ is(
+ tabpanel.querySelector(".requests-list-status-code").innerText,
+ "200",
+ "The status summary code is incorrect."
+ );
+ is(
+ tabpanel.querySelector(".status").childNodes[1].textContent,
+ "OK",
+ "The status summary value is incorrect."
+ );
+ // Version
+ is(
+ tabpanel.querySelectorAll(".tabpanel-summary-value")[1].innerText,
+ "HTTP/3",
+ "The HTTP version is incorrect."
+ );
+
+ await waitForRequestData(store, ["requestHeaders", "responseHeaders"]);
+
+ is(
+ tabpanel.querySelectorAll(".accordion-item").length,
+ 2,
+ "There should be 2 header scopes displayed in this tabpanel."
+ );
+
+ const headers = [...tabpanel.querySelectorAll(".accordion .treeLabelCell")];
+
+ is(
+ // The Text-Encoding header is not consistently displayed, exclude it from
+ // the assertion. See Bug 1830053.
+ headers.filter(cell => cell.textContent != "TE").length,
+ 25,
+ "There should be 25 header values displayed in this tabpanel."
+ );
+
+ const headersTable = tabpanel.querySelector(".accordion");
+ const responseHeaders = headersTable.querySelectorAll(
+ "tr[id^='/Response Headers']"
+ );
+
+ const expectedHeaders = [
+ {
+ name: "cache-control",
+ value: "no-cache, no-store, must-revalidate",
+ index: 0,
+ },
+ {
+ name: "content-length",
+ value: "12",
+ index: 1,
+ },
+ {
+ name: "content-type",
+ value: "text/plain; charset=utf-8",
+ index: 2,
+ },
+ {
+ name: "foo-bar",
+ value: "baz",
+ index: 6,
+ },
+ ];
+ expectedHeaders.forEach(header => {
+ is(
+ responseHeaders[header.index].querySelector(".treeLabel").innerHTML,
+ header.name,
+ `The response header at index ${header.index} name was incorrect.`
+ );
+ is(
+ responseHeaders[header.index].querySelector(".objectBox").innerHTML,
+ `${header.value}`,
+ `The response header at index ${header.index} value was incorrect.`
+ );
+ });
+
+ info("Assert the content of the raw headers");
+
+ // Click the 'Raw headers' toggle to show original headers source.
+ document.querySelector("#raw-request-checkbox").click();
+ document.querySelector("#raw-response-checkbox").click();
+
+ let rawHeadersElements;
+ await waitUntil(() => {
+ rawHeadersElements = document.querySelectorAll("textarea.raw-headers");
+ // Both raw headers must be present
+ return rawHeadersElements.length > 1;
+ });
+ const requestHeadersText = rawHeadersElements[1].textContent;
+ const rawRequestHeaderFirstLine = requestHeadersText.split(/\r\n|\n|\r/)[0];
+ is(
+ rawRequestHeaderFirstLine,
+ "GET /browser/devtools/client/netmonitor/test/sjs_simple-test-server.sjs HTTP/3"
+ );
+
+ const responseHeadersText = rawHeadersElements[0].textContent;
+ const rawResponseHeaderFirstLine = responseHeadersText.split(/\r\n|\n|\r/)[0];
+ is(rawResponseHeaderFirstLine, "HTTP/3 200 OK");
+
+ info("Assert the content of the protocol column");
+ const target = document.querySelectorAll(".request-list-item")[0];
+ is(
+ target.querySelector(".requests-list-protocol").textContent,
+ "HTTP/3",
+ "The displayed protocol is correct."
+ );
+
+ return teardown(monitor);
+});