tor-browser

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

browser_586068-apptabs_ondemand.js (3085B)


      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 const PREF_RESTORE_PINNED_TABS_ON_DEMAND =
      7  "browser.sessionstore.restore_pinned_tabs_on_demand";
      8 
      9 add_task(async function test() {
     10  Services.prefs.setBoolPref(PREF_RESTORE_ON_DEMAND, true);
     11  Services.prefs.setBoolPref(PREF_RESTORE_PINNED_TABS_ON_DEMAND, true);
     12 
     13  registerCleanupFunction(function () {
     14    Services.prefs.clearUserPref(PREF_RESTORE_ON_DEMAND);
     15    Services.prefs.clearUserPref(PREF_RESTORE_PINNED_TABS_ON_DEMAND);
     16  });
     17 
     18  let state = {
     19    windows: [
     20      {
     21        tabs: [
     22          {
     23            entries: [
     24              { url: "http://example.org/#1", triggeringPrincipal_base64 },
     25            ],
     26            extData: { uniq: r() },
     27            pinned: true,
     28          },
     29          {
     30            entries: [
     31              { url: "http://example.org/#2", triggeringPrincipal_base64 },
     32            ],
     33            extData: { uniq: r() },
     34            pinned: true,
     35          },
     36          {
     37            entries: [
     38              { url: "http://example.org/#3", triggeringPrincipal_base64 },
     39            ],
     40            extData: { uniq: r() },
     41            pinned: true,
     42          },
     43          {
     44            entries: [
     45              { url: "http://example.org/#4", triggeringPrincipal_base64 },
     46            ],
     47            extData: { uniq: r() },
     48          },
     49          {
     50            entries: [
     51              { url: "http://example.org/#5", triggeringPrincipal_base64 },
     52            ],
     53            extData: { uniq: r() },
     54          },
     55          {
     56            entries: [
     57              { url: "http://example.org/#6", triggeringPrincipal_base64 },
     58            ],
     59            extData: { uniq: r() },
     60          },
     61          {
     62            entries: [
     63              { url: "http://example.org/#7", triggeringPrincipal_base64 },
     64            ],
     65            extData: { uniq: r() },
     66          },
     67        ],
     68        selected: 5,
     69      },
     70    ],
     71  };
     72 
     73  let promiseRestoringTabs = new Promise(resolve => {
     74    gProgressListener.setCallback(
     75      function (aBrowser, aNeedRestore, aRestoring, aRestored) {
     76        // get the tab
     77        let tab;
     78        for (let i = 0; i < window.gBrowser.tabs.length; i++) {
     79          if (!tab && window.gBrowser.tabs[i].linkedBrowser == aBrowser) {
     80            tab = window.gBrowser.tabs[i];
     81          }
     82        }
     83 
     84        // Check that the load only comes from the selected tab.
     85        ok(tab.selected, "load came from selected tab");
     86        is(aNeedRestore, 6, "six tabs left to restore");
     87        is(aRestoring, 1, "one tab is restoring");
     88        is(aRestored, 0, "no tabs have been restored, yet");
     89 
     90        gProgressListener.unsetCallback();
     91        resolve();
     92      }
     93    );
     94  });
     95 
     96  let backupState = ss.getBrowserState();
     97  ss.setBrowserState(JSON.stringify(state));
     98  await promiseRestoringTabs;
     99 
    100  // Cleanup.
    101  await promiseBrowserState(backupState);
    102 });