85 lines
2.5 KiB
JavaScript
85 lines
2.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const { HttpServer } = ChromeUtils.importESModule(
|
|
"resource://testing-common/httpd.sys.mjs"
|
|
);
|
|
|
|
const gOverride = Cc["@mozilla.org/network/native-dns-override;1"].getService(
|
|
Ci.nsINativeDNSResolverOverride
|
|
);
|
|
|
|
const DOMAIN_NAME = "example.com";
|
|
const HTTPS_FIRST = "dom.security.https_first";
|
|
|
|
registerCleanupFunction(function () {
|
|
Services.prefs.clearUserPref(HTTPS_FIRST);
|
|
});
|
|
|
|
function waitForStatusChange(browser, expectedMessage) {
|
|
return new Promise(resolve => {
|
|
let listener = {
|
|
QueryInterface: ChromeUtils.generateQI([
|
|
"nsIWebProgressListener",
|
|
"nsISupportsWeakReference",
|
|
]),
|
|
|
|
onStatusChange(webProgress, request, status, message) {
|
|
info(`onStatusChange: ${message}`);
|
|
// When we catch the correct message
|
|
if (message === expectedMessage) {
|
|
browser.webProgress.removeProgressListener(listener);
|
|
resolve({ message });
|
|
}
|
|
},
|
|
onProgressChange() {},
|
|
onLocationChange() {},
|
|
onSecurityChange() {},
|
|
onStateChange() {},
|
|
onContentBlockingEvent() {},
|
|
};
|
|
|
|
browser.webProgress.addProgressListener(
|
|
listener,
|
|
Ci.nsIWebProgress.NOTIFY_STATUS
|
|
);
|
|
});
|
|
}
|
|
|
|
add_task(async function test_domain_change() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [[HTTPS_FIRST, false]],
|
|
});
|
|
|
|
gOverride.addIPOverride(DOMAIN_NAME, "127.0.0.1");
|
|
let server = new HttpServer();
|
|
server.start(-1);
|
|
registerCleanupFunction(async () => {
|
|
await server.stop();
|
|
gOverride.clearOverrides();
|
|
});
|
|
|
|
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
|
|
let serverURL = `http://${DOMAIN_NAME}:${server.identity.primaryPort}/`;
|
|
server.identity.add("http", DOMAIN_NAME, server.identity.primaryPort);
|
|
|
|
server.registerPathHandler("/", (request, response) => {
|
|
response.setStatusLine(request.httpVersion, 200, "OK");
|
|
response.setHeader("Content-Type", "text/html");
|
|
const BODY = `testing..`;
|
|
response.bodyOutputStream.write(BODY, BODY.length);
|
|
});
|
|
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["network.proxy.no_proxies_on", DOMAIN_NAME]],
|
|
});
|
|
|
|
let browser = gBrowser.selectedBrowser;
|
|
let expectedMessage = `Transferring data from ${DOMAIN_NAME}…`;
|
|
let statusPromise = waitForStatusChange(browser, expectedMessage);
|
|
BrowserTestUtils.startLoadingURIString(browser, serverURL);
|
|
let { message } = await statusPromise;
|
|
is(message, expectedMessage, "Status message was received correctly");
|
|
});
|