browser_purge_domaindata.js (5186B)
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 const SITE = "https://example.com/"; 8 9 registerCleanupFunction(async () => { 10 await SessionStoreTestUtils.promiseBrowserState(ORIG_STATE); 11 }); 12 13 // Test for closed tabs and tab groups in an open window 14 add_task(async function test_closedTabsPurgeDomainData() { 15 let win = await promiseNewWindowLoaded(); 16 17 let tabs = [ 18 BrowserTestUtils.addTab(win.gBrowser, "about:mozilla"), 19 BrowserTestUtils.addTab(win.gBrowser, "about:robots"), 20 BrowserTestUtils.addTab(win.gBrowser, SITE), 21 ]; 22 let tabsInGroup = [ 23 BrowserTestUtils.addTab(win.gBrowser, "about:robots"), 24 BrowserTestUtils.addTab(win.gBrowser, SITE), 25 ]; 26 27 let allTabs = [...tabs, ...tabsInGroup]; 28 await Promise.all( 29 allTabs.map(async t => { 30 await promiseBrowserLoaded(t.linkedBrowser); 31 }) 32 ); 33 let tabGroup = win.gBrowser.addTabGroup(tabsInGroup); 34 35 await TabStateFlusher.flushWindow(win); 36 37 tabs.forEach(t => { 38 win.gBrowser.removeTab(t); 39 }); 40 let removePromise = BrowserTestUtils.waitForEvent( 41 tabGroup, 42 "TabGroupRemoved" 43 ); 44 win.gBrowser.removeTabGroup(tabGroup); 45 await removePromise; 46 47 let state = ss.getWindowState(win).windows[0]; 48 Assert.equal( 49 state._closedTabs.length, 50 3, 51 "Closed tabs state has all closed tabs" 52 ); 53 Assert.equal( 54 state.closedGroups[0].tabs.length, 55 2, 56 "Closed tab group state has all closed tabs" 57 ); 58 59 // Purge session history for domain 60 Services.obs.notifyObservers( 61 null, 62 "browser:purge-session-history-for-domain", 63 "example.com" 64 ); 65 66 state = ss.getWindowState(win).windows[0]; 67 Assert.equal(state._closedTabs.length, 2, "Closed tab list has one less tab"); 68 Assert.equal( 69 state.closedGroups[0].tabs.length, 70 1, 71 "Closed tab group tab list has one less tab" 72 ); 73 74 state._closedTabs.forEach((tab, index) => { 75 Assert.notEqual( 76 tab.state.entries[0].url, 77 SITE, 78 `Closed tab ${index} does not contain purged site` 79 ); 80 }); 81 state.closedGroups[0].tabs.forEach((tab, index) => { 82 Assert.notEqual( 83 tab.state.entries[0].url, 84 SITE, 85 `Closed tab ${index} in group does not contain purged site` 86 ); 87 }); 88 89 await BrowserTestUtils.closeWindow(win); 90 }); 91 92 add_task(async function test_closedTabsInClosedWindowsPurgeDomainData() { 93 let win = await promiseNewWindowLoaded(); 94 95 let openTabs = [ 96 BrowserTestUtils.addTab(win.gBrowser, "about:mozilla"), 97 BrowserTestUtils.addTab(win.gBrowser, "about:robots"), 98 BrowserTestUtils.addTab(win.gBrowser, SITE), 99 ]; 100 let tabsInOpenGroup = [ 101 BrowserTestUtils.addTab(win.gBrowser, "about:robots"), 102 BrowserTestUtils.addTab(win.gBrowser, SITE), 103 ]; 104 let closedTabs = [ 105 BrowserTestUtils.addTab(win.gBrowser, "about:mozilla"), 106 BrowserTestUtils.addTab(win.gBrowser, "about:robots"), 107 BrowserTestUtils.addTab(win.gBrowser, SITE), 108 ]; 109 let tabsInClosedGroup = [ 110 BrowserTestUtils.addTab(win.gBrowser, "about:robots"), 111 BrowserTestUtils.addTab(win.gBrowser, SITE), 112 ]; 113 114 let allTabs = [ 115 ...openTabs, 116 ...tabsInOpenGroup, 117 ...closedTabs, 118 ...tabsInClosedGroup, 119 ]; 120 await Promise.all( 121 allTabs.map(async t => { 122 await promiseBrowserLoaded(t.linkedBrowser); 123 }) 124 ); 125 win.gBrowser.addTabGroup(tabsInOpenGroup); 126 let closedTabGroup = win.gBrowser.addTabGroup(tabsInClosedGroup); 127 128 await TabStateFlusher.flushWindow(win); 129 130 closedTabs.forEach(t => { 131 win.gBrowser.removeTab(t); 132 }); 133 let removePromise = BrowserTestUtils.waitForEvent( 134 closedTabGroup, 135 "TabGroupRemoved" 136 ); 137 win.gBrowser.removeTabGroup(closedTabGroup); 138 await removePromise; 139 140 await BrowserTestUtils.closeWindow(win); 141 142 let state = ss.getClosedWindowData()[0]; 143 Assert.equal(state.tabs.length, 6, "Open tabs state has all tabs"); 144 Assert.equal( 145 state._closedTabs.length, 146 3, 147 "Closed tabs state has all closed tabs" 148 ); 149 Assert.equal( 150 state.closedGroups[0].tabs.length, 151 2, 152 "Closed tab group state has all closed tabs" 153 ); 154 155 // Purge session history for domain 156 Services.obs.notifyObservers( 157 null, 158 "browser:purge-session-history-for-domain", 159 "example.com" 160 ); 161 162 state = ss.getClosedWindowData()[0]; 163 Assert.equal( 164 state.tabs.length, 165 4, 166 "Open tabs state loses ungrouped and grouped site tab" 167 ); 168 Assert.equal(state._closedTabs.length, 2, "Closed tabs state loses a tab"); 169 Assert.equal( 170 state.closedGroups[0].tabs.length, 171 1, 172 "Closed tab group state loses a tab" 173 ); 174 175 state.tabs.forEach((tab, index) => { 176 Assert.notEqual( 177 tab.entries[0].url, 178 SITE, 179 `Open tab ${index} does not contain purged site` 180 ); 181 }); 182 state._closedTabs.forEach((tab, index) => { 183 Assert.notEqual( 184 tab.state.entries[0].url, 185 SITE, 186 `Closed tab ${index} does not contain purged site` 187 ); 188 }); 189 state.closedGroups[0].tabs.forEach((tab, index) => { 190 Assert.notEqual( 191 tab.state.entries[0].url, 192 SITE, 193 `Closed tab ${index} in group does not contain purged site` 194 ); 195 }); 196 });