diff options
Diffstat (limited to 'browser/components/sessionstore/test/browser_restoreLastActionCorrectOrder.js')
-rw-r--r-- | browser/components/sessionstore/test/browser_restoreLastActionCorrectOrder.js | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_restoreLastActionCorrectOrder.js b/browser/components/sessionstore/test/browser_restoreLastActionCorrectOrder.js new file mode 100644 index 0000000000..967dd7d7e7 --- /dev/null +++ b/browser/components/sessionstore/test/browser_restoreLastActionCorrectOrder.js @@ -0,0 +1,101 @@ +"use strict"; + +const { _LastSession, _lastClosedActions } = ChromeUtils.importESModule( + "resource:///modules/sessionstore/SessionStore.sys.mjs" +); + +/** + * Tests that the _lastClosedAction list is truncated correctly + * by removing oldest actions in SessionStore._addClosedAction + */ +add_task(async function test_undo_last_action_correct_order() { + SpecialPowers.pushPrefEnv({ + set: [ + ["browser.sessionstore.max_tabs_undo", 3], + ["browser.sessionstore.max_windows_undo", 1], + ], + }); + + gBrowser.removeAllTabsBut(gBrowser.tabs[0]); + await TabStateFlusher.flushWindow(window); + + forgetClosedTabs(window); + + const state = { + windows: [ + { + tabs: [ + { + entries: [ + { + title: "example.org", + url: "https://example.org/", + triggeringPrincipal_base64, + }, + ], + }, + { + entries: [ + { + title: "example.com", + url: "https://example.com/", + triggeringPrincipal_base64, + }, + ], + }, + { + entries: [ + { + title: "mozilla", + url: "https://www.mozilla.org/", + triggeringPrincipal_base64, + }, + ], + }, + { + entries: [ + { + title: "mozilla privacy policy", + url: "https://www.mozilla.org/privacy", + triggeringPrincipal_base64, + }, + ], + }, + ], + selected: 3, + }, + ], + }; + + _LastSession.setState(state); + SessionStore.resetLastClosedActions(); + + let sessionRestored = promiseSessionStoreLoads(4 /* total restored tabs */); + restoreLastClosedTabOrWindowOrSession(); + await sessionRestored; + + Assert.equal(window.gBrowser.tabs.length, 4, "4 tabs have been restored"); + + BrowserTestUtils.removeTab(window.gBrowser.tabs[3]); + BrowserTestUtils.removeTab(window.gBrowser.tabs[2]); + Assert.equal(window.gBrowser.tabs.length, 2, "Window has one open tab"); + + // open and close a window + let win2 = await BrowserTestUtils.openNewBrowserWindow(); + Assert.equal(win2.gBrowser.tabs.length, 1, "Second window has one open tab"); + BrowserTestUtils.startLoadingURIString( + win2.gBrowser.selectedBrowser, + "https://example.com/" + ); + await BrowserTestUtils.browserLoaded(win2.gBrowser.selectedBrowser); + await BrowserTestUtils.closeWindow(win2); + + // close one tab and reopen it + BrowserTestUtils.removeTab(window.gBrowser.tabs[1]); + Assert.equal(window.gBrowser.tabs.length, 1, "Window has one open tabs"); + restoreLastClosedTabOrWindowOrSession(); + Assert.equal(window.gBrowser.tabs.length, 2, "Window now has two open tabs"); + + await SpecialPowers.popPrefEnv(); + gBrowser.removeAllTabsBut(gBrowser.tabs[0]); +}); |