tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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