From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../netmonitor/test/browser_net_headers_sorted.js | 194 +++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 devtools/client/netmonitor/test/browser_net_headers_sorted.js (limited to 'devtools/client/netmonitor/test/browser_net_headers_sorted.js') 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" + ); +} -- cgit v1.2.3