tor-browser

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

browser_restoreLastActionCorrectOrder.js (2951B)


      1 "use strict";
      2 
      3 const { _LastSession, _lastClosedActions } = ChromeUtils.importESModule(
      4  "resource:///modules/sessionstore/SessionStore.sys.mjs"
      5 );
      6 
      7 /**
      8 * Tests that the _lastClosedAction list is truncated correctly
      9 * by removing oldest actions in SessionStore._addClosedAction
     10 */
     11 add_task(async function test_undo_last_action_correct_order() {
     12  SpecialPowers.pushPrefEnv({
     13    set: [
     14      ["browser.sessionstore.max_tabs_undo", 3],
     15      ["browser.sessionstore.max_windows_undo", 1],
     16    ],
     17  });
     18 
     19  gBrowser.removeAllTabsBut(gBrowser.tabs[0]);
     20  await TabStateFlusher.flushWindow(window);
     21 
     22  forgetClosedTabs(window);
     23 
     24  const state = {
     25    windows: [
     26      {
     27        tabs: [
     28          {
     29            entries: [
     30              {
     31                title: "example.org",
     32                url: "https://example.org/",
     33                triggeringPrincipal_base64,
     34              },
     35            ],
     36          },
     37          {
     38            entries: [
     39              {
     40                title: "example.com",
     41                url: "https://example.com/",
     42                triggeringPrincipal_base64,
     43              },
     44            ],
     45          },
     46          {
     47            entries: [
     48              {
     49                title: "mozilla",
     50                url: "https://www.mozilla.org/",
     51                triggeringPrincipal_base64,
     52              },
     53            ],
     54          },
     55          {
     56            entries: [
     57              {
     58                title: "mozilla privacy policy",
     59                url: "https://www.mozilla.org/privacy",
     60                triggeringPrincipal_base64,
     61              },
     62            ],
     63          },
     64        ],
     65        selected: 3,
     66      },
     67    ],
     68  };
     69 
     70  _LastSession.setState(state);
     71  SessionStore.resetLastClosedActions();
     72 
     73  let sessionRestored = promiseSessionStoreLoads(4 /* total restored tabs */);
     74  SessionWindowUI.restoreLastClosedTabOrWindowOrSession(window);
     75  await sessionRestored;
     76 
     77  Assert.equal(window.gBrowser.tabs.length, 4, "4 tabs have been restored");
     78 
     79  BrowserTestUtils.removeTab(window.gBrowser.tabs[3]);
     80  BrowserTestUtils.removeTab(window.gBrowser.tabs[2]);
     81  Assert.equal(window.gBrowser.tabs.length, 2, "Window has one open tab");
     82 
     83  // open and close a window
     84  let win2 = await BrowserTestUtils.openNewBrowserWindow();
     85  Assert.equal(win2.gBrowser.tabs.length, 1, "Second window has one open tab");
     86  BrowserTestUtils.startLoadingURIString(
     87    win2.gBrowser.selectedBrowser,
     88    "https://example.com/"
     89  );
     90  await BrowserTestUtils.browserLoaded(win2.gBrowser.selectedBrowser);
     91  await BrowserTestUtils.closeWindow(win2);
     92 
     93  // close one tab and reopen it
     94  BrowserTestUtils.removeTab(window.gBrowser.tabs[1]);
     95  Assert.equal(window.gBrowser.tabs.length, 1, "Window has one open tabs");
     96  SessionWindowUI.restoreLastClosedTabOrWindowOrSession(window);
     97  Assert.equal(window.gBrowser.tabs.length, 2, "Window now has two open tabs");
     98 
     99  await SpecialPowers.popPrefEnv();
    100  gBrowser.removeAllTabsBut(gBrowser.tabs[0]);
    101 });