fune/dom/security/test/https-first/browser_httpsfirst.js
Malte Juergens b93092a9f4 Bug 1891185 - Collect different downgrade time on timer for HTTPS-First telemetry r=freddyb
It does not make sense to collect the "downgrade time" as we currently do it
when a upgrade was caused by a faster http request on a timer. We can not
compare the navigation start timestamp with the current time, as the replacing
http channel has started loading earlier than the current time. So leave out the
case where the downgrade happens because of a faster http request on the timer,
as we already know that the time overhead there is exactly 3s.

Differential Revision: https://phabricator.services.mozilla.com/D207338
2024-04-29 13:52:15 +00:00

108 lines
2.8 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
);
}
);
});
}
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",
"Should not downgrade on dnsNotFound error.",
"https://"
);
await runPrefTest(
TIMEOUT_PAGE_URI_HTTP,
"Should downgrade after timeout.",
"http://"
);
info("Checking expected telemetry");
is(Glean.httpsfirst.upgraded.testGetValue(), 5);
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());
});