Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Tests if showing raw headers works.
*/
add_task(async function () {
const { tab, monitor } = await initNetMonitor(POST_DATA_URL, {
requestCount: 1,
});
info("Starting test... ");
const { document, store, windowRequire } = monitor.panelWin;
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
const { getSortedRequests } = windowRequire(
"devtools/client/netmonitor/src/selectors/index"
);
store.dispatch(Actions.batchEnable(false));
// Execute requests.
await performRequests(monitor, tab, 2);
let wait = waitForDOM(document, "#headers-panel .accordion-item", 2);
EventUtils.sendMouseEvent(
{ type: "mousedown" },
document.querySelectorAll(".request-list-item")[0]
);
await wait;
wait = waitForDOM(document, "#responseHeaders textarea.raw-headers", 1);
EventUtils.sendMouseEvent({ type: "click" }, getRawHeadersToggle("RESPONSE"));
await wait;
wait = waitForDOM(document, "#requestHeaders textarea.raw-headers", 1);
EventUtils.sendMouseEvent({ type: "click" }, getRawHeadersToggle("REQUEST"));
await wait;
testRawHeaderToggleStyle(true);
testShowRawHeaders(getSortedRequests(store.getState())[0]);
EventUtils.sendMouseEvent({ type: "click" }, getRawHeadersToggle("RESPONSE"));
EventUtils.sendMouseEvent({ type: "click" }, getRawHeadersToggle("REQUEST"));
testRawHeaderToggleStyle(false);
testHideRawHeaders(document);
return teardown(monitor);
/**
* Tests that checked is applied correctly
*
* @param checked
* flag indicating whether toggle is checked or not
*/
function testRawHeaderToggleStyle(checked) {
const rawHeadersRequestToggle = getRawHeadersToggle("REQUEST");
const rawHeadersResponseToggle = getRawHeadersToggle("RESPONSE");
if (checked) {
is(
rawHeadersRequestToggle.checked,
true,
"The 'Raw Request Headers' toggle should be 'checked'"
);
is(
rawHeadersResponseToggle.checked,
true,
"The 'Raw Response Headers' toggle should be 'checked'"
);
} else {
is(
rawHeadersRequestToggle.checked,
false,
"The 'Raw Request Headers' toggle should NOT be 'checked'"
);
is(
rawHeadersResponseToggle.checked,
false,
"The 'Raw Response Headers' toggle should NOT be 'checked'"
);
}
}
/*
* Tests that raw headers were displayed correctly
*/
function testShowRawHeaders(data) {
// Request headers are rendered first, so it is element with index 1
const requestHeaders = document.querySelectorAll("textarea.raw-headers")[1]
.value;
for (const header of data.requestHeaders.headers) {
ok(
requestHeaders.includes(header.name + ": " + header.value),
"textarea contains request headers"
);
}
// Response headers are rendered first, so it is element with index 0
const responseHeaders = document.querySelectorAll("textarea.raw-headers")[0]
.value;
for (const header of data.responseHeaders.headers) {
ok(
responseHeaders.includes(header.name + ": " + header.value),
"textarea contains response headers"
);
}
}
/*
* Tests that raw headers textareas are hidden
*/
function testHideRawHeaders() {
ok(
!document.querySelector(".raw-headers-container"),
"raw request headers textarea is empty"
);
}
/**
* Returns the 'Raw Headers' button
*/
function getRawHeadersToggle(rawHeaderType) {
if (rawHeaderType === "RESPONSE") {
// Response header is first displayed
return document.querySelectorAll(".devtools-checkbox-toggle")[0];
}
return document.querySelectorAll(".devtools-checkbox-toggle")[1];
}
});