browser/components/sessionstore/test/browser_636279.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 let stateBackup = ss.getBrowserState();
     6 let statePinned = {windows:[{tabs:[
     7   {entries:[{url:"http://example.com#1"}], pinned: true}
     8 ]}]};
    10 let state = {windows:[{tabs:[
    11   {entries:[{url:"http://example.com#1"}]},
    12   {entries:[{url:"http://example.com#2"}]},
    13   {entries:[{url:"http://example.com#3"}]},
    14   {entries:[{url:"http://example.com#4"}]},
    15 ]}]};
    17 function test() {
    18   waitForExplicitFinish();
    20   registerCleanupFunction(function () {
    21     TabsProgressListener.uninit();
    22     ss.setBrowserState(stateBackup);
    23   });
    26   TabsProgressListener.init();
    28   window.addEventListener("SSWindowStateReady", function onReady() {
    29     window.removeEventListener("SSWindowStateReady", onReady, false);
    31     let firstProgress = true;
    33     TabsProgressListener.setCallback(function (needsRestore, isRestoring) {
    34       if (firstProgress) {
    35         firstProgress = false;
    36         is(isRestoring, 3, "restoring 3 tabs concurrently");
    37       } else {
    38         ok(isRestoring <= 3, "restoring max. 2 tabs concurrently");
    39       }
    41       if (0 == needsRestore) {
    42         TabsProgressListener.unsetCallback();
    43         waitForFocus(finish);
    44       }
    45     });
    47     ss.setBrowserState(JSON.stringify(state));
    48   }, false);
    50   ss.setBrowserState(JSON.stringify(statePinned));
    51 }
    53 function countTabs() {
    54   let needsRestore = 0, isRestoring = 0;
    55   let windowsEnum = Services.wm.getEnumerator("navigator:browser");
    57   while (windowsEnum.hasMoreElements()) {
    58     let window = windowsEnum.getNext();
    59     if (window.closed)
    60       continue;
    62     for (let i = 0; i < window.gBrowser.tabs.length; i++) {
    63       let browser = window.gBrowser.tabs[i].linkedBrowser;
    64       if (browser.__SS_restoreState == TAB_STATE_RESTORING)
    65         isRestoring++;
    66       else if (browser.__SS_restoreState == TAB_STATE_NEEDS_RESTORE)
    67         needsRestore++;
    68     }
    69   }
    71   return [needsRestore, isRestoring];
    72 }
    74 let TabsProgressListener = {
    75   init: function () {
    76     Services.obs.addObserver(this, "sessionstore-debug-tab-restored", false);
    77   },
    79   uninit: function () {
    80     Services.obs.removeObserver(this, "sessionstore-debug-tab-restored");
    81     this.unsetCallback();
    82  },
    84   setCallback: function (callback) {
    85     this.callback = callback;
    86   },
    88   unsetCallback: function () {
    89     delete this.callback;
    90   },
    92   observe: function (browser, topic, data) {
    93     TabsProgressListener.onRestored(browser);
    94   },
    96   onRestored: function (browser) {
    97     if (this.callback && browser.__SS_restoreState == TAB_STATE_RESTORING) {
    98       this.callback.apply(null, countTabs());
    99     }
   100   }
   101 }

mercurial