summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/test/browser_526613.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/sessionstore/test/browser_526613.js')
-rw-r--r--browser/components/sessionstore/test/browser_526613.js86
1 files changed, 86 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_526613.js b/browser/components/sessionstore/test/browser_526613.js
new file mode 100644
index 0000000000..ba3f03ef32
--- /dev/null
+++ b/browser/components/sessionstore/test/browser_526613.js
@@ -0,0 +1,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));
+}