tor-browser

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

browser_394759_purge.js (6279B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 let { ForgetAboutSite } = ChromeUtils.importESModule(
      6  "resource://gre/modules/ForgetAboutSite.sys.mjs"
      7 );
      8 
      9 function promiseClearHistory() {
     10  return new Promise(resolve => {
     11    let observer = {
     12      observe() {
     13        Services.obs.removeObserver(
     14          this,
     15          "browser:purge-session-history-for-domain"
     16        );
     17        resolve();
     18      },
     19    };
     20    Services.obs.addObserver(
     21      observer,
     22      "browser:purge-session-history-for-domain"
     23    );
     24  });
     25 }
     26 
     27 add_task(async function () {
     28  // utility functions
     29  function countClosedTabsByTitle(aClosedTabList, aTitle) {
     30    return aClosedTabList.filter(aData => aData.title == aTitle).length;
     31  }
     32 
     33  function countOpenTabsByTitle(aOpenTabList, aTitle) {
     34    return aOpenTabList.filter(aData =>
     35      aData.entries.some(aEntry => aEntry.title == aTitle)
     36    ).length;
     37  }
     38 
     39  // backup old state
     40  let oldState = ss.getBrowserState();
     41  let oldState_wins = JSON.parse(oldState).windows.length;
     42  if (oldState_wins != 1) {
     43    ok(
     44      false,
     45      "oldState in test_purge has " + oldState_wins + " windows instead of 1"
     46    );
     47  }
     48 
     49  // create a new state for testing
     50  const REMEMBER = Date.now(),
     51    FORGET = Math.random();
     52  let testState = {
     53    windows: [
     54      {
     55        tabs: [
     56          {
     57            entries: [
     58              { url: "http://example.com/", triggeringPrincipal_base64 },
     59            ],
     60          },
     61        ],
     62        selected: 1,
     63      },
     64    ],
     65    _closedWindows: [
     66      // _closedWindows[0]
     67      {
     68        tabs: [
     69          {
     70            entries: [
     71              {
     72                url: "http://example.com/",
     73                triggeringPrincipal_base64,
     74                title: REMEMBER,
     75              },
     76            ],
     77          },
     78          {
     79            entries: [
     80              {
     81                url: "http://mozilla.org/",
     82                triggeringPrincipal_base64,
     83                title: FORGET,
     84              },
     85            ],
     86          },
     87        ],
     88        selected: 2,
     89        title: "mozilla.org",
     90        _closedTabs: [],
     91        closedGroups: [],
     92      },
     93      // _closedWindows[1]
     94      {
     95        tabs: [
     96          {
     97            entries: [
     98              {
     99                url: "http://mozilla.org/",
    100                triggeringPrincipal_base64,
    101                title: FORGET,
    102              },
    103            ],
    104          },
    105          {
    106            entries: [
    107              {
    108                url: "http://example.com/",
    109                triggeringPrincipal_base64,
    110                title: REMEMBER,
    111              },
    112            ],
    113          },
    114          {
    115            entries: [
    116              {
    117                url: "http://example.com/",
    118                triggeringPrincipal_base64,
    119                title: REMEMBER,
    120              },
    121            ],
    122          },
    123          {
    124            entries: [
    125              {
    126                url: "http://mozilla.org/",
    127                triggeringPrincipal_base64,
    128                title: FORGET,
    129              },
    130            ],
    131          },
    132          {
    133            entries: [
    134              {
    135                url: "http://example.com/",
    136                triggeringPrincipal_base64,
    137                title: REMEMBER,
    138              },
    139            ],
    140          },
    141        ],
    142        selected: 5,
    143        _closedTabs: [],
    144        closedGroups: [],
    145      },
    146      // _closedWindows[2]
    147      {
    148        tabs: [
    149          {
    150            entries: [
    151              {
    152                url: "http://example.com/",
    153                triggeringPrincipal_base64,
    154                title: REMEMBER,
    155              },
    156            ],
    157          },
    158        ],
    159        selected: 1,
    160        _closedTabs: [
    161          {
    162            state: {
    163              entries: [
    164                {
    165                  url: "http://mozilla.org/",
    166                  triggeringPrincipal_base64,
    167                  title: FORGET,
    168                },
    169                {
    170                  url: "http://mozilla.org/again",
    171                  triggeringPrincipal_base64,
    172                  title: "doesn't matter",
    173                },
    174              ],
    175            },
    176            pos: 1,
    177            title: FORGET,
    178          },
    179          {
    180            state: {
    181              entries: [
    182                {
    183                  url: "http://example.com",
    184                  triggeringPrincipal_base64,
    185                  title: REMEMBER,
    186                },
    187              ],
    188            },
    189            title: REMEMBER,
    190          },
    191        ],
    192        closedGroups: [],
    193      },
    194    ],
    195  };
    196 
    197  // set browser to test state
    198  ss.setBrowserState(JSON.stringify(testState));
    199 
    200  // purge domain & check that we purged correctly for closed windows
    201  let clearHistoryPromise = promiseClearHistory();
    202  await ForgetAboutSite.removeDataFromBaseDomain("mozilla.org");
    203  await clearHistoryPromise;
    204 
    205  let closedWindowData = ss.getClosedWindowData();
    206 
    207  // First set of tests for _closedWindows[0] - tests basics
    208  let win = closedWindowData[0];
    209  is(win.tabs.length, 1, "1 tab was removed");
    210  is(countOpenTabsByTitle(win.tabs, FORGET), 0, "The correct tab was removed");
    211  is(
    212    countOpenTabsByTitle(win.tabs, REMEMBER),
    213    1,
    214    "The correct tab was remembered"
    215  );
    216  is(win.selected, 1, "Selected tab has changed");
    217  is(win.title, REMEMBER, "The window title was correctly updated");
    218 
    219  // Test more complicated case
    220  win = closedWindowData[1];
    221  is(win.tabs.length, 3, "2 tabs were removed");
    222  is(
    223    countOpenTabsByTitle(win.tabs, FORGET),
    224    0,
    225    "The correct tabs were removed"
    226  );
    227  is(
    228    countOpenTabsByTitle(win.tabs, REMEMBER),
    229    3,
    230    "The correct tabs were remembered"
    231  );
    232  is(win.selected, 3, "Selected tab has changed");
    233  is(win.title, REMEMBER, "The window title was correctly updated");
    234 
    235  // Tests handling of _closedTabs
    236  win = closedWindowData[2];
    237  is(
    238    countClosedTabsByTitle(win._closedTabs, REMEMBER),
    239    1,
    240    "The correct number of tabs were removed, and the correct ones"
    241  );
    242  is(
    243    countClosedTabsByTitle(win._closedTabs, FORGET),
    244    0,
    245    "All tabs to be forgotten were indeed removed"
    246  );
    247 
    248  // restore pre-test state
    249  ss.setBrowserState(oldState);
    250 });