tor-browser

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

browser_586068-window_state.js (3170B)


      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 = state1.windows[0].tabs.length + 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        ss.setWindowState(window, JSON.stringify(state2), false);
     89      }
     90 
     91      if (loadCount < numTabs) {
     92        return;
     93      }
     94 
     95      // We don't actually care about load order in this test, just that they all
     96      // do load.
     97      is(
     98        loadCount,
     99        numTabs,
    100        "test_setWindowStateNoOverwrite: all tabs were restored"
    101      );
    102      is(aNeedRestore, 0, "there are no tabs left needing restore");
    103 
    104      gProgressListener.unsetCallback();
    105      resolve();
    106    });
    107  });
    108 
    109  let backupState = ss.getBrowserState();
    110  ss.setWindowState(window, JSON.stringify(state1), true);
    111  await promiseRestoringTabs;
    112 
    113  // Cleanup.
    114  await promiseBrowserState(backupState);
    115 });