tor-browser

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

browser_restored_window_features.js (4832B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const BARPROP_NAMES = [
      7  "locationbar",
      8  "menubar",
      9  "personalbar",
     10  "scrollbars",
     11  "statusbar",
     12  "toolbar",
     13 ];
     14 
     15 function testFeatures(win, test) {
     16  for (let name of BARPROP_NAMES) {
     17    is(
     18      win[name].visible,
     19      !!test.barprops?.[name],
     20      name + " should be " + (test.barprops?.[name] ? "visible" : "hidden")
     21    );
     22  }
     23  let toolbar = win.document.getElementById("TabsToolbar");
     24  is(
     25    toolbar.collapsed,
     26    !win.toolbar.visible,
     27    win.toolbar.visible
     28      ? "tabbar should not be collapsed"
     29      : "tabbar should be collapsed"
     30  );
     31  let chromeFlags = win.docShell.treeOwner
     32    .QueryInterface(Ci.nsIInterfaceRequestor)
     33    .getInterface(Ci.nsIAppWindow).chromeFlags;
     34  is(chromeFlags & test.chromeFlags, test.chromeFlags, "flags should be set");
     35  if (test.unsetFlags) {
     36    is(chromeFlags & test.unsetFlags, 0, "flags should be unset");
     37  }
     38 }
     39 
     40 add_task(async function testRestoredWindowFeatures() {
     41  const DUMMY_PAGE =
     42    "browser/components/tabbrowser/test/browser/tabs/dummy_page.html";
     43  const ALL_BARPROPS = {
     44    locationbar: true,
     45    menubar: true,
     46    personalbar: true,
     47    scrollbars: true,
     48    statusbar: true,
     49    toolbar: true,
     50  };
     51  const TESTS = [
     52    {
     53      url: "http://example.com/browser/" + DUMMY_PAGE,
     54      features: "menubar=0,resizable",
     55      barprops: { scrollbars: true },
     56      chromeFlags: Ci.nsIWebBrowserChrome.CHROME_WINDOW_RESIZE,
     57      unsetFlags: Ci.nsIWebBrowserChrome.CHROME_OPENAS_DIALOG,
     58    },
     59    {
     60      url: "data:,", // title should be empty
     61      checkContentTitleEmpty: true,
     62      features: "location,resizable",
     63      barprops: { locationbar: true, scrollbars: true },
     64      chromeFlags: Ci.nsIWebBrowserChrome.CHROME_WINDOW_RESIZE,
     65      unsetFlags: Ci.nsIWebBrowserChrome.CHROME_OPENAS_DIALOG,
     66    },
     67    {
     68      url: "http://example.com/browser/" + DUMMY_PAGE,
     69      features: "dialog,resizable",
     70      barprops: { scrollbars: true },
     71      chromeFlags:
     72        Ci.nsIWebBrowserChrome.CHROME_OPENAS_DIALOG |
     73        Ci.nsIWebBrowserChrome.CHROME_WINDOW_RESIZE,
     74    },
     75    {
     76      chrome: true,
     77      url: "http://example.com/browser/" + DUMMY_PAGE,
     78      features: "chrome,all,dialog=no",
     79      barprops: ALL_BARPROPS,
     80      chromeFlags: Ci.nsIWebBrowserChrome.CHROME_ALL,
     81      unsetFlags: Ci.nsIWebBrowserChrome.CHROME_OPENAS_DIALOG,
     82    },
     83    {
     84      chrome: true,
     85      url: "http://example.com/browser/" + DUMMY_PAGE,
     86      features: "chrome,all,dialog=no,centerscreen",
     87      barprops: ALL_BARPROPS,
     88      chromeFlags: Ci.nsIWebBrowserChrome.CHROME_CENTER_SCREEN,
     89    },
     90    {
     91      chrome: true,
     92      url: "http://example.com/browser/" + DUMMY_PAGE,
     93      features: "chrome,all,dialog=no,dependent",
     94      barprops: ALL_BARPROPS,
     95      chromeFlags: Ci.nsIWebBrowserChrome.CHROME_DEPENDENT,
     96    },
     97  ];
     98  const TEST_URL_CHROME = "chrome://mochitests/content/browser/" + DUMMY_PAGE;
     99 
    100  BrowserTestUtils.startLoadingURIString(
    101    gBrowser.selectedBrowser,
    102    TEST_URL_CHROME
    103  );
    104  await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
    105 
    106  for (let test of TESTS) {
    107    let newWindowPromise = BrowserTestUtils.waitForNewWindow({
    108      url: test.url,
    109    });
    110    let win;
    111    if (test.chrome) {
    112      win = window.openDialog(
    113        AppConstants.BROWSER_CHROME_URL,
    114        "_blank",
    115        test.features,
    116        test.url
    117      );
    118    } else {
    119      await SpecialPowers.spawn(gBrowser.selectedBrowser, [test], t => {
    120        content.window.open(t.url, "_blank", t.features);
    121      });
    122    }
    123    win = await newWindowPromise;
    124 
    125    let title = win.document.title;
    126    if (test.checkContentTitleEmpty) {
    127      let contentTitle = await SpecialPowers.spawn(
    128        win.gBrowser.selectedBrowser,
    129        [],
    130        () => content.document.title
    131      );
    132      is(contentTitle, "", "title should be empty");
    133    }
    134 
    135    testFeatures(win, test);
    136    let chromeFlags = win.docShell.treeOwner
    137      .QueryInterface(Ci.nsIInterfaceRequestor)
    138      .getInterface(Ci.nsIAppWindow).chromeFlags;
    139 
    140    await BrowserTestUtils.closeWindow(win);
    141 
    142    newWindowPromise = BrowserTestUtils.waitForNewWindow({
    143      url: test.url,
    144    });
    145    SessionStore.undoCloseWindow(0);
    146    win = await newWindowPromise;
    147 
    148    is(title, win.document.title, "title should be preserved");
    149    testFeatures(win, test);
    150    is(
    151      win.docShell.treeOwner
    152        .QueryInterface(Ci.nsIInterfaceRequestor)
    153        .getInterface(Ci.nsIAppWindow).chromeFlags,
    154      // Use |>>> 0| to force unsigned.
    155      (chromeFlags |
    156        Ci.nsIWebBrowserChrome.CHROME_OPENAS_CHROME |
    157        Ci.nsIWebBrowserChrome.CHROME_SUPPRESS_ANIMATION) >>>
    158        0,
    159      "unexpected chromeFlags"
    160    );
    161 
    162    await BrowserTestUtils.closeWindow(win);
    163  }
    164 });