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);
 | 
						|
    }
 | 
						|
  );
 | 
						|
});
 |