1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/components/sessionstore/test/browser_394759_purge.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,128 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +Components.utils.import("resource://gre/modules/ForgetAboutSite.jsm"); 1.9 + 1.10 +function waitForClearHistory(aCallback) { 1.11 + let observer = { 1.12 + observe: function(aSubject, aTopic, aData) { 1.13 + Services.obs.removeObserver(this, "browser:purge-domain-data"); 1.14 + setTimeout(aCallback, 0); 1.15 + } 1.16 + }; 1.17 + Services.obs.addObserver(observer, "browser:purge-domain-data", false); 1.18 +} 1.19 + 1.20 +function test() { 1.21 + waitForExplicitFinish(); 1.22 + // utility functions 1.23 + function countClosedTabsByTitle(aClosedTabList, aTitle) 1.24 + aClosedTabList.filter(function (aData) aData.title == aTitle).length; 1.25 + 1.26 + function countOpenTabsByTitle(aOpenTabList, aTitle) 1.27 + aOpenTabList.filter(function (aData) aData.entries.some(function (aEntry) aEntry.title == aTitle)).length 1.28 + 1.29 + // backup old state 1.30 + let oldState = ss.getBrowserState(); 1.31 + let oldState_wins = JSON.parse(oldState).windows.length; 1.32 + if (oldState_wins != 1) 1.33 + ok(false, "oldState in test_purge has " + oldState_wins + " windows instead of 1"); 1.34 + 1.35 + // create a new state for testing 1.36 + const REMEMBER = Date.now(), FORGET = Math.random(); 1.37 + let testState = { 1.38 + windows: [ { tabs: [{ entries: [{ url: "http://example.com/" }] }], selected: 1 } ], 1.39 + _closedWindows : [ 1.40 + // _closedWindows[0] 1.41 + { 1.42 + tabs: [ 1.43 + { entries: [{ url: "http://example.com/", title: REMEMBER }] }, 1.44 + { entries: [{ url: "http://mozilla.org/", title: FORGET }] } 1.45 + ], 1.46 + selected: 2, 1.47 + title: "mozilla.org", 1.48 + _closedTabs: [] 1.49 + }, 1.50 + // _closedWindows[1] 1.51 + { 1.52 + tabs: [ 1.53 + { entries: [{ url: "http://mozilla.org/", title: FORGET }] }, 1.54 + { entries: [{ url: "http://example.com/", title: REMEMBER }] }, 1.55 + { entries: [{ url: "http://example.com/", title: REMEMBER }] }, 1.56 + { entries: [{ url: "http://mozilla.org/", title: FORGET }] }, 1.57 + { entries: [{ url: "http://example.com/", title: REMEMBER }] } 1.58 + ], 1.59 + selected: 5, 1.60 + _closedTabs: [] 1.61 + }, 1.62 + // _closedWindows[2] 1.63 + { 1.64 + tabs: [ 1.65 + { entries: [{ url: "http://example.com/", title: REMEMBER }] } 1.66 + ], 1.67 + selected: 1, 1.68 + _closedTabs: [ 1.69 + { 1.70 + state: { 1.71 + entries: [ 1.72 + { url: "http://mozilla.org/", title: FORGET }, 1.73 + { url: "http://mozilla.org/again", title: "doesn't matter" } 1.74 + ] 1.75 + }, 1.76 + pos: 1, 1.77 + title: FORGET 1.78 + }, 1.79 + { 1.80 + state: { 1.81 + entries: [ 1.82 + { url: "http://example.com", title: REMEMBER } 1.83 + ] 1.84 + }, 1.85 + title: REMEMBER 1.86 + } 1.87 + ] 1.88 + } 1.89 + ] 1.90 + }; 1.91 + 1.92 + // set browser to test state 1.93 + ss.setBrowserState(JSON.stringify(testState)); 1.94 + 1.95 + // purge domain & check that we purged correctly for closed windows 1.96 + ForgetAboutSite.removeDataFromDomain("mozilla.org"); 1.97 + waitForClearHistory(function() { 1.98 + let closedWindowData = JSON.parse(ss.getClosedWindowData()); 1.99 + 1.100 + // First set of tests for _closedWindows[0] - tests basics 1.101 + let win = closedWindowData[0]; 1.102 + is(win.tabs.length, 1, "1 tab was removed"); 1.103 + is(countOpenTabsByTitle(win.tabs, FORGET), 0, 1.104 + "The correct tab was removed"); 1.105 + is(countOpenTabsByTitle(win.tabs, REMEMBER), 1, 1.106 + "The correct tab was remembered"); 1.107 + is(win.selected, 1, "Selected tab has changed"); 1.108 + is(win.title, REMEMBER, "The window title was correctly updated"); 1.109 + 1.110 + // Test more complicated case 1.111 + win = closedWindowData[1]; 1.112 + is(win.tabs.length, 3, "2 tabs were removed"); 1.113 + is(countOpenTabsByTitle(win.tabs, FORGET), 0, 1.114 + "The correct tabs were removed"); 1.115 + is(countOpenTabsByTitle(win.tabs, REMEMBER), 3, 1.116 + "The correct tabs were remembered"); 1.117 + is(win.selected, 3, "Selected tab has changed"); 1.118 + is(win.title, REMEMBER, "The window title was correctly updated"); 1.119 + 1.120 + // Tests handling of _closedTabs 1.121 + win = closedWindowData[2]; 1.122 + is(countClosedTabsByTitle(win._closedTabs, REMEMBER), 1, 1.123 + "The correct number of tabs were removed, and the correct ones"); 1.124 + is(countClosedTabsByTitle(win._closedTabs, FORGET), 0, 1.125 + "All tabs to be forgotten were indeed removed"); 1.126 + 1.127 + // restore pre-test state 1.128 + ss.setBrowserState(oldState); 1.129 + finish(); 1.130 + }); 1.131 +}