browser_tab_groups_restore_saved.js (4640B)
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_restoreSavedTabGroupToSameWindow() { 13 let win = await promiseNewWindowLoaded(); 14 let aboutRobotsTab = BrowserTestUtils.addTab(win.gBrowser, "about:robots"); 15 let aboutAboutTab = BrowserTestUtils.addTab(win.gBrowser, "about:about"); 16 const tabGroupToSave = win.gBrowser.addTabGroup( 17 [aboutRobotsTab, aboutAboutTab], 18 { 19 color: "blue", 20 label: "about pages", 21 } 22 ); 23 const tabGroupToSaveId = tabGroupToSave.id; 24 25 await TabStateFlusher.flushWindow(win); 26 27 tabGroupToSave.save(); 28 let removePromise = BrowserTestUtils.waitForEvent( 29 tabGroupToSave, 30 "TabGroupRemoved" 31 ); 32 win.gBrowser.removeTabGroup(tabGroupToSave); 33 await removePromise; 34 35 Assert.ok( 36 !win.gBrowser.tabGroups.length, 37 "saved tab group should not be in the tab strip" 38 ); 39 Assert.ok( 40 !win.gBrowser.tabs.includes(aboutRobotsTab), 41 "about:robots tab should not be in the tab strip" 42 ); 43 Assert.ok( 44 !win.gBrowser.tabs.includes(aboutAboutTab), 45 "about:about tab should not be in the tab strip" 46 ); 47 48 await TabStateFlusher.flushWindow(win); 49 50 let restorePromise = BrowserTestUtils.waitForEvent(win, "SSWindowStateReady"); 51 const restoredTabGroup = SessionStore.openSavedTabGroup( 52 tabGroupToSaveId, 53 win 54 ); 55 await restorePromise; 56 57 Assert.equal( 58 win.gBrowser.tabs.length, 59 3, 60 "there should be 2 tabs restored + 1 initial tab from the new window" 61 ); 62 Assert.equal( 63 win.gBrowser.tabGroups.length, 64 1, 65 "there should be 1 tab group restored" 66 ); 67 Assert.equal( 68 win.gBrowser.selectedTab, 69 restoredTabGroup.tabs[0], 70 "first tab of the group is selected" 71 ); 72 Assert.equal( 73 restoredTabGroup.tabs.length, 74 2, 75 "the 2 restored tabs should be in the restored tab group" 76 ); 77 Assert.equal( 78 restoredTabGroup.label, 79 "about pages", 80 "tab group name should be restored" 81 ); 82 Assert.equal( 83 restoredTabGroup.id, 84 tabGroupToSaveId, 85 "tab group ID should be restored" 86 ); 87 Assert.equal( 88 restoredTabGroup.color, 89 "blue", 90 "tab group color should be restored" 91 ); 92 Assert.ok( 93 !restoredTabGroup.collapsed, 94 "tab group collapsed state should be restored" 95 ); 96 97 await BrowserTestUtils.closeWindow(win); 98 forgetSavedTabGroups(); 99 }); 100 101 add_task(async function test_restoreSavedTabGroupToAnotherWindow() { 102 let win = await promiseNewWindowLoaded(); 103 let aboutRobotsTab = BrowserTestUtils.addTab(win.gBrowser, "about:robots"); 104 let aboutAboutTab = BrowserTestUtils.addTab(win.gBrowser, "about:about"); 105 const tabGroupToSave = win.gBrowser.addTabGroup( 106 [aboutRobotsTab, aboutAboutTab], 107 { 108 color: "blue", 109 label: "about pages", 110 } 111 ); 112 const tabGroupToSaveId = tabGroupToSave.id; 113 114 await Promise.allSettled([ 115 TabStateFlusher.flush(aboutRobotsTab.linkedBrowser), 116 TabStateFlusher.flush(aboutAboutTab.linkedBrowser), 117 ]); 118 tabGroupToSave.save(); 119 120 await TabStateFlusher.flushWindow(win); 121 122 let removePromise = BrowserTestUtils.waitForEvent( 123 tabGroupToSave, 124 "TabGroupRemoved" 125 ); 126 win.gBrowser.removeTabGroup(tabGroupToSave); 127 await removePromise; 128 129 await TabStateFlusher.flushWindow(win); 130 131 let win2 = await promiseNewWindowLoaded(); 132 133 let restorePromise = BrowserTestUtils.waitForEvent( 134 win2, 135 "SSWindowStateReady" 136 ); 137 const restoredTabGroup = SessionStore.openSavedTabGroup( 138 tabGroupToSaveId, 139 win2 140 ); 141 await restorePromise; 142 143 Assert.equal( 144 win2.gBrowser.tabs.length, 145 3, 146 "there should be 2 tabs restored + 1 initial tab from the new window" 147 ); 148 Assert.equal( 149 win2.gBrowser.tabGroups.length, 150 1, 151 "there should be 1 tab group restored" 152 ); 153 154 Assert.equal( 155 restoredTabGroup.tabs.length, 156 2, 157 "the 2 restored tabs should be in the restored tab group" 158 ); 159 Assert.equal( 160 restoredTabGroup.label, 161 "about pages", 162 "tab group name should be restored" 163 ); 164 Assert.equal( 165 restoredTabGroup.id, 166 tabGroupToSaveId, 167 "tab group ID should be restored" 168 ); 169 Assert.equal( 170 restoredTabGroup.color, 171 "blue", 172 "tab group color should be restored" 173 ); 174 Assert.ok( 175 !restoredTabGroup.collapsed, 176 "tab group collapsed state should be restored" 177 ); 178 179 await BrowserTestUtils.closeWindow(win2); 180 await BrowserTestUtils.closeWindow(win); 181 forgetSavedTabGroups(); 182 forgetClosedWindows(); 183 });