1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
function test() {
/** Test for Bug 526613 **/
// test setup
waitForExplicitFinish();
function browserWindowsCount(expected) {
let count = 0;
for (let win of Services.wm.getEnumerator("navigator:browser")) {
if (!win.closed) {
++count;
}
}
is(
count,
expected,
"number of open browser windows according to nsIWindowMediator"
);
let state = ss.getBrowserState();
info(state);
is(
JSON.parse(state).windows.length,
expected,
"number of open browser windows according to getBrowserState"
);
}
browserWindowsCount(1);
// backup old state
let oldState = ss.getBrowserState();
// create a new state for testing
let testState = {
windows: [
{ tabs: [{ entries: [{ url: "http://example.com/" }] }], selected: 1 },
{ tabs: [{ entries: [{ url: "about:mozilla" }] }], selected: 1 },
],
// make sure the first window is focused, otherwise when restoring the
// old state, the first window is closed and the test harness gets unloaded
selectedWindow: 1,
};
let pass = 1;
function observer(aSubject, aTopic, aData) {
is(
aTopic,
"sessionstore-browser-state-restored",
"The sessionstore-browser-state-restored notification was observed"
);
if (pass++ == 1) {
browserWindowsCount(2);
// let the first window be focused (see above)
function pollMostRecentWindow() {
if (Services.wm.getMostRecentWindow("navigator:browser") == window) {
ss.setBrowserState(oldState);
} else {
info("waiting for the current window to become active");
setTimeout(pollMostRecentWindow, 0);
window.focus(); // XXX Why is this needed?
}
}
pollMostRecentWindow();
} else {
browserWindowsCount(1);
ok(
!window.closed,
"Restoring the old state should have left this window open"
);
Services.obs.removeObserver(
observer,
"sessionstore-browser-state-restored"
);
finish();
}
}
Services.obs.addObserver(observer, "sessionstore-browser-state-restored");
// set browser to test state
ss.setBrowserState(JSON.stringify(testState));
}
|