42 let ss =
Cc[
"@mozilla.org/browser/sessionstore;1"].getService(
Ci.nsISessionStore);
45 const REMEMBER = Date.now(), FORGET = Math.random();
46 let test_state = {
windows: [{
"tabs": [{
"entries": [] }], _closedTabs: [
47 { state: { entries: [{
url:
"http://www.example.net/" }] }, title: FORGET },
48 { state: { entries: [{
url:
"http://www.example.net/" }] }, title: REMEMBER },
49 { state: { entries: [{
url:
"http://www.example.net/" }] }, title: FORGET },
50 { state: { entries: [{
url:
"http://www.example.net/" }] }, title: REMEMBER },
52 let remember_count = 2;
54 function countByTitle(aClosedTabList, aTitle)
55 aClosedTabList.filter(
function(
aData)
aData.title == aTitle).length;
57 function testForError(aFunction) {
63 return ex.name ==
"NS_ERROR_ILLEGAL_VALUE";
68 let newWin = openDialog(location,
"_blank",
"chrome,all,dialog=no");
69 newWin.addEventListener(
"load",
function(aEvent) {
70 gPrefService.setIntPref(
"browser.sessionstore.max_tabs_undo",
71 test_state.windows[0]._closedTabs.length);
72 ss.setWindowState(newWin,
JSON.stringify(test_state),
true);
74 let closedTabs = eval(
"(" + ss.getClosedTabData(newWin) +
")");
75 is(closedTabs.length, test_state.windows[0]._closedTabs.length,
76 "Closed tab list has the expected length");
77 is(countByTitle(closedTabs, FORGET),
78 test_state.windows[0]._closedTabs.length - remember_count,
79 "The correct amout of tabs are to be forgotten");
80 is(countByTitle(closedTabs, REMEMBER), remember_count,
81 "Everything is set up.");
84 ok(testForError(
function() ss.forgetClosedTab({}, 0)),
85 "Invalid window for forgetClosedTab throws");
86 ok(testForError(
function() ss.forgetClosedTab(newWin, -1)),
87 "Invalid tab for forgetClosedTab throws");
88 ok(testForError(
function() ss.forgetClosedTab(newWin, test_state.windows[0]._closedTabs.length + 1)),
89 "Invalid tab for forgetClosedTab throws");
92 ss.forgetClosedTab(newWin, 2);
93 ss.forgetClosedTab(newWin,
null);
95 closedTabs = eval(
"(" + ss.getClosedTabData(newWin) +
")");
96 is(closedTabs.length, remember_count,
97 "The correct amout of tabs was removed");
98 is(countByTitle(closedTabs, FORGET), 0,
99 "All tabs specifically forgotten were indeed removed");
100 is(countByTitle(closedTabs, REMEMBER), remember_count,
101 "... and tabs not specifically forgetten weren't.");
105 gPrefService.clearUserPref(
"browser.sessionstore.max_tabs_undo");
_updateTextAndScrollDataForFrame aData