211 lines
6.1 KiB
JavaScript
211 lines
6.1 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"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);
|
|
});
|