browser_purge_shistory.js (2044B)
1 "use strict"; 2 3 /** 4 * This test checks that pending tabs are treated like fully loaded tabs when 5 * purging session history. Just like for fully loaded tabs we want to remove 6 * every but the current shistory entry. 7 */ 8 9 const TAB_STATE = { 10 entries: [ 11 { url: "about:mozilla", triggeringPrincipal_base64 }, 12 { url: "about:robots", triggeringPrincipal_base64 }, 13 ], 14 index: 1, 15 }; 16 17 function checkTabContents(browser) { 18 return SpecialPowers.spawn(browser, [], async function () { 19 let webNavigation = docShell.QueryInterface(Ci.nsIWebNavigation); 20 let history = webNavigation.sessionHistory; 21 Assert.ok( 22 history && 23 history.count == 1 && 24 content.document.documentURI == "about:mozilla", 25 "expected tab contents found" 26 ); 27 }); 28 } 29 30 add_task(async function () { 31 // Create a new tab. 32 let tab = BrowserTestUtils.addTab(gBrowser, "about:blank"); 33 let browser = tab.linkedBrowser; 34 await BrowserTestUtils.browserLoaded(browser, { wantLoad: "about:blank" }); 35 await promiseTabState(tab, TAB_STATE); 36 37 // Create another new tab. 38 let tab2 = BrowserTestUtils.addTab(gBrowser, "about:blank"); 39 let browser2 = tab2.linkedBrowser; 40 await BrowserTestUtils.browserLoaded(browser2, { wantLoad: "about:blank" }); 41 42 // The tab shouldn't be restored right away. 43 Services.prefs.setBoolPref("browser.sessionstore.restore_on_demand", true); 44 45 // Prepare the tab state. 46 let promise = promiseTabRestoring(tab2); 47 ss.setTabState(tab2, JSON.stringify(TAB_STATE)); 48 ok(tab2.hasAttribute("pending"), "tab is pending"); 49 await promise; 50 51 // Purge session history. 52 Services.obs.notifyObservers(null, "browser:purge-session-history"); 53 await checkTabContents(browser); 54 ok(tab2.hasAttribute("pending"), "tab is still pending"); 55 56 // Kick off tab restoration. 57 gBrowser.selectedTab = tab2; 58 await promiseTabRestored(tab2); 59 await checkTabContents(browser2); 60 ok(!tab2.hasAttribute("pending"), "tab is not pending anymore"); 61 62 // Cleanup. 63 gBrowser.removeTab(tab2); 64 gBrowser.removeTab(tab); 65 });