Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'linux' && os_version == '18.04' && processor == 'x86_64' OR os == 'win' && os_version == '11.2009' && debug OR os == 'win' && os_version == '11.2009' && asan OR os == 'mac' && os_version == '10.15' && processor == 'x86_64' && debug
- Manifest: toolkit/components/httpsonlyerror/tests/browser/browser.toml
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
"use strict";
const { TabStateFlusher } = ChromeUtils.importESModule(
"resource:///modules/sessionstore/TabStateFlusher.sys.mjs"
);
add_task(async function () {
info("Check that the error pages shows up");
await Promise.all([
testPageWithURI(
GOOD_PAGE,
"Should not show error page on upgradeable website.",
false
),
testPageWithURI(
BAD_CERT,
"Should show error page on bad-certificate error.",
true
),
testPageWithURI(
UNKNOWN_ISSUER,
"Should show error page on unkown-issuer error.",
true
),
]);
});
add_task(async function () {
info("Check that the go-back button returns to previous page");
// Test with and without being in an iFrame
for (let useFrame of [false, true]) {
let tab = await openErrorPage(BAD_CERT, useFrame);
let browser = tab.linkedBrowser;
is(
browser.webNavigation.canGoBack,
false,
"!webNavigation.canGoBack should be false."
);
is(
browser.webNavigation.canGoForward,
false,
"webNavigation.canGoForward should be false."
);
// Populate the shistory entries manually, since it happens asynchronously
// and the following tests will be too soon otherwise.
await TabStateFlusher.flush(browser);
let { entries } = JSON.parse(SessionStore.getTabState(tab));
is(entries.length, 1, "There should be 1 shistory entry.");
let bc = browser.browsingContext;
if (useFrame) {
bc = bc.children[0];
}
if (useFrame) {
await SpecialPowers.spawn(bc, [], async function () {
let returnButton = content.document.getElementById("goBack");
is(
returnButton,
null,
"Return-button should not be present in iFrame."
);
});
} else {
let locationChangePromise = BrowserTestUtils.waitForLocationChange(
gBrowser,
"about:home"
);
await SpecialPowers.spawn(bc, [], async function () {
let returnButton = content.document.getElementById("goBack");
is(
returnButton.getAttribute("autofocus"),
"true",
"Return-button should have focus."
);
returnButton.click();
});
await locationChangePromise;
is(browser.webNavigation.canGoBack, true, "webNavigation.canGoBack");
is(
browser.webNavigation.canGoForward,
false,
"!webNavigation.canGoForward"
);
is(gBrowser.currentURI.spec, "about:home", "Went back");
}
BrowserTestUtils.removeTab(gBrowser.selectedTab);
}
});
add_task(async function () {
info("Check that the go-back button returns to about:home");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, SECURE_PAGE);
let browser = gBrowser.selectedBrowser;
let errorPageLoaded = BrowserTestUtils.waitForErrorPage(browser);
BrowserTestUtils.startLoadingURIString(browser, BAD_CERT);
await errorPageLoaded;
is(
browser.webNavigation.canGoBack,
true,
"webNavigation.canGoBack should be true before navigation."
);
is(
browser.webNavigation.canGoForward,
false,
"webNavigation.canGoForward should be false before navigation."
);
// Populate the shistory entries manually, since it happens asynchronously
// and the following tests will be too soon otherwise.
await TabStateFlusher.flush(browser);
let { entries } = JSON.parse(SessionStore.getTabState(tab));
is(entries.length, 2, "There should be 1 shistory entries.");
let pageShownPromise = BrowserTestUtils.waitForContentEvent(
browser,
"pageshow",
true
);
// Click on "go back" Button
await SpecialPowers.spawn(browser, [], async function () {
let returnButton = content.document.getElementById("goBack");
returnButton.click();
});
await pageShownPromise;
is(
browser.webNavigation.canGoBack,
false,
"webNavigation.canGoBack should be false after navigation."
);
is(
browser.webNavigation.canGoForward,
true,
"webNavigation.canGoForward should be true after navigation."
);
is(
gBrowser.currentURI.spec,
SECURE_PAGE,
"Should go back to previous page after button click."
);
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
// Utils
async function testPageWithURI(uri, message, expect) {
// Open new Tab with URI
let tab;
if (expect) {
tab = await openErrorPage(uri, false);
} else {
tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, uri, true);
}
// Check if HTTPS-Only Error-Page loaded instead
let browser = tab.linkedBrowser;
await SpecialPowers.spawn(
browser,
[message, expect],
function (message, expect) {
const doc = content.document;
let result = doc.documentURI.startsWith("about:httpsonlyerror");
is(result, expect, message);
}
);
// Close tab again
BrowserTestUtils.removeTab(tab);
}