tor-browser

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

browser_tab_groups_restore_saved.js (4640B)


      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 
      8 registerCleanupFunction(async () => {
      9  await SessionStoreTestUtils.promiseBrowserState(ORIG_STATE);
     10 });
     11 
     12 add_task(async function test_restoreSavedTabGroupToSameWindow() {
     13  let win = await promiseNewWindowLoaded();
     14  let aboutRobotsTab = BrowserTestUtils.addTab(win.gBrowser, "about:robots");
     15  let aboutAboutTab = BrowserTestUtils.addTab(win.gBrowser, "about:about");
     16  const tabGroupToSave = win.gBrowser.addTabGroup(
     17    [aboutRobotsTab, aboutAboutTab],
     18    {
     19      color: "blue",
     20      label: "about pages",
     21    }
     22  );
     23  const tabGroupToSaveId = tabGroupToSave.id;
     24 
     25  await TabStateFlusher.flushWindow(win);
     26 
     27  tabGroupToSave.save();
     28  let removePromise = BrowserTestUtils.waitForEvent(
     29    tabGroupToSave,
     30    "TabGroupRemoved"
     31  );
     32  win.gBrowser.removeTabGroup(tabGroupToSave);
     33  await removePromise;
     34 
     35  Assert.ok(
     36    !win.gBrowser.tabGroups.length,
     37    "saved tab group should not be in the tab strip"
     38  );
     39  Assert.ok(
     40    !win.gBrowser.tabs.includes(aboutRobotsTab),
     41    "about:robots tab should not be in the tab strip"
     42  );
     43  Assert.ok(
     44    !win.gBrowser.tabs.includes(aboutAboutTab),
     45    "about:about tab should not be in the tab strip"
     46  );
     47 
     48  await TabStateFlusher.flushWindow(win);
     49 
     50  let restorePromise = BrowserTestUtils.waitForEvent(win, "SSWindowStateReady");
     51  const restoredTabGroup = SessionStore.openSavedTabGroup(
     52    tabGroupToSaveId,
     53    win
     54  );
     55  await restorePromise;
     56 
     57  Assert.equal(
     58    win.gBrowser.tabs.length,
     59    3,
     60    "there should be 2 tabs restored + 1 initial tab from the new window"
     61  );
     62  Assert.equal(
     63    win.gBrowser.tabGroups.length,
     64    1,
     65    "there should be 1 tab group restored"
     66  );
     67  Assert.equal(
     68    win.gBrowser.selectedTab,
     69    restoredTabGroup.tabs[0],
     70    "first tab of the group is selected"
     71  );
     72  Assert.equal(
     73    restoredTabGroup.tabs.length,
     74    2,
     75    "the 2 restored tabs should be in the restored tab group"
     76  );
     77  Assert.equal(
     78    restoredTabGroup.label,
     79    "about pages",
     80    "tab group name should be restored"
     81  );
     82  Assert.equal(
     83    restoredTabGroup.id,
     84    tabGroupToSaveId,
     85    "tab group ID should be restored"
     86  );
     87  Assert.equal(
     88    restoredTabGroup.color,
     89    "blue",
     90    "tab group color should be restored"
     91  );
     92  Assert.ok(
     93    !restoredTabGroup.collapsed,
     94    "tab group collapsed state should be restored"
     95  );
     96 
     97  await BrowserTestUtils.closeWindow(win);
     98  forgetSavedTabGroups();
     99 });
    100 
    101 add_task(async function test_restoreSavedTabGroupToAnotherWindow() {
    102  let win = await promiseNewWindowLoaded();
    103  let aboutRobotsTab = BrowserTestUtils.addTab(win.gBrowser, "about:robots");
    104  let aboutAboutTab = BrowserTestUtils.addTab(win.gBrowser, "about:about");
    105  const tabGroupToSave = win.gBrowser.addTabGroup(
    106    [aboutRobotsTab, aboutAboutTab],
    107    {
    108      color: "blue",
    109      label: "about pages",
    110    }
    111  );
    112  const tabGroupToSaveId = tabGroupToSave.id;
    113 
    114  await Promise.allSettled([
    115    TabStateFlusher.flush(aboutRobotsTab.linkedBrowser),
    116    TabStateFlusher.flush(aboutAboutTab.linkedBrowser),
    117  ]);
    118  tabGroupToSave.save();
    119 
    120  await TabStateFlusher.flushWindow(win);
    121 
    122  let removePromise = BrowserTestUtils.waitForEvent(
    123    tabGroupToSave,
    124    "TabGroupRemoved"
    125  );
    126  win.gBrowser.removeTabGroup(tabGroupToSave);
    127  await removePromise;
    128 
    129  await TabStateFlusher.flushWindow(win);
    130 
    131  let win2 = await promiseNewWindowLoaded();
    132 
    133  let restorePromise = BrowserTestUtils.waitForEvent(
    134    win2,
    135    "SSWindowStateReady"
    136  );
    137  const restoredTabGroup = SessionStore.openSavedTabGroup(
    138    tabGroupToSaveId,
    139    win2
    140  );
    141  await restorePromise;
    142 
    143  Assert.equal(
    144    win2.gBrowser.tabs.length,
    145    3,
    146    "there should be 2 tabs restored + 1 initial tab from the new window"
    147  );
    148  Assert.equal(
    149    win2.gBrowser.tabGroups.length,
    150    1,
    151    "there should be 1 tab group restored"
    152  );
    153 
    154  Assert.equal(
    155    restoredTabGroup.tabs.length,
    156    2,
    157    "the 2 restored tabs should be in the restored tab group"
    158  );
    159  Assert.equal(
    160    restoredTabGroup.label,
    161    "about pages",
    162    "tab group name should be restored"
    163  );
    164  Assert.equal(
    165    restoredTabGroup.id,
    166    tabGroupToSaveId,
    167    "tab group ID should be restored"
    168  );
    169  Assert.equal(
    170    restoredTabGroup.color,
    171    "blue",
    172    "tab group color should be restored"
    173  );
    174  Assert.ok(
    175    !restoredTabGroup.collapsed,
    176    "tab group collapsed state should be restored"
    177  );
    178 
    179  await BrowserTestUtils.closeWindow(win2);
    180  await BrowserTestUtils.closeWindow(win);
    181  forgetSavedTabGroups();
    182  forgetClosedWindows();
    183 });