tor-browser

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

browser_purge_shistory.js (2044B)


      1 "use strict";
      2 
      3 /**
      4 * This test checks that pending tabs are treated like fully loaded tabs when
      5 * purging session history. Just like for fully loaded tabs we want to remove
      6 * every but the current shistory entry.
      7 */
      8 
      9 const TAB_STATE = {
     10  entries: [
     11    { url: "about:mozilla", triggeringPrincipal_base64 },
     12    { url: "about:robots", triggeringPrincipal_base64 },
     13  ],
     14  index: 1,
     15 };
     16 
     17 function checkTabContents(browser) {
     18  return SpecialPowers.spawn(browser, [], async function () {
     19    let webNavigation = docShell.QueryInterface(Ci.nsIWebNavigation);
     20    let history = webNavigation.sessionHistory;
     21    Assert.ok(
     22      history &&
     23        history.count == 1 &&
     24        content.document.documentURI == "about:mozilla",
     25      "expected tab contents found"
     26    );
     27  });
     28 }
     29 
     30 add_task(async function () {
     31  // Create a new tab.
     32  let tab = BrowserTestUtils.addTab(gBrowser, "about:blank");
     33  let browser = tab.linkedBrowser;
     34  await BrowserTestUtils.browserLoaded(browser, { wantLoad: "about:blank" });
     35  await promiseTabState(tab, TAB_STATE);
     36 
     37  // Create another new tab.
     38  let tab2 = BrowserTestUtils.addTab(gBrowser, "about:blank");
     39  let browser2 = tab2.linkedBrowser;
     40  await BrowserTestUtils.browserLoaded(browser2, { wantLoad: "about:blank" });
     41 
     42  // The tab shouldn't be restored right away.
     43  Services.prefs.setBoolPref("browser.sessionstore.restore_on_demand", true);
     44 
     45  // Prepare the tab state.
     46  let promise = promiseTabRestoring(tab2);
     47  ss.setTabState(tab2, JSON.stringify(TAB_STATE));
     48  ok(tab2.hasAttribute("pending"), "tab is pending");
     49  await promise;
     50 
     51  // Purge session history.
     52  Services.obs.notifyObservers(null, "browser:purge-session-history");
     53  await checkTabContents(browser);
     54  ok(tab2.hasAttribute("pending"), "tab is still pending");
     55 
     56  // Kick off tab restoration.
     57  gBrowser.selectedTab = tab2;
     58  await promiseTabRestored(tab2);
     59  await checkTabContents(browser2);
     60  ok(!tab2.hasAttribute("pending"), "tab is not pending anymore");
     61 
     62  // Cleanup.
     63  gBrowser.removeTab(tab2);
     64  gBrowser.removeTab(tab);
     65 });