Wed, 31 Dec 2014 06:09:35 +0100
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 }