tor-browser

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

browser_464199.js (4892B)


      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  /** Test for Bug 464199 */
     29 
     30  const REMEMBER = Date.now(),
     31    FORGET = Math.random();
     32  let test_state = {
     33    windows: [
     34      {
     35        tabs: [{ entries: [] }],
     36        _closedTabs: [
     37          {
     38            state: { entries: [{ url: "http://www.example.net/" }] },
     39            title: FORGET,
     40          },
     41          {
     42            state: { entries: [{ url: "http://www.example.org/" }] },
     43            title: REMEMBER,
     44          },
     45          {
     46            state: {
     47              entries: [
     48                { url: "http://www.example.net/" },
     49                { url: "http://www.example.org/" },
     50              ],
     51            },
     52            title: FORGET,
     53          },
     54          {
     55            state: { entries: [{ url: "http://example.net/" }] },
     56            title: FORGET,
     57          },
     58          {
     59            state: { entries: [{ url: "http://sub.example.net/" }] },
     60            title: FORGET,
     61          },
     62          {
     63            state: { entries: [{ url: "http://www.example.net:8080/" }] },
     64            title: FORGET,
     65          },
     66          { state: { entries: [{ url: "about:license" }] }, title: REMEMBER },
     67          {
     68            state: {
     69              entries: [
     70                {
     71                  url: "http://www.example.org/frameset",
     72                  children: [
     73                    { url: "http://www.example.org/frame" },
     74                    { url: "http://www.example.org:8080/frame2" },
     75                  ],
     76                },
     77              ],
     78            },
     79            title: REMEMBER,
     80          },
     81          {
     82            state: {
     83              entries: [
     84                {
     85                  url: "http://www.example.org/frameset",
     86                  children: [
     87                    { url: "http://www.example.org/frame" },
     88                    { url: "http://www.example.net/frame" },
     89                  ],
     90                },
     91              ],
     92            },
     93            title: FORGET,
     94          },
     95          {
     96            state: {
     97              entries: [
     98                {
     99                  url: "http://www.example.org/form",
    100                  formdata: { id: { url: "http://www.example.net/" } },
    101                },
    102              ],
    103            },
    104            title: REMEMBER,
    105          },
    106          {
    107            state: {
    108              entries: [{ url: "http://www.example.org/form" }],
    109              extData: { setCustomTabValue: "http://example.net:80" },
    110            },
    111            title: REMEMBER,
    112          },
    113        ],
    114      },
    115    ],
    116  };
    117  let remember_count = 5;
    118 
    119  function countByTitle(aClosedTabList, aTitle) {
    120    return aClosedTabList.filter(aData => aData.title == aTitle).length;
    121  }
    122 
    123  // open a window and add the above closed tab list
    124  let newWin = openDialog(location, "", "chrome,all,dialog=no");
    125  await promiseWindowLoaded(newWin);
    126  Services.prefs.setIntPref(
    127    "browser.sessionstore.max_tabs_undo",
    128    test_state.windows[0]._closedTabs.length
    129  );
    130 
    131  let restoring = promiseWindowRestoring(newWin);
    132  let restored = promiseWindowRestored(newWin);
    133  ss.setWindowState(newWin, JSON.stringify(test_state), true);
    134  await restoring;
    135  await restored;
    136 
    137  let closedTabs = ss.getClosedTabDataForWindow(newWin);
    138  is(
    139    closedTabs.length,
    140    test_state.windows[0]._closedTabs.length,
    141    "Closed tab list has the expected length"
    142  );
    143  is(
    144    countByTitle(closedTabs, FORGET),
    145    test_state.windows[0]._closedTabs.length - remember_count,
    146    "The correct amout of tabs are to be forgotten"
    147  );
    148  is(
    149    countByTitle(closedTabs, REMEMBER),
    150    remember_count,
    151    "Everything is set up."
    152  );
    153 
    154  let promise = promiseClearHistory();
    155  await ForgetAboutSite.removeDataFromBaseDomain("example.net");
    156  await promise;
    157  closedTabs = ss.getClosedTabDataForWindow(newWin);
    158  is(
    159    closedTabs.length,
    160    remember_count,
    161    "The correct amout of tabs was removed"
    162  );
    163  is(
    164    countByTitle(closedTabs, FORGET),
    165    0,
    166    "All tabs to be forgotten were indeed removed"
    167  );
    168  is(
    169    countByTitle(closedTabs, REMEMBER),
    170    remember_count,
    171    "... and tabs to be remembered weren't."
    172  );
    173  // clean up
    174  Services.prefs.clearUserPref("browser.sessionstore.max_tabs_undo");
    175  await BrowserTestUtils.closeWindow(newWin);
    176 });