browser/components/sessionstore/test/browser_595601-restore_hidden.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 state = {windows:[{tabs:[
     5   {entries:[{url:"http://example.com#1"}]},
     6   {entries:[{url:"http://example.com#2"}]},
     7   {entries:[{url:"http://example.com#3"}]},
     8   {entries:[{url:"http://example.com#4"}]},
     9   {entries:[{url:"http://example.com#5"}], hidden: true},
    10   {entries:[{url:"http://example.com#6"}], hidden: true},
    11   {entries:[{url:"http://example.com#7"}], hidden: true},
    12   {entries:[{url:"http://example.com#8"}], hidden: true}
    13 ]}]};
    15 function test() {
    16   waitForExplicitFinish();
    18   registerCleanupFunction(function () {
    19     Services.prefs.clearUserPref("browser.sessionstore.restore_hidden_tabs");
    20   });
    22   // First stage: restoreHiddenTabs = true
    23   // Second stage: restoreHiddenTabs = false
    24   test_loadTabs(true, function () {
    25     test_loadTabs(false, finish);
    26   });
    27 }
    29 function test_loadTabs(restoreHiddenTabs, callback) {
    30   Services.prefs.setBoolPref("browser.sessionstore.restore_hidden_tabs", restoreHiddenTabs);
    32   let expectedTabs = restoreHiddenTabs ? 8 : 4;
    33   let firstProgress = true;
    35   newWindowWithState(state, function (win, needsRestore, isRestoring) {
    36     if (firstProgress) {
    37       firstProgress = false;
    38       is(isRestoring, 3, "restoring 3 tabs concurrently");
    39     } else {
    40       ok(isRestoring < 4, "restoring max. 3 tabs concurrently");
    41     }
    43     // We're explicity checking for (isRestoring == 1) here because the test
    44     // progress listener is called before the session store one. So when we're
    45     // called with one tab left to restore we know that the last tab has
    46     // finished restoring and will soon be handled by the SS listener.
    47     let tabsNeedingRestore = win.gBrowser.tabs.length - needsRestore;
    48     if (isRestoring == 1 && tabsNeedingRestore == expectedTabs) {
    49       is(win.gBrowser.visibleTabs.length, 4, "only 4 visible tabs");
    51       TabsProgressListener.uninit();
    52       executeSoon(callback);
    53     }
    54   });
    55 }
    57 let TabsProgressListener = {
    58   init: function (win) {
    59     this.window = win;
    60     Services.obs.addObserver(this, "sessionstore-debug-tab-restored", false);
    61   },
    63   uninit: function () {
    64     Services.obs.removeObserver(this, "sessionstore-debug-tab-restored");
    66     delete this.window;
    67     delete this.callback;
    68   },
    70   setCallback: function (callback) {
    71     this.callback = callback;
    72   },
    74   observe: function (browser) {
    75     TabsProgressListener.onRestored(browser);
    76   },
    78   onRestored: function (browser) {
    79     if (this.callback && browser.__SS_restoreState == TAB_STATE_RESTORING)
    80       this.callback.apply(null, [this.window].concat(this.countTabs()));
    81   },
    83   countTabs: function () {
    84     let needsRestore = 0, isRestoring = 0;
    86     for (let i = 0; i < this.window.gBrowser.tabs.length; i++) {
    87       let browser = this.window.gBrowser.tabs[i].linkedBrowser;
    88       if (browser.__SS_restoreState == TAB_STATE_RESTORING)
    89         isRestoring++;
    90       else if (browser.__SS_restoreState == TAB_STATE_NEEDS_RESTORE)
    91         needsRestore++;
    92     }
    94     return [needsRestore, isRestoring];
    95   }
    96 }
    98 // ----------
    99 function newWindowWithState(state, callback) {
   100   let opts = "chrome,all,dialog=no,height=800,width=800";
   101   let win = window.openDialog(getBrowserURL(), "_blank", opts);
   103   registerCleanupFunction(function () win.close());
   105   whenWindowLoaded(win, function onWindowLoaded(aWin) {
   106     TabsProgressListener.init(aWin);
   107     TabsProgressListener.setCallback(callback);
   109     ss.setWindowState(aWin, JSON.stringify(state), true);
   110   });
   111 }

mercurial