1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/components/sessionstore/test/browser_739805.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,54 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +let tabState = { 1.8 + entries: [{url: "data:text/html;charset=utf-8,<input%20id='foo'>", formdata: { id: { "foo": "bar" } } }] 1.9 +}; 1.10 + 1.11 +function test() { 1.12 + waitForExplicitFinish(); 1.13 + Services.prefs.setBoolPref("browser.sessionstore.restore_on_demand", true); 1.14 + 1.15 + registerCleanupFunction(function () { 1.16 + if (gBrowser.tabs.length > 1) 1.17 + gBrowser.removeTab(gBrowser.tabs[1]); 1.18 + Services.prefs.clearUserPref("browser.sessionstore.restore_on_demand"); 1.19 + }); 1.20 + 1.21 + let tab = gBrowser.addTab("about:blank"); 1.22 + let browser = tab.linkedBrowser; 1.23 + 1.24 + whenBrowserLoaded(browser, function () { 1.25 + isnot(gBrowser.selectedTab, tab, "newly created tab is not selected"); 1.26 + 1.27 + ss.setTabState(tab, JSON.stringify(tabState)); 1.28 + is(browser.__SS_restoreState, TAB_STATE_NEEDS_RESTORE, "tab needs restoring"); 1.29 + 1.30 + let state = JSON.parse(ss.getTabState(tab)); 1.31 + let formdata = state.entries[0].formdata; 1.32 + is(formdata && formdata.id["foo"], "bar", "tab state's formdata is valid"); 1.33 + 1.34 + whenTabRestored(tab, function () { 1.35 + let input = browser.contentDocument.getElementById("foo"); 1.36 + is(input.value, "bar", "formdata has been restored correctly"); 1.37 + finish(); 1.38 + }); 1.39 + 1.40 + // Restore the tab by selecting it. 1.41 + gBrowser.selectedTab = tab; 1.42 + }); 1.43 +} 1.44 + 1.45 +function whenBrowserLoaded(aBrowser, aCallback) { 1.46 + aBrowser.addEventListener("load", function onLoad() { 1.47 + aBrowser.removeEventListener("load", onLoad, true); 1.48 + executeSoon(aCallback); 1.49 + }, true); 1.50 +} 1.51 + 1.52 +function whenTabRestored(aTab, aCallback) { 1.53 + aTab.addEventListener("SSTabRestored", function onRestored() { 1.54 + aTab.removeEventListener("SSTabRestored", onRestored); 1.55 + executeSoon(aCallback); 1.56 + }); 1.57 +}