browser/components/sessionstore/test/browser_590268.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 /* 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/. */
     5 const NUM_TABS = 12;
     7 let stateBackup = ss.getBrowserState();
     9 function test() {
    10   /** Test for Bug 590268 - Provide access to sessionstore tab data sooner **/
    11   waitForExplicitFinish();
    13   let startedTest = false;
    15   // wasLoaded will be used to keep track of tabs that have already had SSTabRestoring
    16   // fired for them.
    17   let wasLoaded = { };
    18   let restoringTabsCount = 0;
    19   let restoredTabsCount = 0;
    20   let uniq2 = { };
    21   let uniq2Count = 0;
    22   let state = { windows: [{ tabs: [] }] };
    23   // We're going to put a bunch of tabs into this state
    24   for (let i = 0; i < NUM_TABS; i++) {
    25     let uniq = r();
    26     let tabData = {
    27       entries: [{ url: "http://example.com/#" + i }],
    28       extData: { "uniq": uniq, "baz": "qux" }
    29     };
    30     state.windows[0].tabs.push(tabData);
    31     wasLoaded[uniq] = false;
    32   }
    35   function onSSTabRestoring(aEvent) {
    36     restoringTabsCount++;
    37     let uniq = ss.getTabValue(aEvent.originalTarget, "uniq");
    38     wasLoaded[uniq] = true;
    40     is(ss.getTabValue(aEvent.originalTarget, "foo"), "",
    41        "There is no value for 'foo'");
    43     // On the first SSTabRestoring we're going to run the the real test.
    44     // We'll keep this listener around so we can keep marking tabs as restored.
    45     if (restoringTabsCount == 1)
    46       onFirstSSTabRestoring();
    47     else if (restoringTabsCount == NUM_TABS)
    48       onLastSSTabRestoring();
    49   }
    51   function onSSTabRestored(aEvent) {
    52     if (++restoredTabsCount < NUM_TABS)
    53       return;
    54     cleanup();
    55   }
    57   function onTabOpen(aEvent) {
    58     // To test bug 614708, we'll just set a value on the tab here. This value
    59     // would previously cause us to not recognize the values in extData until
    60     // much later. So testing "uniq" failed.
    61     ss.setTabValue(aEvent.originalTarget, "foo", "bar");
    62   }
    64   // This does the actual testing. SSTabRestoring should be firing on tabs from
    65   // left to right, so we're going to start with the rightmost tab.
    66   function onFirstSSTabRestoring() {
    67     info("onFirstSSTabRestoring...");
    68     for (let i = gBrowser.tabs.length - 1; i >= 0; i--) {
    69       let tab = gBrowser.tabs[i];
    70       let actualUniq = ss.getTabValue(tab, "uniq");
    71       let expectedUniq = state.windows[0].tabs[i].extData["uniq"];
    73       if (wasLoaded[actualUniq]) {
    74         info("tab " + i + ": already restored");
    75         continue;
    76       }
    77       is(actualUniq, expectedUniq, "tab " + i + ": extData was correct");
    79       // Now we're going to set a piece of data back on the tab so it can be read
    80       // to test setting a value "early".
    81       uniq2[actualUniq] = r();
    82       ss.setTabValue(tab, "uniq2", uniq2[actualUniq]);
    84       // Delete the value we have for "baz". This tests that deleteTabValue
    85       // will delete "early access" values (c.f. bug 617175). If this doesn't throw
    86       // then the test is successful.
    87       try {
    88         ss.deleteTabValue(tab, "baz");
    89       }
    90       catch (e) {
    91         ok(false, "no error calling deleteTabValue - " + e);
    92       }
    94       // This will be used in the final comparison to make sure we checked the
    95       // same number as we set.
    96       uniq2Count++;
    97     }
    98   }
   100   function onLastSSTabRestoring() {
   101     let checked = 0;
   102     for (let i = 0; i < gBrowser.tabs.length; i++) {
   103       let tab = gBrowser.tabs[i];
   104       let uniq = ss.getTabValue(tab, "uniq");
   106       // Look to see if we set a uniq2 value for this uniq value
   107       if (uniq in uniq2) {
   108         is(ss.getTabValue(tab, "uniq2"), uniq2[uniq], "tab " + i + " has correct uniq2 value");
   109         checked++;
   110       }
   111     }
   112     ok(uniq2Count > 0, "at least 1 tab properly checked 'early access'");
   113     is(checked, uniq2Count, "checked the same number of uniq2 as we set");
   114   }
   116   function cleanup() {
   117     // remove the event listener and clean up before finishing
   118     gBrowser.tabContainer.removeEventListener("SSTabRestoring", onSSTabRestoring, false);
   119     gBrowser.tabContainer.removeEventListener("SSTabRestored", onSSTabRestored, true);
   120     gBrowser.tabContainer.removeEventListener("TabOpen", onTabOpen, false);
   121     // Put this in an executeSoon because we still haven't called restoreNextTab
   122     // in sessionstore for the last tab (we'll call it after this). We end up
   123     // trying to restore the tab (since we then add a closed tab to the array).
   124     executeSoon(function() {
   125       ss.setBrowserState(stateBackup);
   126       executeSoon(finish);
   127     });
   128   }
   130   // Add the event listeners
   131   gBrowser.tabContainer.addEventListener("SSTabRestoring", onSSTabRestoring, false);
   132   gBrowser.tabContainer.addEventListener("SSTabRestored", onSSTabRestored, true);
   133   gBrowser.tabContainer.addEventListener("TabOpen", onTabOpen, false);
   134   // Restore state
   135   ss.setBrowserState(JSON.stringify(state));
   136 }

mercurial