tor-browser

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

browser_590563.js (3267B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 add_task(async function () {
      5  let sessionData = {
      6    windows: [
      7      {
      8        tabs: [
      9          {
     10            entries: [{ url: "about:mozilla", triggeringPrincipal_base64 }],
     11            hidden: true,
     12          },
     13          {
     14            entries: [{ url: "about:blank", triggeringPrincipal_base64 }],
     15            hidden: false,
     16          },
     17        ],
     18      },
     19    ],
     20  };
     21  let url = "about:sessionrestore";
     22  let formdata = { id: { sessionData }, url };
     23  let state = {
     24    windows: [
     25      { tabs: [{ entries: [{ url, triggeringPrincipal_base64 }], formdata }] },
     26    ],
     27  };
     28 
     29  let win = await newWindowWithState(state);
     30 
     31  registerCleanupFunction(() => BrowserTestUtils.closeWindow(win));
     32 
     33  is(gBrowser.tabs.length, 1, "The total number of tabs should be 1");
     34  is(
     35    gBrowser.visibleTabs.length,
     36    1,
     37    "The total number of visible tabs should be 1"
     38  );
     39 
     40  await new Promise(resolve => executeSoon(resolve));
     41  await new Promise(resolve => waitForFocus(resolve, win));
     42  await middleClickTest(win);
     43 });
     44 
     45 async function middleClickTest(win) {
     46  let browser = win.gBrowser.selectedBrowser;
     47  let tabsToggle = browser.contentDocument.getElementById("tabsToggle");
     48  EventUtils.synthesizeMouseAtCenter(
     49    tabsToggle,
     50    { button: 0 },
     51    browser.contentWindow
     52  );
     53  let tree = browser.contentDocument.getElementById("tabList");
     54  await BrowserTestUtils.waitForCondition(() => !tree.hasAttribute("hidden"));
     55  // Force a layout flush before accessing coordinates.
     56  tree.getBoundingClientRect();
     57 
     58  is(tree.view.rowCount, 3, "There should be three items");
     59 
     60  // click on the first tab item
     61  var rect = tree.getCoordsForCellItem(1, tree.columns[1], "text");
     62  EventUtils.synthesizeMouse(
     63    tree.body,
     64    rect.x,
     65    rect.y,
     66    { button: 1 },
     67    browser.contentWindow
     68  );
     69  // click on the second tab item
     70  rect = tree.getCoordsForCellItem(2, tree.columns[1], "text");
     71  EventUtils.synthesizeMouse(
     72    tree.body,
     73    rect.x,
     74    rect.y,
     75    { button: 1 },
     76    browser.contentWindow
     77  );
     78 
     79  is(
     80    win.gBrowser.tabs.length,
     81    3,
     82    "The total number of tabs should be 3 after restoring 2 tabs by middle click."
     83  );
     84  is(
     85    win.gBrowser.visibleTabs.length,
     86    3,
     87    "The total number of visible tabs should be 3 after restoring 2 tabs by middle click"
     88  );
     89 }
     90 
     91 async function newWindowWithState(state) {
     92  let opts = "chrome,all,dialog=no,height=800,width=800";
     93  let win = window.openDialog(AppConstants.BROWSER_CHROME_URL, "_blank", opts);
     94 
     95  await BrowserTestUtils.waitForEvent(win, "load");
     96 
     97  // The form data will be restored before SSTabRestored, so we want to listen
     98  // for that on the currently selected tab
     99  await new Promise(resolve => {
    100    win.gBrowser.tabContainer.addEventListener(
    101      "SSTabRestored",
    102      function onSSTabRestored(event) {
    103        let tab = event.target;
    104        if (tab.selected) {
    105          win.gBrowser.tabContainer.removeEventListener(
    106            "SSTabRestored",
    107            onSSTabRestored,
    108            true
    109          );
    110          resolve();
    111        }
    112      },
    113      true
    114    );
    115 
    116    executeSoon(() => ss.setWindowState(win, JSON.stringify(state), true));
    117  });
    118 
    119  return win;
    120 }