browser_restoreLastActionCorrectOrder.js (2951B)
1 "use strict"; 2 3 const { _LastSession, _lastClosedActions } = ChromeUtils.importESModule( 4 "resource:///modules/sessionstore/SessionStore.sys.mjs" 5 ); 6 7 /** 8 * Tests that the _lastClosedAction list is truncated correctly 9 * by removing oldest actions in SessionStore._addClosedAction 10 */ 11 add_task(async function test_undo_last_action_correct_order() { 12 SpecialPowers.pushPrefEnv({ 13 set: [ 14 ["browser.sessionstore.max_tabs_undo", 3], 15 ["browser.sessionstore.max_windows_undo", 1], 16 ], 17 }); 18 19 gBrowser.removeAllTabsBut(gBrowser.tabs[0]); 20 await TabStateFlusher.flushWindow(window); 21 22 forgetClosedTabs(window); 23 24 const state = { 25 windows: [ 26 { 27 tabs: [ 28 { 29 entries: [ 30 { 31 title: "example.org", 32 url: "https://example.org/", 33 triggeringPrincipal_base64, 34 }, 35 ], 36 }, 37 { 38 entries: [ 39 { 40 title: "example.com", 41 url: "https://example.com/", 42 triggeringPrincipal_base64, 43 }, 44 ], 45 }, 46 { 47 entries: [ 48 { 49 title: "mozilla", 50 url: "https://www.mozilla.org/", 51 triggeringPrincipal_base64, 52 }, 53 ], 54 }, 55 { 56 entries: [ 57 { 58 title: "mozilla privacy policy", 59 url: "https://www.mozilla.org/privacy", 60 triggeringPrincipal_base64, 61 }, 62 ], 63 }, 64 ], 65 selected: 3, 66 }, 67 ], 68 }; 69 70 _LastSession.setState(state); 71 SessionStore.resetLastClosedActions(); 72 73 let sessionRestored = promiseSessionStoreLoads(4 /* total restored tabs */); 74 SessionWindowUI.restoreLastClosedTabOrWindowOrSession(window); 75 await sessionRestored; 76 77 Assert.equal(window.gBrowser.tabs.length, 4, "4 tabs have been restored"); 78 79 BrowserTestUtils.removeTab(window.gBrowser.tabs[3]); 80 BrowserTestUtils.removeTab(window.gBrowser.tabs[2]); 81 Assert.equal(window.gBrowser.tabs.length, 2, "Window has one open tab"); 82 83 // open and close a window 84 let win2 = await BrowserTestUtils.openNewBrowserWindow(); 85 Assert.equal(win2.gBrowser.tabs.length, 1, "Second window has one open tab"); 86 BrowserTestUtils.startLoadingURIString( 87 win2.gBrowser.selectedBrowser, 88 "https://example.com/" 89 ); 90 await BrowserTestUtils.browserLoaded(win2.gBrowser.selectedBrowser); 91 await BrowserTestUtils.closeWindow(win2); 92 93 // close one tab and reopen it 94 BrowserTestUtils.removeTab(window.gBrowser.tabs[1]); 95 Assert.equal(window.gBrowser.tabs.length, 1, "Window has one open tabs"); 96 SessionWindowUI.restoreLastClosedTabOrWindowOrSession(window); 97 Assert.equal(window.gBrowser.tabs.length, 2, "Window now has two open tabs"); 98 99 await SpecialPowers.popPrefEnv(); 100 gBrowser.removeAllTabsBut(gBrowser.tabs[0]); 101 });