browser_tab_groups_saved.js (3371B)
1 "use strict"; 2 3 const ORIG_STATE = SessionStore.getBrowserState(); 4 5 registerCleanupFunction(async () => { 6 await SessionStoreTestUtils.promiseBrowserState(ORIG_STATE); 7 }); 8 9 add_task(async function test_SaveTabGroups() { 10 let win = await promiseNewWindowLoaded(); 11 let state = ss.getCurrentState(win); 12 Assert.equal( 13 state.savedGroups.length, 14 0, 15 "savedGroups starts in initial state" 16 ); 17 18 let tab1 = BrowserTestUtils.addTab(win.gBrowser, "about:mozilla"); 19 await BrowserTestUtils.browserLoaded(tab1.linkedBrowser); 20 await TabStateFlusher.flush(tab1.linkedBrowser); 21 let group1 = win.gBrowser.addTabGroup([tab1]); 22 ss.addSavedTabGroup(group1); 23 24 let tab2 = BrowserTestUtils.addTab(win.gBrowser, "about:logo"); 25 await BrowserTestUtils.browserLoaded(tab2.linkedBrowser); 26 await TabStateFlusher.flush(tab2.linkedBrowser); 27 let group2 = win.gBrowser.addTabGroup([tab2]); 28 ss.addSavedTabGroup(group2); 29 30 state = ss.getCurrentState(); 31 32 Assert.equal(state.savedGroups.length, 2, "savedGroups has 2 groups"); 33 Assert.equal(state.savedGroups[0].id, group1.id, "group1 is in savedGroups"); 34 Assert.equal(state.savedGroups[0].tabs.length, 1, "group1 has 1 tab"); 35 Assert.equal(state.savedGroups[1].id, group2.id, "group2 is in savedGroups"); 36 Assert.equal(state.savedGroups[1].tabs.length, 1, "group2 has 1 tab"); 37 38 ss.forgetSavedTabGroup(group1.id); 39 await win.gBrowser.removeTabGroup(group1); 40 state = ss.getCurrentState(); 41 42 Assert.equal(state.savedGroups.length, 1, "savedGroups has 1 group"); 43 Assert.equal(state.savedGroups[0].id, group2.id, "group2 is in savedGroups"); 44 Assert.equal(state.savedGroups[0].tabs.length, 1, "group2 still has 1 tab"); 45 46 ss.forgetSavedTabGroup(group2.id); 47 await win.gBrowser.removeTabGroup(group2); 48 await BrowserTestUtils.closeWindow(win); 49 forgetClosedWindows(); 50 }); 51 52 /** 53 * Newtabs with no history are considered unimportant and are ignored by 54 * sessionstore. Groups of unimportant tabs should also be ignored. 55 */ 56 add_task(async function test_ignoreUnimportantTabGroups() { 57 let win = await promiseNewWindowLoaded(); 58 let state = ss.getCurrentState(win); 59 Assert.equal(state.savedGroups.length, 0, "savedGroups starts empty"); 60 61 let tab1 = BrowserTestUtils.addTab(win.gBrowser, "about:newtab"); 62 await BrowserTestUtils.browserLoaded(tab1.linkedBrowser); 63 await TabStateFlusher.flush(tab1.linkedBrowser); 64 let group1 = win.gBrowser.addTabGroup([tab1]); 65 ss.addSavedTabGroup(group1); 66 67 state = ss.getCurrentState(); 68 Assert.equal(state.savedGroups.length, 0, "savedGroups is still empty"); 69 70 await win.gBrowser.removeTabGroup(group1); 71 await BrowserTestUtils.closeWindow(win); 72 forgetClosedWindows(); 73 }); 74 75 add_task(async function test_refuseToSaveGroupsInPrivateWindows() { 76 const privateWin = await BrowserTestUtils.openNewBrowserWindow({ 77 private: true, 78 }); 79 80 let tab = BrowserTestUtils.addTab(privateWin.gBrowser, "about:newtab"); 81 await BrowserTestUtils.browserLoaded(tab.linkedBrowser); 82 await TabStateFlusher.flush(tab.linkedBrowser); 83 let group = privateWin.gBrowser.addTabGroup([tab]); 84 85 Assert.throws( 86 () => { 87 ss.addSavedTabGroup(group); 88 }, 89 /Refusing to save tab group/, 90 "addSavedTabGroup throws exception when trying to save a tab group from a private window" 91 ); 92 await BrowserTestUtils.closeWindow(privateWin); 93 forgetClosedWindows(); 94 });