diff options
Diffstat (limited to 'browser/components/sessionstore/test/browser_526613.js')
-rw-r--r-- | browser/components/sessionstore/test/browser_526613.js | 72 |
1 files changed, 72 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 000000000..7e7fe8059 --- /dev/null +++ b/browser/components/sessionstore/test/browser_526613.js @@ -0,0 +1,72 @@ +/* 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; + let e = Services.wm.getEnumerator("navigator:browser"); + while (e.hasMoreElements()) { + if (!e.getNext().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", false); + + // set browser to test state + ss.setBrowserState(JSON.stringify(testState)); +} |