Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
// Test that the proxy information is displayed in the netmonitor
add_task(async function () {
const { monitor } = await initNetMonitor(HTTPS_CUSTOM_GET_URL, {
requestCount: 1,
});
info("Starting test... ");
const { document } = monitor.panelWin;
const wait = waitForNetworkEvents(monitor, 1);
await reloadBrowser();
await wait;
// Wait until the tab panel summary is displayed
const waitForTab = waitUntil(() =>
document.querySelector(".tabpanel-summary-label")
);
EventUtils.sendMouseEvent(
{ type: "mousedown" },
document.querySelector(".request-list-item")
);
await waitForTab;
// Expand preview
await toggleUrlPreview(true, monitor);
const proxyAddressEl = [...document.querySelectorAll(".treeRow")].find(
el => el.querySelector(".treeLabelCell")?.textContent === "Proxy Address"
);
is(
proxyAddressEl.querySelector(".treeValueCell").innerText,
"127.0.0.1:4443",
"The remote proxy address summary value is correct."
);
is(
document.querySelector(".headers-proxy-status .headers-summary-label")
.textContent,
"Proxy Status",
"The proxy status header is displayed"
);
is(
document.querySelector(".headers-proxy-status .tabpanel-summary-value")
.textContent,
"200Connected",
"The proxy status value showed correctly"
);
is(
document.querySelector(".headers-proxy-version .tabpanel-summary-label")
.textContent,
"Proxy Version",
"The proxy http version header is displayed"
);
is(
document.querySelector(".headers-proxy-version .tabpanel-summary-value")
.textContent,
"HTTP/1.1",
"The proxy http version value showed correctly"
);
await teardown(monitor);
});
const noProxyServerUrl = createTestHTTPServer();
noProxyServerUrl.registerPathHandler("/index.html", (request, response) => {
response.setStatusLine(request.httpVersion, 200, "OK");
response.setHeader("Content-Type", "text/html", true);
response.write("<html> SIMPLE DOCUMENT </html>");
});
const NO_PROXY_SERVER_URL = `http://localhost:${noProxyServerUrl.identity.primaryPort}`;
// Test that the proxy information is not displayed in the netmonitor
add_task(async function () {
const { monitor } = await initNetMonitor(NO_PROXY_SERVER_URL, {
requestCount: 1,
});
info("Starting test... ");
const { document } = monitor.panelWin;
const wait = waitForNetworkEvents(monitor, 1);
await reloadBrowser();
await wait;
// Wait until the tab panel summary is displayed
const waitForTab = waitUntil(() =>
document.querySelector(".tabpanel-summary-label")
);
EventUtils.sendMouseEvent(
{ type: "mousedown" },
document.querySelector(".request-list-item")
);
await waitForTab;
// Expand preview
await toggleUrlPreview(true, monitor);
const addressEl = [...document.querySelectorAll(".treeRow")].find(
el => el.querySelector(".treeLabelCell")?.textContent === "Address"
);
ok(addressEl, "The address is not the proxy address");
ok(
!document.querySelector(".headers-proxy-status"),
"The proxy status header is not displayed"
);
ok(
!document.querySelector(".headers-proxy-version"),
"The proxy http version header is not displayed"
);
await teardown(monitor);
});
const serverBehindFakeProxy = createTestHTTPServer();
const fakeProxy = createTestHTTPServer();
fakeProxy.identity.add(
"http",
"localhost",
serverBehindFakeProxy.identity.primaryPort
);
fakeProxy.registerPrefixHandler("/", (request, response) => {
if (request.hasHeader("Proxy-Authorization")) {
response.setStatusLine(request.httpVersion, 200, "OK");
response.setHeader("Content-Type", "text/html", true);
response.write("ok, got proxy auth");
} else {
response.setStatusLine(
request.httpVersion,
407,
"Proxy authentication required"
);
response.setHeader("Content-Type", "text/plain", false);
response.setHeader("Proxy-Authenticate", 'Basic realm="foobar"', false);
response.write("auth required");
}
});
const SERVER_URL = `http://localhost:${serverBehindFakeProxy.identity.primaryPort}`;
// Test that `Proxy-Authorization` request header is not shown for in the headers panel
add_task(async function () {
await pushPref("network.proxy.type", 1);
await pushPref("network.proxy.http", "localhost");
await pushPref("network.proxy.http_port", fakeProxy.identity.primaryPort);
await pushPref("network.proxy.allow_hijacking_localhost", true);
// Wait for initial primary password dialog after opening the tab.
const onDialog = TestUtils.topicObserved("common-dialog-loaded");
const tab = await addTab(SERVER_URL, { waitForLoad: false });
const toolbox = await gDevTools.showToolboxForTab(tab, {
toolId: "netmonitor",
});
info("Network monitor pane shown successfully.");
const monitor = toolbox.getCurrentPanel();
const { document, store, windowRequire } = monitor.panelWin;
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
store.dispatch(Actions.batchEnable(false));
const [subject] = await onDialog;
const dialog = subject.Dialog;
ok(true, `Authentication dialog displayed`);
info("Fill in login and password, and validate dialog");
dialog.ui.loginTextbox.value = "user";
dialog.ui.password1Textbox.value = "pass";
const onDialogClosed = BrowserTestUtils.waitForEvent(
window,
"DOMModalDialogClosed"
);
dialog.ui.button0.click();
await onDialogClosed;
ok(true, "Dialog is closed");
const requestEl = await waitFor(() =>
document.querySelector(".request-list-item")
);
EventUtils.sendMouseEvent({ type: "mousedown" }, requestEl);
await waitUntil(() => document.querySelector(".headers-overview"));
const headersPanel = document.querySelector("#headers-panel");
const headerIsFound = [
...headersPanel.querySelectorAll("tr .treeLabelCell .treeLabel"),
].some(headerEl => headerEl.innerText == "Proxy-Authorization");
ok(
!headerIsFound,
"The `Proxy-Authorization` should not be displayed in the Headers panel"
);
await teardown(monitor);
});