browser_aboutSessionRestore.js (2143B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const CRASH_URL = "about:mozilla"; 7 const CRASH_FAVICON = "chrome://branding/content/icon32.png"; 8 const CRASH_SHENTRY = { url: CRASH_URL, triggeringPrincipal_base64 }; 9 const CRASH_TAB = { entries: [CRASH_SHENTRY], image: CRASH_FAVICON }; 10 const CRASH_STATE = { windows: [{ tabs: [CRASH_TAB] }] }; 11 12 const TAB_URL = "about:sessionrestore"; 13 const TAB_FORMDATA = { url: TAB_URL, id: { sessionData: CRASH_STATE } }; 14 const TAB_SHENTRY = { url: TAB_URL, triggeringPrincipal_base64 }; 15 const TAB_STATE = { entries: [TAB_SHENTRY], formdata: TAB_FORMDATA }; 16 17 add_task(async function () { 18 // Prepare a blank tab. 19 let tab = BrowserTestUtils.addTab(gBrowser, "about:blank"); 20 let browser = tab.linkedBrowser; 21 await BrowserTestUtils.browserLoaded(browser, { wantLoad: "about:blank" }); 22 23 // Fake a post-crash tab. 24 ss.setTabState(tab, JSON.stringify(TAB_STATE)); 25 await promiseTabRestored(tab); 26 27 Assert.greater(gBrowser.tabs.length, 1, "we have more than one tab"); 28 29 let tabsToggle = browser.contentDocument.getElementById("tabsToggle"); 30 tabsToggle.click(); 31 await BrowserTestUtils.waitForCondition( 32 () => browser.contentWindow.gTreeInitialized 33 ); 34 let tree = browser.contentDocument.getElementById("tabList"); 35 let view = tree.view; 36 ok(view.isContainer(0), "first entry is the window"); 37 let titleColumn = tree.columns.title; 38 is( 39 view.getCellProperties(1, titleColumn), 40 "icon", 41 "second entry is the tab and has a favicon" 42 ); 43 44 let newWindowOpened = BrowserTestUtils.waitForNewWindow(); 45 46 SpecialPowers.spawn(browser.browsingContext, [], () => { 47 content.document.getElementById("errorTryAgain").click(); 48 }); 49 50 // Wait until the new window was restored. 51 let win = await newWindowOpened; 52 53 BrowserTestUtils.removeTab(tab); 54 await BrowserTestUtils.closeWindow(win); 55 56 let [ 57 { 58 tabs: [ 59 { 60 entries: [{ url }], 61 }, 62 ], 63 }, 64 ] = ss.getClosedWindowData(); 65 is(url, CRASH_URL, "session was restored correctly"); 66 ss.forgetClosedWindow(0); 67 });