132 lines
4.2 KiB
HTML
132 lines
4.2 KiB
HTML
<?xml version="1.0"?>
|
|
|
|
<!-- 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/. -->
|
|
|
|
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
|
|
|
<window id="396519Test"
|
|
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
|
width="600"
|
|
height="600"
|
|
onload="runTest();"
|
|
title="396519 test">
|
|
|
|
<script src="chrome://mochikit/content/chrome-harness.js" />
|
|
<script type="application/javascript" src="docshell_helpers.js" />
|
|
<script type="application/javascript"><![CDATA[
|
|
Services.prefs.setBoolPref("browser.navigation.requireUserInteraction", false);
|
|
|
|
var gTestCount = 0;
|
|
|
|
async function navigateAndTest(params, expected) {
|
|
await promisePageNavigation(params);
|
|
++gTestCount;
|
|
await doTest(expected);
|
|
}
|
|
|
|
async function doTest(expected) {
|
|
function check(testCount, expected) {
|
|
let history;
|
|
if (SpecialPowers.Services.appinfo.sessionHistoryInParent) {
|
|
history = this.browsingContext.sessionHistory;
|
|
} else {
|
|
history = this.content.browsingContext.childSessionHistory.legacySHistory;
|
|
}
|
|
if (history.count == expected.length) {
|
|
for (let i = 0; i < history.count; i++) {
|
|
var shEntry = history.getEntryAtIndex(i).
|
|
QueryInterface(Ci.nsISHEntry);
|
|
is(shEntry.isInBFCache, expected[i], `BFCache for shentry[${i}], test ${testCount}`);
|
|
}
|
|
|
|
// Make sure none of the SHEntries share bfcache entries with one
|
|
// another.
|
|
for (let i = 0; i < history.count; i++) {
|
|
for (let j = 0; j < history.count; j++) {
|
|
if (j == i)
|
|
continue;
|
|
|
|
let shentry1 = history.getEntryAtIndex(i)
|
|
.QueryInterface(Ci.nsISHEntry);
|
|
let shentry2 = history.getEntryAtIndex(j)
|
|
.QueryInterface(Ci.nsISHEntry);
|
|
ok(!shentry1.sharesDocumentWith(shentry2),
|
|
'Test ' + testCount + ': shentry[' + i + "] shouldn't " +
|
|
"share document with shentry[" + j + ']');
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
is(history.count, expected.length, "Wrong history length in test "+testCount);
|
|
}
|
|
}
|
|
|
|
if (SpecialPowers.Services.appinfo.sessionHistoryInParent) {
|
|
check.call(TestWindow.getBrowser(), gTestCount, expected);
|
|
} else {
|
|
await SpecialPowers.spawn(TestWindow.getBrowser(), [gTestCount, expected], check);
|
|
}
|
|
}
|
|
|
|
async function runTest() {
|
|
// Tests 1 + 2:
|
|
// Back/forward between two simple documents. Bfcache will be used.
|
|
|
|
var test1Doc = "data:text/html,<html><head><title>test1</title></head>" +
|
|
"<body>test1</body></html>";
|
|
|
|
await navigateAndTest({
|
|
uri: test1Doc,
|
|
}, [false]);
|
|
|
|
var test2Doc = test1Doc.replace(/1/,"2");
|
|
|
|
await navigateAndTest({
|
|
uri: test2Doc,
|
|
}, [true, false]);
|
|
|
|
await navigateAndTest({
|
|
uri: test1Doc,
|
|
}, [true, true, false]);
|
|
|
|
await navigateAndTest({
|
|
uri: test2Doc,
|
|
}, [true, true, true, false]);
|
|
|
|
await navigateAndTest({
|
|
uri: test1Doc,
|
|
}, [false, true, true, true, false]);
|
|
|
|
await navigateAndTest({
|
|
uri: test2Doc,
|
|
}, [false, false, true, true, true, false]);
|
|
|
|
await navigateAndTest({
|
|
back: true,
|
|
}, [false, false, true, true, false, true]);
|
|
|
|
await navigateAndTest({
|
|
forward: true,
|
|
}, [false, false, true, true, true, false]);
|
|
|
|
await navigateAndTest({
|
|
gotoIndex: 1,
|
|
}, [false, false, true, true, true, false]);
|
|
|
|
await navigateAndTest({
|
|
back: true,
|
|
}, [false, true, true, true, false, false]);
|
|
|
|
await navigateAndTest({
|
|
gotoIndex: 5,
|
|
}, [false, false, true, true, false, false]);
|
|
|
|
Services.prefs.clearUserPref("browser.navigation.requireUserInteraction");
|
|
finish();
|
|
}
|
|
]]></script>
|
|
|
|
<browser type="content" primary="true" flex="1" id="content" remote="true" maychangeremoteness="true" />
|
|
</window>
|