mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 00:05:36 +00:00
97778cf44a
Differential Revision: https://phabricator.services.mozilla.com/D91462
100 lines
2.8 KiB
JavaScript
100 lines
2.8 KiB
JavaScript
/* 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: aNewURI => {},
|
|
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: aNewURI => {},
|
|
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);
|
|
}
|
|
);
|
|
});
|