1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
"use strict";
const REQUEST_URL =
"http://httpsfirst.com/browser/dom/security/test/https-first/";
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.loadURIString(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();
});
|