100 lines
3.0 KiB
JavaScript
100 lines
3.0 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
const { HttpServer } = ChromeUtils.importESModule(
|
|
"resource://testing-common/httpd.sys.mjs"
|
|
);
|
|
|
|
// eslint-disable-next-line mozilla/no-redeclare-with-import-autofix
|
|
const { ProxyConfiguration } = ChromeUtils.importESModule(
|
|
"chrome://remote/content/shared/webdriver/Capabilities.sys.mjs"
|
|
);
|
|
|
|
add_task(async function test_global_manual_http_proxy() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["network.proxy.allow_hijacking_localhost", true]],
|
|
});
|
|
|
|
const server = new HttpServer();
|
|
server.start(-1);
|
|
server.registerPathHandler("/", (request, response) => {
|
|
response.setStatusLine(request.httpVersion, 200, "OK");
|
|
response.setHeader("Content-Type", "text/plain", true);
|
|
response.write("Not proxied");
|
|
});
|
|
const SERVER_URL = `http://localhost:${server.identity.primaryPort}`;
|
|
|
|
const proxyServer = new HttpServer();
|
|
proxyServer.start(-1);
|
|
proxyServer.identity.add("http", "localhost", server.identity.primaryPort);
|
|
proxyServer.registerPathHandler("/", (request, response) => {
|
|
response.setStatusLine(request.httpVersion, 200, "OK");
|
|
response.setHeader("Content-Type", "text/plain", true);
|
|
response.write("Proxied");
|
|
});
|
|
const PROXY_URL = `localhost:${proxyServer.identity.primaryPort}`;
|
|
|
|
const tab = BrowserTestUtils.addTab(gBrowser, SERVER_URL);
|
|
const browser = tab.linkedBrowser;
|
|
|
|
info("Verify that navigation request is not proxied");
|
|
let loadedPromise = BrowserTestUtils.browserLoaded(browser);
|
|
BrowserTestUtils.startLoadingURIString(browser, SERVER_URL);
|
|
await loadedPromise;
|
|
|
|
await SpecialPowers.spawn(browser, [], async () => {
|
|
Assert.strictEqual(
|
|
content.document.body.textContent,
|
|
"Not proxied",
|
|
"The page was not proxied"
|
|
);
|
|
});
|
|
|
|
info("Set the global manual proxy");
|
|
|
|
const globalProxy = ProxyConfiguration.fromJSON({
|
|
proxyType: "manual",
|
|
httpProxy: PROXY_URL,
|
|
});
|
|
|
|
globalProxy.init();
|
|
|
|
info("Verify that navigation request is proxied");
|
|
loadedPromise = BrowserTestUtils.browserLoaded(browser);
|
|
BrowserTestUtils.startLoadingURIString(browser, SERVER_URL);
|
|
await loadedPromise;
|
|
|
|
await SpecialPowers.spawn(browser, [], async () => {
|
|
Assert.strictEqual(
|
|
content.document.body.textContent,
|
|
"Proxied",
|
|
"The page was proxied"
|
|
);
|
|
});
|
|
|
|
info("Destroy the proxy configuration");
|
|
|
|
globalProxy.destroy();
|
|
|
|
info("Verify that navigation request is not proxied");
|
|
loadedPromise = BrowserTestUtils.browserLoaded(browser);
|
|
BrowserTestUtils.startLoadingURIString(browser, SERVER_URL);
|
|
await loadedPromise;
|
|
|
|
await SpecialPowers.spawn(browser, [], async () => {
|
|
Assert.strictEqual(
|
|
content.document.body.textContent,
|
|
"Not proxied",
|
|
"The page was not proxied"
|
|
);
|
|
});
|
|
|
|
BrowserTestUtils.removeTab(tab);
|
|
|
|
server.stop();
|
|
proxyServer.stop();
|
|
});
|