forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			99 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			99 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);
 | |
|     }
 | |
|   );
 | |
| });
 | 
