tor-browser

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

browser_586068-window_state_override.js (3115B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 const PREF_RESTORE_ON_DEMAND = "browser.sessionstore.restore_on_demand";
      6 
      7 add_task(async function test() {
      8  Services.prefs.setBoolPref(PREF_RESTORE_ON_DEMAND, false);
      9  registerCleanupFunction(function () {
     10    Services.prefs.clearUserPref(PREF_RESTORE_ON_DEMAND);
     11  });
     12 
     13  // We'll use 2 states so that we can make sure calling setWindowState doesn't
     14  // wipe out currently restoring data.
     15  let state1 = {
     16    windows: [
     17      {
     18        tabs: [
     19          {
     20            entries: [
     21              { url: "http://example.com#1", triggeringPrincipal_base64 },
     22            ],
     23          },
     24          {
     25            entries: [
     26              { url: "http://example.com#2", triggeringPrincipal_base64 },
     27            ],
     28          },
     29          {
     30            entries: [
     31              { url: "http://example.com#3", triggeringPrincipal_base64 },
     32            ],
     33          },
     34          {
     35            entries: [
     36              { url: "http://example.com#4", triggeringPrincipal_base64 },
     37            ],
     38          },
     39          {
     40            entries: [
     41              { url: "http://example.com#5", triggeringPrincipal_base64 },
     42            ],
     43          },
     44        ],
     45      },
     46    ],
     47  };
     48  let state2 = {
     49    windows: [
     50      {
     51        tabs: [
     52          {
     53            entries: [
     54              { url: "http://example.org#1", triggeringPrincipal_base64 },
     55            ],
     56          },
     57          {
     58            entries: [
     59              { url: "http://example.org#2", triggeringPrincipal_base64 },
     60            ],
     61          },
     62          {
     63            entries: [
     64              { url: "http://example.org#3", triggeringPrincipal_base64 },
     65            ],
     66          },
     67          {
     68            entries: [
     69              { url: "http://example.org#4", triggeringPrincipal_base64 },
     70            ],
     71          },
     72          {
     73            entries: [
     74              { url: "http://example.org#5", triggeringPrincipal_base64 },
     75            ],
     76          },
     77        ],
     78      },
     79    ],
     80  };
     81  let numTabs = 2 + state2.windows[0].tabs.length;
     82 
     83  let loadCount = 0;
     84  let promiseRestoringTabs = new Promise(resolve => {
     85    gProgressListener.setCallback(function (aBrowser, aNeedRestore) {
     86      // When loadCount == 2, we'll also restore state2 into the window
     87      if (++loadCount == 2) {
     88        executeSoon(() =>
     89          ss.setWindowState(window, JSON.stringify(state2), true)
     90        );
     91      }
     92 
     93      if (loadCount < numTabs) {
     94        return;
     95      }
     96 
     97      // We don't actually care about load order in this test, just that they all
     98      // do load.
     99      is(loadCount, numTabs, "all tabs were restored");
    100      is(aNeedRestore, 0, "there are no tabs left needing restore");
    101 
    102      gProgressListener.unsetCallback();
    103      resolve();
    104    });
    105  });
    106 
    107  let backupState = ss.getBrowserState();
    108  ss.setWindowState(window, JSON.stringify(state1), true);
    109  await promiseRestoringTabs;
    110 
    111  // Cleanup.
    112  await promiseBrowserState(backupState);
    113 });