tor-browser

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

browser_aboutRestartrequired_noRestore.js (3973B)


      1 "use strict";
      2 
      3 function isEntriesMatchingOnURL(A, B) {
      4  const AUrls = A.entries.map(e => e.url);
      5  const BUrls = B.entries.map(e => e.url);
      6 
      7  if (AUrls.entries.length !== BUrls.entries.length) {
      8    return false;
      9  }
     10 
     11  for (let url of AUrls) {
     12    if (!BUrls.includes(url)) {
     13      return false;
     14    }
     15  }
     16 
     17  return true;
     18 }
     19 
     20 function setState(aTab, aState) {
     21  // Prepare the tab state.
     22  let promise = promiseTabRestoring(aTab);
     23  // setTabState will go through TabState.copyFromCache() from
     24  // TabState.collect() triggered by saveStateAsyncWhenIdle()
     25  ss.setTabState(aTab, JSON.stringify(aState));
     26  return promise;
     27 }
     28 
     29 async function cleanup(aBrowser, aTab) {
     30  // Flush to ensure the parent has all data.
     31  await TabStateFlusher.flush(aBrowser);
     32 
     33  // Cleanup.
     34  gBrowser.removeTab(aTab);
     35 }
     36 
     37 async function getBrowserTab() {
     38  // Create a background tab.
     39  let tab = BrowserTestUtils.addTab(gBrowser, "about:blank");
     40  let browser = tab.linkedBrowser;
     41  await BrowserTestUtils.browserLoaded(browser, { wantLoad: "about:blank" });
     42  return [tab, browser];
     43 }
     44 
     45 add_setup(async function () {
     46  // The tab shouldn't be restored right away.
     47  Services.prefs.setBoolPref("browser.sessionstore.restore_on_demand", true);
     48 });
     49 
     50 add_task(async function only_about_restartrequired() {
     51  const TAB_STATE = {
     52    entries: [{ url: "about:restartrequired", triggeringPrincipal_base64 }],
     53  };
     54 
     55  let [tab, browser] = await getBrowserTab();
     56 
     57  const previousTabState = TabState.collect(
     58    tab,
     59    ss.getInternalObjectState(tab)
     60  );
     61  is(previousTabState.entries.length, 0, "No entries before");
     62 
     63  await setState(tab, TAB_STATE);
     64 
     65  const collectedTabState = TabState.collect(
     66    tab,
     67    ss.getInternalObjectState(tab)
     68  );
     69  is(collectedTabState.entries.length, 0, "No entry found");
     70 
     71  await cleanup(browser, tab);
     72 });
     73 
     74 add_task(async function one_and_about_restartrequired() {
     75  const TAB_STATE = {
     76    entries: [
     77      { url: "https://www.mozilla.org", triggeringPrincipal_base64 },
     78      { url: "about:restartrequired", triggeringPrincipal_base64 },
     79    ],
     80  };
     81 
     82  let [tab, browser] = await getBrowserTab();
     83 
     84  const previousTabState = TabState.collect(
     85    tab,
     86    ss.getInternalObjectState(tab)
     87  );
     88  is(previousTabState.entries.length, 0, "No entries before");
     89 
     90  await setState(tab, TAB_STATE);
     91 
     92  const collectedTabState = TabState.collect(
     93    tab,
     94    ss.getInternalObjectState(tab)
     95  );
     96  is(
     97    collectedTabState.entries[0].url,
     98    "https://www.mozilla.org",
     99    "One entry found"
    100  );
    101 
    102  await cleanup(browser, tab);
    103 });
    104 
    105 add_task(async function about_restartrequired_with_params() {
    106  const TAB_STATE = {
    107    entries: [
    108      {
    109        url: "about:restartrequired?e=restartrequired&u=about%3Asupport&c=UTF-8&d=%20",
    110        triggeringPrincipal_base64,
    111      },
    112    ],
    113  };
    114 
    115  let [tab, browser] = await getBrowserTab();
    116 
    117  const previousTabState = TabState.collect(
    118    tab,
    119    ss.getInternalObjectState(tab)
    120  );
    121  is(previousTabState.entries.length, 0, "No entries before");
    122 
    123  await setState(tab, TAB_STATE);
    124 
    125  const collectedTabState = TabState.collect(
    126    tab,
    127    ss.getInternalObjectState(tab)
    128  );
    129  is(collectedTabState.entries[0].url, "about:support", "One entry found");
    130 
    131  await cleanup(browser, tab);
    132 });
    133 
    134 add_task(async function about_restartrequired_evil() {
    135  const TAB_STATE = {
    136    entries: [
    137      {
    138        url: "https://www.mozilla.org/?u=http://evil.example.org&someParam=about:restartrequired",
    139        triggeringPrincipal_base64,
    140      },
    141    ],
    142  };
    143 
    144  let [tab, browser] = await getBrowserTab();
    145 
    146  const previousTabState = TabState.collect(
    147    tab,
    148    ss.getInternalObjectState(tab)
    149  );
    150  is(previousTabState.entries.length, 0, "No entries before");
    151 
    152  await setState(tab, TAB_STATE);
    153 
    154  const collectedTabState = TabState.collect(
    155    tab,
    156    ss.getInternalObjectState(tab)
    157  );
    158  is(
    159    collectedTabState.entries[0].url,
    160    TAB_STATE.entries[0].url,
    161    "Original URL found"
    162  );
    163 
    164  await cleanup(browser, tab);
    165 });