Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Errors

"use strict";
const REQUEST_URL =
async function promiseGetHistoryIndex(browser) {
if (!SpecialPowers.Services.appinfo.sessionHistoryInParent) {
return SpecialPowers.spawn(browser, [], function () {
let shistory =
docShell.browsingContext.childSessionHistory.legacySHistory;
return shistory.index;
});
}
let shistory = browser.browsingContext.sessionHistory;
return shistory.index;
}
async function testNavigations() {
// Load initial site
let url1 = REQUEST_URL + "file_navigation.html?foo1";
let url2 = REQUEST_URL + "file_navigation.html?foo2";
let url3 = REQUEST_URL + "file_navigation.html?foo3";
let loaded = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
BrowserTestUtils.startLoadingURIString(gBrowser, url1);
await loaded;
// Load another site
loaded = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
await SpecialPowers.spawn(
gBrowser.selectedBrowser,
[url2],
async url => (content.location.href = url)
);
await loaded;
// Load another site
loaded = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
await SpecialPowers.spawn(
gBrowser.selectedBrowser,
[url3],
async url => (content.location.href = url)
);
await loaded;
is(
await promiseGetHistoryIndex(gBrowser.selectedBrowser),
2,
"correct session history index after load 3"
);
// Go back one site by clicking the back button
info("Clicking back button");
loaded = BrowserTestUtils.waitForLocationChange(gBrowser, url2);
let backButton = document.getElementById("back-button");
backButton.click();
await loaded;
is(
await promiseGetHistoryIndex(gBrowser.selectedBrowser),
1,
"correct session history index after going back for the first time"
);
// Go back again
info("Clicking back button again");
loaded = BrowserTestUtils.waitForLocationChange(gBrowser, url1);
backButton.click();
await loaded;
is(
await promiseGetHistoryIndex(gBrowser.selectedBrowser),
0,
"correct session history index after going back for the second time"
);
}
add_task(async function () {
waitForExplicitFinish();
await SpecialPowers.pushPrefEnv({
set: [["dom.security.https_first", true]],
});
await testNavigations();
// If fission is enabled we also want to test the navigations with the bfcache
// in the parent.
if (SpecialPowers.getBoolPref("fission.autostart")) {
await SpecialPowers.pushPrefEnv({
set: [["fission.bfcacheInParent", true]],
});
await testNavigations();
}
finish();
});