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
98
99
100
|
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/**
* Test for Bug 1594938
*
* If a session history listener blocks reloads we shouldn't crash.
*/
add_task(async function test() {
await BrowserTestUtils.withNewTab(
{ gBrowser, url: "https://example.com/" },
async function (browser) {
if (!SpecialPowers.Services.appinfo.sessionHistoryInParent) {
await SpecialPowers.spawn(browser, [], async function () {
let history = this.content.docShell.QueryInterface(
Ci.nsIWebNavigation
).sessionHistory;
let testDone = {};
testDone.promise = new Promise(resolve => {
testDone.resolve = resolve;
});
let listenerCalled = false;
let listener = {
OnHistoryNewEntry: () => {},
OnHistoryReload: () => {
listenerCalled = true;
this.content.setTimeout(() => {
testDone.resolve();
});
return false;
},
OnHistoryGotoIndex: () => {},
OnHistoryPurge: () => {},
OnHistoryReplaceEntry: () => {},
QueryInterface: ChromeUtils.generateQI([
"nsISHistoryListener",
"nsISupportsWeakReference",
]),
};
history.legacySHistory.addSHistoryListener(listener);
history.reload(Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE);
await testDone.promise;
Assert.ok(listenerCalled, "reloads were blocked");
history.legacySHistory.removeSHistoryListener(listener);
});
return;
}
let history = browser.browsingContext.sessionHistory;
let testDone = {};
testDone.promise = new Promise(resolve => {
testDone.resolve = resolve;
});
let listenerCalled = false;
let listener = {
OnHistoryNewEntry: () => {},
OnHistoryReload: () => {
listenerCalled = true;
setTimeout(() => {
testDone.resolve();
});
return false;
},
OnHistoryGotoIndex: () => {},
OnHistoryPurge: () => {},
OnHistoryReplaceEntry: () => {},
QueryInterface: ChromeUtils.generateQI([
"nsISHistoryListener",
"nsISupportsWeakReference",
]),
};
history.addSHistoryListener(listener);
await SpecialPowers.spawn(browser, [], () => {
let history = this.content.docShell.QueryInterface(
Ci.nsIWebNavigation
).sessionHistory;
history.reload(Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE);
});
await testDone.promise;
Assert.ok(listenerCalled, "reloads were blocked");
history.removeSHistoryListener(listener);
}
);
});
|