michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: let tabState = { michael@0: entries: [{url: "data:text/html;charset=utf-8,", formdata: { id: { "foo": "bar" } } }] michael@0: }; michael@0: michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: Services.prefs.setBoolPref("browser.sessionstore.restore_on_demand", true); michael@0: michael@0: registerCleanupFunction(function () { michael@0: if (gBrowser.tabs.length > 1) michael@0: gBrowser.removeTab(gBrowser.tabs[1]); michael@0: Services.prefs.clearUserPref("browser.sessionstore.restore_on_demand"); michael@0: }); michael@0: michael@0: let tab = gBrowser.addTab("about:blank"); michael@0: let browser = tab.linkedBrowser; michael@0: michael@0: whenBrowserLoaded(browser, function () { michael@0: isnot(gBrowser.selectedTab, tab, "newly created tab is not selected"); michael@0: michael@0: ss.setTabState(tab, JSON.stringify(tabState)); michael@0: is(browser.__SS_restoreState, TAB_STATE_NEEDS_RESTORE, "tab needs restoring"); michael@0: michael@0: let state = JSON.parse(ss.getTabState(tab)); michael@0: let formdata = state.entries[0].formdata; michael@0: is(formdata && formdata.id["foo"], "bar", "tab state's formdata is valid"); michael@0: michael@0: whenTabRestored(tab, function () { michael@0: let input = browser.contentDocument.getElementById("foo"); michael@0: is(input.value, "bar", "formdata has been restored correctly"); michael@0: finish(); michael@0: }); michael@0: michael@0: // Restore the tab by selecting it. michael@0: gBrowser.selectedTab = tab; michael@0: }); michael@0: } michael@0: michael@0: function whenBrowserLoaded(aBrowser, aCallback) { michael@0: aBrowser.addEventListener("load", function onLoad() { michael@0: aBrowser.removeEventListener("load", onLoad, true); michael@0: executeSoon(aCallback); michael@0: }, true); michael@0: } michael@0: michael@0: function whenTabRestored(aTab, aCallback) { michael@0: aTab.addEventListener("SSTabRestored", function onRestored() { michael@0: aTab.removeEventListener("SSTabRestored", onRestored); michael@0: executeSoon(aCallback); michael@0: }); michael@0: }