tor-browser

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

browser_purge_domaindata.js (5186B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   https://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const ORIG_STATE = SessionStore.getBrowserState();
      7 const SITE = "https://example.com/";
      8 
      9 registerCleanupFunction(async () => {
     10  await SessionStoreTestUtils.promiseBrowserState(ORIG_STATE);
     11 });
     12 
     13 // Test for closed tabs and tab groups in an open window
     14 add_task(async function test_closedTabsPurgeDomainData() {
     15  let win = await promiseNewWindowLoaded();
     16 
     17  let tabs = [
     18    BrowserTestUtils.addTab(win.gBrowser, "about:mozilla"),
     19    BrowserTestUtils.addTab(win.gBrowser, "about:robots"),
     20    BrowserTestUtils.addTab(win.gBrowser, SITE),
     21  ];
     22  let tabsInGroup = [
     23    BrowserTestUtils.addTab(win.gBrowser, "about:robots"),
     24    BrowserTestUtils.addTab(win.gBrowser, SITE),
     25  ];
     26 
     27  let allTabs = [...tabs, ...tabsInGroup];
     28  await Promise.all(
     29    allTabs.map(async t => {
     30      await promiseBrowserLoaded(t.linkedBrowser);
     31    })
     32  );
     33  let tabGroup = win.gBrowser.addTabGroup(tabsInGroup);
     34 
     35  await TabStateFlusher.flushWindow(win);
     36 
     37  tabs.forEach(t => {
     38    win.gBrowser.removeTab(t);
     39  });
     40  let removePromise = BrowserTestUtils.waitForEvent(
     41    tabGroup,
     42    "TabGroupRemoved"
     43  );
     44  win.gBrowser.removeTabGroup(tabGroup);
     45  await removePromise;
     46 
     47  let state = ss.getWindowState(win).windows[0];
     48  Assert.equal(
     49    state._closedTabs.length,
     50    3,
     51    "Closed tabs state has all closed tabs"
     52  );
     53  Assert.equal(
     54    state.closedGroups[0].tabs.length,
     55    2,
     56    "Closed tab group state has all closed tabs"
     57  );
     58 
     59  // Purge session history for domain
     60  Services.obs.notifyObservers(
     61    null,
     62    "browser:purge-session-history-for-domain",
     63    "example.com"
     64  );
     65 
     66  state = ss.getWindowState(win).windows[0];
     67  Assert.equal(state._closedTabs.length, 2, "Closed tab list has one less tab");
     68  Assert.equal(
     69    state.closedGroups[0].tabs.length,
     70    1,
     71    "Closed tab group tab list has one less tab"
     72  );
     73 
     74  state._closedTabs.forEach((tab, index) => {
     75    Assert.notEqual(
     76      tab.state.entries[0].url,
     77      SITE,
     78      `Closed tab ${index} does not contain purged site`
     79    );
     80  });
     81  state.closedGroups[0].tabs.forEach((tab, index) => {
     82    Assert.notEqual(
     83      tab.state.entries[0].url,
     84      SITE,
     85      `Closed tab ${index} in group does not contain purged site`
     86    );
     87  });
     88 
     89  await BrowserTestUtils.closeWindow(win);
     90 });
     91 
     92 add_task(async function test_closedTabsInClosedWindowsPurgeDomainData() {
     93  let win = await promiseNewWindowLoaded();
     94 
     95  let openTabs = [
     96    BrowserTestUtils.addTab(win.gBrowser, "about:mozilla"),
     97    BrowserTestUtils.addTab(win.gBrowser, "about:robots"),
     98    BrowserTestUtils.addTab(win.gBrowser, SITE),
     99  ];
    100  let tabsInOpenGroup = [
    101    BrowserTestUtils.addTab(win.gBrowser, "about:robots"),
    102    BrowserTestUtils.addTab(win.gBrowser, SITE),
    103  ];
    104  let closedTabs = [
    105    BrowserTestUtils.addTab(win.gBrowser, "about:mozilla"),
    106    BrowserTestUtils.addTab(win.gBrowser, "about:robots"),
    107    BrowserTestUtils.addTab(win.gBrowser, SITE),
    108  ];
    109  let tabsInClosedGroup = [
    110    BrowserTestUtils.addTab(win.gBrowser, "about:robots"),
    111    BrowserTestUtils.addTab(win.gBrowser, SITE),
    112  ];
    113 
    114  let allTabs = [
    115    ...openTabs,
    116    ...tabsInOpenGroup,
    117    ...closedTabs,
    118    ...tabsInClosedGroup,
    119  ];
    120  await Promise.all(
    121    allTabs.map(async t => {
    122      await promiseBrowserLoaded(t.linkedBrowser);
    123    })
    124  );
    125  win.gBrowser.addTabGroup(tabsInOpenGroup);
    126  let closedTabGroup = win.gBrowser.addTabGroup(tabsInClosedGroup);
    127 
    128  await TabStateFlusher.flushWindow(win);
    129 
    130  closedTabs.forEach(t => {
    131    win.gBrowser.removeTab(t);
    132  });
    133  let removePromise = BrowserTestUtils.waitForEvent(
    134    closedTabGroup,
    135    "TabGroupRemoved"
    136  );
    137  win.gBrowser.removeTabGroup(closedTabGroup);
    138  await removePromise;
    139 
    140  await BrowserTestUtils.closeWindow(win);
    141 
    142  let state = ss.getClosedWindowData()[0];
    143  Assert.equal(state.tabs.length, 6, "Open tabs state has all tabs");
    144  Assert.equal(
    145    state._closedTabs.length,
    146    3,
    147    "Closed tabs state has all closed tabs"
    148  );
    149  Assert.equal(
    150    state.closedGroups[0].tabs.length,
    151    2,
    152    "Closed tab group state has all closed tabs"
    153  );
    154 
    155  // Purge session history for domain
    156  Services.obs.notifyObservers(
    157    null,
    158    "browser:purge-session-history-for-domain",
    159    "example.com"
    160  );
    161 
    162  state = ss.getClosedWindowData()[0];
    163  Assert.equal(
    164    state.tabs.length,
    165    4,
    166    "Open tabs state loses ungrouped and grouped site tab"
    167  );
    168  Assert.equal(state._closedTabs.length, 2, "Closed tabs state loses a tab");
    169  Assert.equal(
    170    state.closedGroups[0].tabs.length,
    171    1,
    172    "Closed tab group state loses a tab"
    173  );
    174 
    175  state.tabs.forEach((tab, index) => {
    176    Assert.notEqual(
    177      tab.entries[0].url,
    178      SITE,
    179      `Open tab ${index} does not contain purged site`
    180    );
    181  });
    182  state._closedTabs.forEach((tab, index) => {
    183    Assert.notEqual(
    184      tab.state.entries[0].url,
    185      SITE,
    186      `Closed tab ${index} does not contain purged site`
    187    );
    188  });
    189  state.closedGroups[0].tabs.forEach((tab, index) => {
    190    Assert.notEqual(
    191      tab.state.entries[0].url,
    192      SITE,
    193      `Closed tab ${index} in group does not contain purged site`
    194    );
    195  });
    196 });