Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

"use strict";
function waitForEnabledButton() {
return new Promise(resolve => {
const button = content.document.getElementById("openInsecure");
const observer = new content.MutationObserver(mutations => {
for (const mutation of mutations) {
if (
mutation.type === "attributes" &&
mutation.attributeName === "inert" &&
!mutation.target.inert
) {
resolve();
}
}
});
observer.observe(button, { attributeFilter: ["inert"] });
ok(
button.inert,
"The 'Continue to HTTP Site' button should be inert right after the error page is loaded."
);
});
}
add_task(async function () {
waitForExplicitFinish();
await SpecialPowers.pushPrefEnv({
set: [["dom.security.https_only_mode", true]],
});
const specifiedDelay = Services.prefs.getIntPref(
"security.dialog_enable_delay",
1000
);
let loaded = BrowserTestUtils.waitForErrorPage(gBrowser.selectedBrowser);
info("Loading insecure page");
const startTime = Date.now();
BrowserTestUtils.startLoadingURIString(
gBrowser,
// We specifically want a insecure url here that will fail to upgrade
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
);
await loaded;
await SpecialPowers.spawn(gBrowser.selectedBrowser, [], waitForEnabledButton);
const endTime = Date.now();
const observedDelay = endTime - startTime;
Assert.greater(
observedDelay,
specifiedDelay - 100,
`The observed delay (${observedDelay}ms) should be roughly the same or greater than the delay specified in "security.dialog_enable_delay" (${specifiedDelay}ms)`
);
finish();
});