browser/components/sessionstore/test/browser_394759_purge.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 Components.utils.import("resource://gre/modules/ForgetAboutSite.jsm");
     7 function waitForClearHistory(aCallback) {
     8   let observer = {
     9     observe: function(aSubject, aTopic, aData) {
    10       Services.obs.removeObserver(this, "browser:purge-domain-data");
    11       setTimeout(aCallback, 0);
    12     }
    13   };
    14   Services.obs.addObserver(observer, "browser:purge-domain-data", false);
    15 }
    17 function test() {
    18   waitForExplicitFinish();
    19   // utility functions
    20   function countClosedTabsByTitle(aClosedTabList, aTitle)
    21     aClosedTabList.filter(function (aData) aData.title == aTitle).length;
    23   function countOpenTabsByTitle(aOpenTabList, aTitle)
    24     aOpenTabList.filter(function (aData) aData.entries.some(function (aEntry) aEntry.title == aTitle)).length
    26   // backup old state
    27   let oldState = ss.getBrowserState();
    28   let oldState_wins = JSON.parse(oldState).windows.length;
    29   if (oldState_wins != 1)
    30     ok(false, "oldState in test_purge has " + oldState_wins + " windows instead of 1");
    32   // create a new state for testing
    33   const REMEMBER = Date.now(), FORGET = Math.random();
    34   let testState = {
    35     windows: [ { tabs: [{ entries: [{ url: "http://example.com/" }] }], selected: 1 } ],
    36     _closedWindows : [
    37       // _closedWindows[0]
    38       {
    39         tabs: [
    40           { entries: [{ url: "http://example.com/", title: REMEMBER }] },
    41           { entries: [{ url: "http://mozilla.org/", title: FORGET }] }
    42         ],
    43         selected: 2,
    44         title: "mozilla.org",
    45         _closedTabs: []
    46       },
    47       // _closedWindows[1]
    48       {
    49         tabs: [
    50          { entries: [{ url: "http://mozilla.org/", title: FORGET }] },
    51          { entries: [{ url: "http://example.com/", title: REMEMBER }] },
    52          { entries: [{ url: "http://example.com/", title: REMEMBER }] },
    53          { entries: [{ url: "http://mozilla.org/", title: FORGET }] },
    54          { entries: [{ url: "http://example.com/", title: REMEMBER }] }
    55         ],
    56         selected: 5,
    57         _closedTabs: []
    58       },
    59       // _closedWindows[2]
    60       {
    61         tabs: [
    62           { entries: [{ url: "http://example.com/", title: REMEMBER }] }
    63         ],
    64         selected: 1,
    65         _closedTabs: [
    66           {
    67             state: {
    68               entries: [
    69                 { url: "http://mozilla.org/", title: FORGET },
    70                 { url: "http://mozilla.org/again", title: "doesn't matter" }
    71               ]
    72             },
    73             pos: 1,
    74             title: FORGET
    75           },
    76           {
    77             state: {
    78               entries: [
    79                 { url: "http://example.com", title: REMEMBER }
    80               ]
    81             },
    82             title: REMEMBER
    83           }
    84         ]
    85       }
    86     ]
    87   };
    89   // set browser to test state
    90   ss.setBrowserState(JSON.stringify(testState));
    92   // purge domain & check that we purged correctly for closed windows
    93   ForgetAboutSite.removeDataFromDomain("mozilla.org");
    94   waitForClearHistory(function() {
    95     let closedWindowData = JSON.parse(ss.getClosedWindowData());
    97     // First set of tests for _closedWindows[0] - tests basics
    98     let win = closedWindowData[0];
    99     is(win.tabs.length, 1, "1 tab was removed");
   100     is(countOpenTabsByTitle(win.tabs, FORGET), 0,
   101        "The correct tab was removed");
   102     is(countOpenTabsByTitle(win.tabs, REMEMBER), 1,
   103        "The correct tab was remembered");
   104     is(win.selected, 1, "Selected tab has changed");
   105     is(win.title, REMEMBER, "The window title was correctly updated");
   107     // Test more complicated case
   108     win = closedWindowData[1];
   109     is(win.tabs.length, 3, "2 tabs were removed");
   110     is(countOpenTabsByTitle(win.tabs, FORGET), 0,
   111        "The correct tabs were removed");
   112     is(countOpenTabsByTitle(win.tabs, REMEMBER), 3,
   113        "The correct tabs were remembered");
   114     is(win.selected, 3, "Selected tab has changed");
   115     is(win.title, REMEMBER, "The window title was correctly updated");
   117     // Tests handling of _closedTabs
   118     win = closedWindowData[2];
   119     is(countClosedTabsByTitle(win._closedTabs, REMEMBER), 1,
   120        "The correct number of tabs were removed, and the correct ones");
   121     is(countClosedTabsByTitle(win._closedTabs, FORGET), 0,
   122        "All tabs to be forgotten were indeed removed");
   124     // restore pre-test state
   125     ss.setBrowserState(oldState);
   126     finish();
   127   });
   128 }

mercurial