tor-browser

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

browser_636279.js (3078B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 var stateBackup = ss.getBrowserState();
      5 
      6 var statePinned = {
      7  windows: [
      8    {
      9      tabs: [
     10        {
     11          entries: [
     12            { url: "http://example.com#1", triggeringPrincipal_base64 },
     13          ],
     14          pinned: true,
     15        },
     16      ],
     17    },
     18  ],
     19 };
     20 
     21 var state = {
     22  windows: [
     23    {
     24      tabs: [
     25        {
     26          entries: [
     27            { url: "http://example.com#1", triggeringPrincipal_base64 },
     28          ],
     29        },
     30        {
     31          entries: [
     32            { url: "http://example.com#2", triggeringPrincipal_base64 },
     33          ],
     34        },
     35        {
     36          entries: [
     37            { url: "http://example.com#3", triggeringPrincipal_base64 },
     38          ],
     39        },
     40        {
     41          entries: [
     42            { url: "http://example.com#4", triggeringPrincipal_base64 },
     43          ],
     44        },
     45      ],
     46    },
     47  ],
     48 };
     49 
     50 function test() {
     51  waitForExplicitFinish();
     52 
     53  registerCleanupFunction(function () {
     54    TabsProgressListener.uninit();
     55    ss.setBrowserState(stateBackup);
     56  });
     57 
     58  TabsProgressListener.init();
     59 
     60  window.addEventListener(
     61    "SSWindowStateReady",
     62    function () {
     63      let firstProgress = true;
     64 
     65      TabsProgressListener.setCallback(function (needsRestore, isRestoring) {
     66        if (firstProgress) {
     67          firstProgress = false;
     68          is(isRestoring, 3, "restoring 3 tabs concurrently");
     69        } else {
     70          Assert.lessOrEqual(
     71            isRestoring,
     72            3,
     73            "restoring max. 2 tabs concurrently"
     74          );
     75        }
     76 
     77        if (0 == needsRestore) {
     78          TabsProgressListener.unsetCallback();
     79          waitForFocus(finish);
     80        }
     81      });
     82 
     83      ss.setBrowserState(JSON.stringify(state));
     84    },
     85    { once: true }
     86  );
     87 
     88  ss.setBrowserState(JSON.stringify(statePinned));
     89 }
     90 
     91 function countTabs() {
     92  let needsRestore = 0,
     93    isRestoring = 0;
     94  for (let window of Services.wm.getEnumerator("navigator:browser")) {
     95    if (window.closed) {
     96      continue;
     97    }
     98 
     99    for (let i = 0; i < window.gBrowser.tabs.length; i++) {
    100      let browserState = ss.getInternalObjectState(
    101        window.gBrowser.tabs[i].linkedBrowser
    102      );
    103      if (browserState == TAB_STATE_RESTORING) {
    104        isRestoring++;
    105      } else if (browserState == TAB_STATE_NEEDS_RESTORE) {
    106        needsRestore++;
    107      }
    108    }
    109  }
    110 
    111  return [needsRestore, isRestoring];
    112 }
    113 
    114 var TabsProgressListener = {
    115  init() {
    116    Services.obs.addObserver(this, "sessionstore-debug-tab-restored");
    117  },
    118 
    119  uninit() {
    120    Services.obs.removeObserver(this, "sessionstore-debug-tab-restored");
    121    this.unsetCallback();
    122  },
    123 
    124  setCallback(callback) {
    125    this.callback = callback;
    126  },
    127 
    128  unsetCallback() {
    129    delete this.callback;
    130  },
    131 
    132  observe(browser) {
    133    TabsProgressListener.onRestored(browser);
    134  },
    135 
    136  onRestored(browser) {
    137    if (
    138      this.callback &&
    139      ss.getInternalObjectState(browser) == TAB_STATE_RESTORING
    140    ) {
    141      this.callback.apply(null, countTabs());
    142    }
    143  },
    144 };