browser_bug1594938.js (2861B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 /** 5 * Test for Bug 1594938 6 * 7 * If a session history listener blocks reloads we shouldn't crash. 8 */ 9 10 add_task(async function test() { 11 await BrowserTestUtils.withNewTab( 12 { gBrowser, url: "https://example.com/" }, 13 async function (browser) { 14 if (!SpecialPowers.Services.appinfo.sessionHistoryInParent) { 15 await SpecialPowers.spawn(browser, [], async function () { 16 let history = this.content.docShell.QueryInterface( 17 Ci.nsIWebNavigation 18 ).sessionHistory; 19 20 let testDone = {}; 21 testDone.promise = new Promise(resolve => { 22 testDone.resolve = resolve; 23 }); 24 25 let listenerCalled = false; 26 let listener = { 27 OnHistoryNewEntry: () => {}, 28 OnHistoryReload: () => { 29 listenerCalled = true; 30 this.content.setTimeout(() => { 31 testDone.resolve(); 32 }); 33 return false; 34 }, 35 OnHistoryGotoIndex: () => {}, 36 OnHistoryPurge: () => {}, 37 OnHistoryReplaceEntry: () => {}, 38 39 QueryInterface: ChromeUtils.generateQI([ 40 "nsISHistoryListener", 41 "nsISupportsWeakReference", 42 ]), 43 }; 44 45 history.legacySHistory.addSHistoryListener(listener); 46 47 history.reload(Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE); 48 await testDone.promise; 49 50 Assert.ok(listenerCalled, "reloads were blocked"); 51 52 history.legacySHistory.removeSHistoryListener(listener); 53 }); 54 55 return; 56 } 57 58 let history = browser.browsingContext.sessionHistory; 59 60 let testDone = {}; 61 testDone.promise = new Promise(resolve => { 62 testDone.resolve = resolve; 63 }); 64 65 let listenerCalled = false; 66 let listener = { 67 OnHistoryNewEntry: () => {}, 68 OnHistoryReload: () => { 69 listenerCalled = true; 70 setTimeout(() => { 71 testDone.resolve(); 72 }); 73 return false; 74 }, 75 OnHistoryGotoIndex: () => {}, 76 OnHistoryPurge: () => {}, 77 OnHistoryReplaceEntry: () => {}, 78 79 QueryInterface: ChromeUtils.generateQI([ 80 "nsISHistoryListener", 81 "nsISupportsWeakReference", 82 ]), 83 }; 84 85 history.addSHistoryListener(listener); 86 87 await SpecialPowers.spawn(browser, [], () => { 88 let history = this.content.docShell.QueryInterface( 89 Ci.nsIWebNavigation 90 ).sessionHistory; 91 history.reload(Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE); 92 }); 93 await testDone.promise; 94 95 Assert.ok(listenerCalled, "reloads were blocked"); 96 97 history.removeSHistoryListener(listener); 98 } 99 ); 100 });