browser_464199.js (4892B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 let { ForgetAboutSite } = ChromeUtils.importESModule( 6 "resource://gre/modules/ForgetAboutSite.sys.mjs" 7 ); 8 9 function promiseClearHistory() { 10 return new Promise(resolve => { 11 let observer = { 12 observe() { 13 Services.obs.removeObserver( 14 this, 15 "browser:purge-session-history-for-domain" 16 ); 17 resolve(); 18 }, 19 }; 20 Services.obs.addObserver( 21 observer, 22 "browser:purge-session-history-for-domain" 23 ); 24 }); 25 } 26 27 add_task(async function () { 28 /** Test for Bug 464199 */ 29 30 const REMEMBER = Date.now(), 31 FORGET = Math.random(); 32 let test_state = { 33 windows: [ 34 { 35 tabs: [{ entries: [] }], 36 _closedTabs: [ 37 { 38 state: { entries: [{ url: "http://www.example.net/" }] }, 39 title: FORGET, 40 }, 41 { 42 state: { entries: [{ url: "http://www.example.org/" }] }, 43 title: REMEMBER, 44 }, 45 { 46 state: { 47 entries: [ 48 { url: "http://www.example.net/" }, 49 { url: "http://www.example.org/" }, 50 ], 51 }, 52 title: FORGET, 53 }, 54 { 55 state: { entries: [{ url: "http://example.net/" }] }, 56 title: FORGET, 57 }, 58 { 59 state: { entries: [{ url: "http://sub.example.net/" }] }, 60 title: FORGET, 61 }, 62 { 63 state: { entries: [{ url: "http://www.example.net:8080/" }] }, 64 title: FORGET, 65 }, 66 { state: { entries: [{ url: "about:license" }] }, title: REMEMBER }, 67 { 68 state: { 69 entries: [ 70 { 71 url: "http://www.example.org/frameset", 72 children: [ 73 { url: "http://www.example.org/frame" }, 74 { url: "http://www.example.org:8080/frame2" }, 75 ], 76 }, 77 ], 78 }, 79 title: REMEMBER, 80 }, 81 { 82 state: { 83 entries: [ 84 { 85 url: "http://www.example.org/frameset", 86 children: [ 87 { url: "http://www.example.org/frame" }, 88 { url: "http://www.example.net/frame" }, 89 ], 90 }, 91 ], 92 }, 93 title: FORGET, 94 }, 95 { 96 state: { 97 entries: [ 98 { 99 url: "http://www.example.org/form", 100 formdata: { id: { url: "http://www.example.net/" } }, 101 }, 102 ], 103 }, 104 title: REMEMBER, 105 }, 106 { 107 state: { 108 entries: [{ url: "http://www.example.org/form" }], 109 extData: { setCustomTabValue: "http://example.net:80" }, 110 }, 111 title: REMEMBER, 112 }, 113 ], 114 }, 115 ], 116 }; 117 let remember_count = 5; 118 119 function countByTitle(aClosedTabList, aTitle) { 120 return aClosedTabList.filter(aData => aData.title == aTitle).length; 121 } 122 123 // open a window and add the above closed tab list 124 let newWin = openDialog(location, "", "chrome,all,dialog=no"); 125 await promiseWindowLoaded(newWin); 126 Services.prefs.setIntPref( 127 "browser.sessionstore.max_tabs_undo", 128 test_state.windows[0]._closedTabs.length 129 ); 130 131 let restoring = promiseWindowRestoring(newWin); 132 let restored = promiseWindowRestored(newWin); 133 ss.setWindowState(newWin, JSON.stringify(test_state), true); 134 await restoring; 135 await restored; 136 137 let closedTabs = ss.getClosedTabDataForWindow(newWin); 138 is( 139 closedTabs.length, 140 test_state.windows[0]._closedTabs.length, 141 "Closed tab list has the expected length" 142 ); 143 is( 144 countByTitle(closedTabs, FORGET), 145 test_state.windows[0]._closedTabs.length - remember_count, 146 "The correct amout of tabs are to be forgotten" 147 ); 148 is( 149 countByTitle(closedTabs, REMEMBER), 150 remember_count, 151 "Everything is set up." 152 ); 153 154 let promise = promiseClearHistory(); 155 await ForgetAboutSite.removeDataFromBaseDomain("example.net"); 156 await promise; 157 closedTabs = ss.getClosedTabDataForWindow(newWin); 158 is( 159 closedTabs.length, 160 remember_count, 161 "The correct amout of tabs was removed" 162 ); 163 is( 164 countByTitle(closedTabs, FORGET), 165 0, 166 "All tabs to be forgotten were indeed removed" 167 ); 168 is( 169 countByTitle(closedTabs, REMEMBER), 170 remember_count, 171 "... and tabs to be remembered weren't." 172 ); 173 // clean up 174 Services.prefs.clearUserPref("browser.sessionstore.max_tabs_undo"); 175 await BrowserTestUtils.closeWindow(newWin); 176 });