browser_tab_groups_undo.js (3361B)
1 /* Any copyright is dedicated to the Public Domain. 2 https://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const ORIG_STATE = SessionStore.getBrowserState(); 7 8 registerCleanupFunction(async () => { 9 await SessionStoreTestUtils.promiseBrowserState(ORIG_STATE); 10 }); 11 12 add_task(async function test_tabGroupsUndo() { 13 Assert.equal( 14 SessionStore.getLastClosedTabGroupId(window), 15 null, 16 "Should start without a last closed tab group id" 17 ); 18 Assert.equal( 19 window.gBrowser.tabGroups.length, 20 0, 21 "Should start with no tab groups" 22 ); 23 24 let groupedTabs = [ 25 BrowserTestUtils.addTab(gBrowser, "https://example.com"), 26 BrowserTestUtils.addTab(gBrowser, "https://example.com"), 27 ]; 28 await Promise.all( 29 groupedTabs.map(g => promiseBrowserLoaded(g.linkedBrowser)) 30 ); 31 32 info("Adding to tab group"); 33 let tabGroup = gBrowser.addTabGroup(groupedTabs); 34 let tabGroupId = tabGroup.id; 35 36 info("Waiting for tab group removed"); 37 let removePromise = BrowserTestUtils.waitForEvent( 38 tabGroup, 39 "TabGroupRemoved" 40 ); 41 await gBrowser.removeTabGroup(tabGroup); 42 await removePromise; 43 44 await TabStateFlusher.flushWindow(window); 45 46 info("Waiting for getLastClosedTabGroupId"); 47 await BrowserTestUtils.waitForCondition( 48 () => SessionStore.getLastClosedTabGroupId(window) !== null 49 ); 50 51 Assert.equal( 52 SessionStore.getLastClosedTabGroupId(window), 53 tabGroupId, 54 "SessionStore saves the ID of the last closed tab group" 55 ); 56 57 SessionWindowUI.undoCloseTab(window); 58 59 Assert.equal(window.gBrowser.tabGroups.length, 1, "Tab group was restored"); 60 Assert.equal( 61 SessionStore.getLastClosedTabGroupId(window), 62 null, 63 "SessionStore reset the ID of the last closed tab group" 64 ); 65 66 BrowserTestUtils.removeTab(gBrowser.tabGroups[0].tabs[0]); 67 Assert.equal( 68 SessionStore.getLastClosedTabGroupId(window), 69 null, 70 "SessionStore last closed group ID is null after closing a tab within a group" 71 ); 72 73 let ungroupedTab = BrowserTestUtils.addTab(gBrowser, "https://example.com"); 74 await promiseBrowserLoaded(ungroupedTab.linkedBrowser); 75 BrowserTestUtils.removeTab(ungroupedTab); 76 77 Assert.equal( 78 SessionStore.getLastClosedTabGroupId(window), 79 null, 80 "SessionStore last closed group ID is null after closing a tab not in a group" 81 ); 82 83 let savedGroupedTabs = [ 84 BrowserTestUtils.addTab(gBrowser, "https://example.com"), 85 BrowserTestUtils.addTab(gBrowser, "https://example.com"), 86 ]; 87 await Promise.all( 88 savedGroupedTabs.map(g => promiseBrowserLoaded(g.linkedBrowser)) 89 ); 90 info("Adding to tab group"); 91 let savedTabGroup = gBrowser.addTabGroup(savedGroupedTabs); 92 let savedTabGroupId = savedTabGroup.id; 93 94 savedTabGroup.save(); 95 info("Waiting for tab group removed"); 96 removePromise = BrowserTestUtils.waitForEvent( 97 savedTabGroup, 98 "TabGroupRemoved" 99 ); 100 await gBrowser.removeTabGroup(savedTabGroup); 101 await removePromise; 102 103 await TabStateFlusher.flushWindow(window); 104 105 info("Waiting for getLastClosedTabGroupId"); 106 await BrowserTestUtils.waitForCondition( 107 () => SessionStore.getLastClosedTabGroupId(window) !== null 108 ); 109 110 Assert.equal( 111 SessionStore.getLastClosedTabGroupId(window), 112 savedTabGroupId, 113 "SessionStore saves the ID of the last saved and closed tab group" 114 ); 115 116 gBrowser.removeAllTabsBut(gBrowser.tabs[0]); 117 });