116 lines
3 KiB
JavaScript
116 lines
3 KiB
JavaScript
"use strict";
|
|
|
|
const TEST_PATH_HTTP = getRootDirectory(gTestPath).replace(
|
|
"chrome://mochitests/content",
|
|
"http://example.com"
|
|
);
|
|
|
|
const TIMEOUT_PAGE_URI_HTTP =
|
|
TEST_PATH_HTTP + "file_httpsfirst_timeout_server.sjs";
|
|
|
|
async function runPrefTest(aURI, aDesc, aAssertURLStartsWith) {
|
|
await BrowserTestUtils.withNewTab("about:blank", async function (browser) {
|
|
const loaded = BrowserTestUtils.browserLoaded(browser, false, null, true);
|
|
BrowserTestUtils.startLoadingURIString(browser, aURI);
|
|
await loaded;
|
|
|
|
await ContentTask.spawn(
|
|
browser,
|
|
{ aDesc, aAssertURLStartsWith },
|
|
function ({ aDesc, aAssertURLStartsWith }) {
|
|
ok(
|
|
content.document.location.href.startsWith(aAssertURLStartsWith),
|
|
aDesc
|
|
);
|
|
}
|
|
);
|
|
|
|
await SpecialPowers.removePermission("https-only-load-insecure", aURI);
|
|
});
|
|
}
|
|
|
|
add_task(async function () {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["dom.security.https_first", false]],
|
|
});
|
|
Services.fog.testResetFOG();
|
|
|
|
await runPrefTest(
|
|
"http://example.com",
|
|
"HTTPS-First disabled; Should not upgrade",
|
|
"http://"
|
|
);
|
|
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["dom.security.https_first", true]],
|
|
});
|
|
|
|
for (const key of [
|
|
"upgraded",
|
|
"upgradedSchemeless",
|
|
"downgraded",
|
|
"downgradedSchemeless",
|
|
"downgradedOnTimer",
|
|
"downgradedOnTimerSchemeless",
|
|
"downgradeTime",
|
|
"downgradeTimeSchemeless",
|
|
]) {
|
|
is(
|
|
Glean.httpsfirst[key].testGetValue(),
|
|
null,
|
|
`No telemetry should have been recorded yet for ${key}`
|
|
);
|
|
}
|
|
|
|
await runPrefTest(
|
|
"http://example.com",
|
|
"Should upgrade upgradeable website",
|
|
"https://"
|
|
);
|
|
|
|
await runPrefTest(
|
|
"http://httpsfirst.com",
|
|
"Should downgrade after error.",
|
|
"http://"
|
|
);
|
|
|
|
await runPrefTest(
|
|
"http://httpsfirst.com/?https://httpsfirst.com",
|
|
"Should downgrade after error and leave query params untouched.",
|
|
"http://httpsfirst.com/?https://httpsfirst.com"
|
|
);
|
|
|
|
await runPrefTest(
|
|
"http://domain.does.not.exist.example.com",
|
|
"Should not downgrade on dnsNotFound error.",
|
|
"https://"
|
|
);
|
|
|
|
await runPrefTest(
|
|
TIMEOUT_PAGE_URI_HTTP,
|
|
"Should downgrade after timeout.",
|
|
"http://"
|
|
);
|
|
|
|
await runPrefTest(
|
|
"http://invalid.example.com",
|
|
"Should downgrade non-reachable site.",
|
|
"http://"
|
|
);
|
|
|
|
info("Checking expected telemetry");
|
|
is(Glean.httpsfirst.upgraded.testGetValue(), 1);
|
|
is(Glean.httpsfirst.upgradedSchemeless.testGetValue(), null);
|
|
is(Glean.httpsfirst.downgraded.testGetValue(), 3);
|
|
is(Glean.httpsfirst.downgradedSchemeless.testGetValue(), null);
|
|
is(Glean.httpsfirst.downgradedOnTimer.testGetValue().numerator, 1);
|
|
is(Glean.httpsfirst.downgradedOnTimerSchemeless.testGetValue(), null);
|
|
const downgradeSeconds =
|
|
Glean.httpsfirst.downgradeTime.testGetValue().sum / 1_000_000_000;
|
|
Assert.less(
|
|
downgradeSeconds,
|
|
10,
|
|
"Summed downgrade time should be below 10 seconds"
|
|
);
|
|
is(null, Glean.httpsfirst.downgradeTimeSchemeless.testGetValue());
|
|
});
|