tor-browser

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

browser_586068-apptabs.js (2852B)


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