summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/test/browser_net_post-data-raw-payloads-with-upload-stream-headers.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/netmonitor/test/browser_net_post-data-raw-payloads-with-upload-stream-headers.js')
-rw-r--r--devtools/client/netmonitor/test/browser_net_post-data-raw-payloads-with-upload-stream-headers.js202
1 files changed, 202 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/test/browser_net_post-data-raw-payloads-with-upload-stream-headers.js b/devtools/client/netmonitor/test/browser_net_post-data-raw-payloads-with-upload-stream-headers.js
new file mode 100644
index 0000000000..403aa48906
--- /dev/null
+++ b/devtools/client/netmonitor/test/browser_net_post-data-raw-payloads-with-upload-stream-headers.js
@@ -0,0 +1,202 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests if the POST requests display the correct information in the UI,
+ * for raw payloads with content-type headers attached to the upload stream.
+ */
+add_task(async function () {
+ const {
+ L10N,
+ } = require("resource://devtools/client/netmonitor/src/utils/l10n.js");
+
+ const { tab, monitor } = await initNetMonitor(POST_RAW_WITH_HEADERS_URL, {
+ 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));
+
+ // Execute requests.
+ await performRequests(monitor, tab, 3);
+
+ const expectedRequestsContent = [
+ {
+ headersFromUploadSectionTitle:
+ "Request headers from upload stream (47 B)",
+ uploadSectionHeaders: [
+ { label: "content-type", value: "application/x-www-form-urlencoded" },
+ ],
+ uploadSectionRawText: "content-type: application/x-www-form-urlencoded",
+ requestPanelFormData: [
+ { label: "foo", value: '"bar"' },
+ { label: "baz", value: '"123"' },
+ ],
+ requestPanelPayload: [
+ "content-type: application/x-www-form-urlencoded",
+ "foo=bar&baz=123",
+ ],
+ },
+ {
+ headersFromUploadSectionTitle:
+ "Request headers from upload stream (47 B)",
+ uploadSectionHeaders: [
+ { label: "content-type", value: "application/x-www-form-urlencoded" },
+ ],
+ uploadSectionRawText: "content-type: application/x-www-form-urlencoded",
+ requestPanelPayload: ["content-type: application/x-www-form-urlencoded"],
+ },
+ {
+ headersFromUploadSectionTitle:
+ "Request headers from upload stream (74 B)",
+ uploadSectionHeaders: [
+ { label: "content-type", value: "application/x-www-form-urlencoded" },
+ { label: "custom-header", value: "hello world!" },
+ ],
+ uploadSectionRawText:
+ "content-type: application/x-www-form-urlencoded\r\ncustom-header: hello world!",
+ requestPanelFormData: [
+ { label: "foo", value: '"bar"' },
+ { label: "baz", value: '"123"' },
+ ],
+ requestPanelPayload: [
+ "content-type: application/x-www-form-urlencoded",
+ "custom-header: hello world!",
+ "foo=bar&baz=123",
+ ],
+ },
+ ];
+
+ const requests = document.querySelectorAll(".request-list-item");
+ store.dispatch(Actions.toggleNetworkDetails());
+
+ for (let i = 0; i < expectedRequestsContent.length; i++) {
+ EventUtils.sendMouseEvent({ type: "mousedown" }, requests[i]);
+ await assertRequestContentInHeaderAndRequestSidePanels(
+ expectedRequestsContent[i]
+ );
+ }
+
+ async function assertRequestContentInHeaderAndRequestSidePanels(expected) {
+ // Wait for all 3 headers sections to load (Response Headers, Request Headers, Request headers from upload stream)
+ let wait = waitForDOM(document, "#headers-panel .accordion-item", 3);
+ clickOnSidebarTab(document, "headers");
+ await wait;
+
+ let tabpanel = document.querySelector("#headers-panel");
+ is(
+ tabpanel.querySelectorAll(".accordion-item").length,
+ 3,
+ "There should be 3 header sections displayed in this tabpanel."
+ );
+
+ info("Check that the Headers in the upload stream section are correct.");
+ is(
+ tabpanel.querySelectorAll(".accordion-item .accordion-header-label")[2]
+ .textContent,
+ expected.headersFromUploadSectionTitle,
+ "The request headers from upload section doesn't have the correct title."
+ );
+
+ let labels = tabpanel.querySelectorAll(
+ ".accordion-item:last-child .accordion-content tr .treeLabelCell .treeLabel"
+ );
+ let values = tabpanel.querySelectorAll(
+ ".accordion-item:last-child .accordion-content tr .treeValueCell .objectBox"
+ );
+
+ for (let i = 0; i < labels.length; i++) {
+ is(
+ labels[i].textContent,
+ expected.uploadSectionHeaders[i].label,
+ "The request header name was incorrect."
+ );
+ is(
+ values[i].textContent,
+ expected.uploadSectionHeaders[i].value,
+ "The request header value was incorrect."
+ );
+ }
+
+ info(
+ "Toggle to open the raw view for the request headers from upload stream"
+ );
+
+ wait = waitForDOM(
+ tabpanel,
+ ".accordion-item:last-child .accordion-content .raw-headers-container"
+ );
+ tabpanel.querySelector("#raw-upload-checkbox").click();
+ await wait;
+
+ const rawTextArea = tabpanel.querySelector(
+ ".accordion-item:last-child .accordion-content .raw-headers"
+ );
+ is(
+ rawTextArea.textContent,
+ expected.uploadSectionRawText,
+ "The raw text for the request headers from upload section is correct"
+ );
+
+ info("Switch to the Request panel");
+
+ wait = waitForDOM(document, "#request-panel .panel-container");
+ clickOnSidebarTab(document, "request");
+ await wait;
+
+ tabpanel = document.querySelector("#request-panel");
+ if (expected.requestPanelFormData) {
+ await waitUntil(
+ () =>
+ tabpanel.querySelector(".data-label").textContent ==
+ L10N.getStr("paramsFormData")
+ );
+
+ labels = tabpanel.querySelectorAll("tr .treeLabelCell .treeLabel");
+ values = tabpanel.querySelectorAll("tr .treeValueCell .objectBox");
+
+ for (let i = 0; i < labels.length; i++) {
+ is(
+ labels[i].textContent,
+ expected.requestPanelFormData[i].label,
+ "The form data param name was incorrect."
+ );
+ is(
+ values[i].textContent,
+ expected.requestPanelFormData[i].value,
+ "The form data param value was incorrect."
+ );
+ }
+
+ info("Toggle open the the request payload raw view");
+
+ tabpanel.querySelector("#raw-request-checkbox").click();
+ }
+ await waitUntil(
+ () =>
+ tabpanel.querySelector(".data-label").textContent ==
+ L10N.getStr("paramsPostPayload") &&
+ tabpanel.querySelector(
+ ".panel-container .editor-row-container .CodeMirror-code"
+ )
+ );
+
+ // Check that the expected header lines are included in the codemirror
+ // text.
+ const actualText = tabpanel.querySelector(
+ ".panel-container .editor-row-container .CodeMirror-code"
+ ).textContent;
+ const requestPayloadIsCorrect = expected.requestPanelPayload.every(
+ content => actualText.includes(content)
+ );
+
+ is(requestPayloadIsCorrect, true, "The request payload is not correct");
+ }
+
+ return teardown(monitor);
+});