/* 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)); }