diff -r 000000000000 -r 6474c204b198 browser/components/sessionstore/test/browser_644409-scratchpads.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/components/sessionstore/test/browser_644409-scratchpads.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,67 @@ + /* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +const testState = { + windows: [{ + tabs: [ + { entries: [{ url: "about:blank" }] }, + ] + }], + scratchpads: [ + { text: "text1", executionContext: 1 }, + { text: "", executionContext: 2, filename: "test.js" } + ] +}; + +// only finish() when correct number of windows opened +var restored = []; +function addState(state) { + restored.push(state); + + if (restored.length == testState.scratchpads.length) { + ok(statesMatch(restored, testState.scratchpads), + "Two scratchpad windows restored"); + + Services.ww.unregisterNotification(windowObserver); + finish(); + } +} + +function test() { + waitForExplicitFinish(); + + Services.ww.registerNotification(windowObserver); + + ss.setBrowserState(JSON.stringify(testState)); +} + +function windowObserver(aSubject, aTopic, aData) { + if (aTopic == "domwindowopened") { + let win = aSubject.QueryInterface(Ci.nsIDOMWindow); + win.addEventListener("load", function onLoad() { + win.removeEventListener("load", onLoad, false); + + if (win.Scratchpad) { + win.Scratchpad.addObserver({ + onReady: function() { + win.Scratchpad.removeObserver(this); + + let state = win.Scratchpad.getState(); + win.close(); + addState(state); + }, + }); + } + }, false); + } +} + +function statesMatch(restored, states) { + return states.every(function(state) { + return restored.some(function(restoredState) { + return state.filename == restoredState.filename && + state.text == restoredState.text && + state.executionContext == restoredState.executionContext; + }) + }); +}