The `gBrowser.reloadTab` method was doing a very light reload, which could preserve iframe overriden locations. The new method ensures we load the original HTML content back, this seems to also have an impact on keep-alive which is not longer guaranteed. Only supports reloading the currently selected tab, to better replicate real user scenarios. But also to comply to `BrowserCommands.reload`, which only supports reloading the selected tab. Also tune the har test, now that requests are really cancelled and we may try to fetch reponse content for such request. Differential Revision: https://phabricator.services.mozilla.com/D277433
212 lines
6.1 KiB
JavaScript
212 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 reloadSelectedTab();
|
|
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 reloadSelectedTab();
|
|
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);
|
|
});
|