forked from mirrors/gecko-dev
190 lines
5.2 KiB
JavaScript
190 lines
5.2 KiB
JavaScript
/* 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
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
const SECURE_PAGE = "https://example.com/";
|
|
const GOOD_PAGE = "http://example.com/";
|
|
const BAD_CERT = "http://expired.example.com/";
|
|
const UNKNOWN_ISSUER = "http://self-signed.example.com/";
|
|
|
|
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.loadURI(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);
|
|
}
|