/* Any copyright is dedicated to the Public Domain.
https://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// Test that HTTPS-Only takes precedence over schemeless HTTPS-First by checking
// that the HTTPSFIRST_LOAD_INSECURE_ALLOW permission is only respected on
// schemeless inputs when HTTPS-Only is disabled.
ChromeUtils.defineLazyGetter(
this,
"UrlbarTestUtils", () => {
const { UrlbarTestUtils: module } = ChromeUtils.importESModule(
"resource://testing-common/UrlbarTestUtils.sys.mjs"
);
module.init(
this);
return module;
});
function runTest(aExpectedScheme, aDesc) {
return BrowserTestUtils.withNewTab(
"about:blank", async
function (browser) {
const loaded = BrowserTestUtils.browserLoaded(browser,
false,
null,
true);
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value:
"example.com",
});
EventUtils.synthesizeKey(
"KEY_Enter");
await loaded;
is(browser.currentURI.scheme, aExpectedScheme, aDesc);
});
}
add_task(async
function test_schemeless() {
Services.perms.addFromPrincipal(
Services.scriptSecurityManager.createContentPrincipalFromOrigin(
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
"http://example.com"
),
"https-only-load-insecure",
Ci.nsIHttpsOnlyModePermission.HTTPSFIRST_LOAD_INSECURE_ALLOW
);
await SpecialPowers.pushPrefEnv({
set: [
[
"dom.security.https_first",
true],
[
"dom.security.https_first_schemeless",
true],
],
});
await runTest(
"http",
"HTTPSFIRST_LOAD_INSECURE_ALLOW should apply if HTTPS-Only is disabled"
);
await SpecialPowers.pushPrefEnv({
set: [[
"dom.security.https_only_mode",
true]],
});
await runTest(
"https",
"HTTPSFIRST_LOAD_INSECURE_ALLOW should not apply if HTTPS-Only is enabled"
);
Services.perms.removeAll();
});