summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/test/browser_net_headers_sorted.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /devtools/client/netmonitor/test/browser_net_headers_sorted.js
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/client/netmonitor/test/browser_net_headers_sorted.js')
-rw-r--r--devtools/client/netmonitor/test/browser_net_headers_sorted.js194
1 files changed, 194 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/test/browser_net_headers_sorted.js b/devtools/client/netmonitor/test/browser_net_headers_sorted.js
new file mode 100644
index 0000000000..2965ea8d3c
--- /dev/null
+++ b/devtools/client/netmonitor/test/browser_net_headers_sorted.js
@@ -0,0 +1,194 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests if Request-Headers and Response-Headers are sorted in Headers tab.
+ * The test also verifies that headers with the same name and headers
+ * with an empty value are also displayed.
+ *
+ * The test also checks that raw headers are displayed in the original
+ * order and not sorted.
+ */
+add_task(async function () {
+ const { monitor } = await initNetMonitor(HTTPS_SIMPLE_SJS, {
+ requestCount: 1,
+ });
+ info("Starting test... ");
+
+ const { 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;
+
+ // Verify request and response headers.
+ await verifyHeaders(monitor);
+ await verifyRawHeaders(monitor);
+
+ // Clean up
+ await teardown(monitor);
+});
+
+async function verifyHeaders(monitor) {
+ const { document, store } = monitor.panelWin;
+
+ info("Check if Request-Headers and Response-Headers are sorted");
+
+ const wait = waitForDOM(document, ".headers-overview");
+ EventUtils.sendMouseEvent(
+ { type: "mousedown" },
+ document.querySelectorAll(".request-list-item")[0]
+ );
+ await wait;
+
+ await waitForRequestData(store, ["requestHeaders", "responseHeaders"]);
+
+ const expectedResponseHeaders = [
+ "cache-control",
+ "connection",
+ "content-length",
+ "content-type",
+ "date",
+ "expires",
+ "foo-bar",
+ "foo-bar",
+ "foo-bar",
+ "pragma",
+ "server",
+ "set-cookie",
+ "set-cookie",
+ ];
+ const expectedRequestHeaders = [
+ "Accept",
+ "Accept-Encoding",
+ "Accept-Language",
+ "Cache-Control",
+ "Connection",
+ "Cookie",
+ "Host",
+ "Pragma",
+ "Sec-Fetch-Dest",
+ "Sec-Fetch-Mode",
+ "Sec-Fetch-Site",
+ "Upgrade-Insecure-Requests",
+ "User-Agent",
+ ];
+
+ const responseLabelCells = document.querySelectorAll(
+ "#responseHeaders .treeLabelCell"
+ );
+ const requestLabelCells = document.querySelectorAll(
+ "#requestHeaders .treeLabelCell"
+ );
+ const actualResponseHeaders = [];
+ const actualRequestHeaders = [];
+
+ for (let i = 0; i < responseLabelCells.length; i++) {
+ actualResponseHeaders.push(responseLabelCells[i].innerText);
+ }
+
+ for (let i = 0; i < requestLabelCells.length; i++) {
+ actualRequestHeaders.push(requestLabelCells[i].innerText);
+ }
+
+ is(
+ actualResponseHeaders.toString(),
+ expectedResponseHeaders.toString(),
+ "Response Headers are sorted"
+ );
+
+ is(
+ actualRequestHeaders.toString(),
+ expectedRequestHeaders.toString(),
+ "Request Headers are sorted"
+ );
+}
+
+async function verifyRawHeaders(monitor) {
+ const { document } = monitor.panelWin;
+
+ info("Check if raw Request-Headers and raw Response-Headers are not sorted");
+
+ const actualResponseHeaders = [];
+ const actualRequestHeaders = [];
+
+ const expectedResponseHeaders = [
+ "cache-control",
+ "pragma",
+ "expires",
+ "set-cookie",
+ "set-cookie",
+ "content-type",
+ "foo-bar",
+ "foo-bar",
+ "foo-bar",
+ "connection",
+ "server",
+ "date",
+ "content-length",
+ ];
+
+ const expectedRequestHeaders = [
+ "Host",
+ "User-Agent",
+ "Accept",
+ "Accept-Language",
+ "Accept-Encoding",
+ "Connection",
+ "Cookie",
+ "Upgrade-Insecure-Requests",
+ "Sec-Fetch-Dest",
+ "Sec-Fetch-Mode",
+ "Sec-Fetch-Site",
+ "Pragma",
+ "Cache-Control",
+ ];
+
+ // Click the 'Raw headers' toggle to show original headers source.
+ for (const rawToggleInput of document.querySelectorAll(
+ ".devtools-checkbox-toggle"
+ )) {
+ rawToggleInput.click();
+ }
+
+ // Wait till raw headers are available.
+ let rawArr;
+ await waitUntil(() => {
+ rawArr = document.querySelectorAll("textarea.raw-headers");
+ // Both raw headers must be present
+ return rawArr.length > 1;
+ });
+
+ // Request headers are rendered first, so it is element with index 1
+ const requestHeadersText = rawArr[1].textContent;
+ // Response headers are rendered first, so it is element with index 0
+ const responseHeadersText = rawArr[0].textContent;
+
+ const rawRequestHeadersArray = requestHeadersText.split("\n");
+ for (let i = 1; i < rawRequestHeadersArray.length; i++) {
+ const header = rawRequestHeadersArray[i];
+ actualRequestHeaders.push(header.split(":")[0]);
+ }
+
+ const rawResponseHeadersArray = responseHeadersText.split("\n");
+ for (let i = 1; i < rawResponseHeadersArray.length; i++) {
+ const header = rawResponseHeadersArray[i];
+ actualResponseHeaders.push(header.split(":")[0]);
+ }
+
+ is(
+ actualResponseHeaders.toString(),
+ expectedResponseHeaders.toString(),
+ "Raw Response Headers are not sorted"
+ );
+
+ is(
+ actualRequestHeaders.toString(),
+ expectedRequestHeaders.toString(),
+ "Raw Request Headers are not sorted"
+ );
+}