browser_privacy_syncDataClearing.js (9416B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 /* 5 * With no custom cleaning categories set and sanitizeOnShutdown disabled, 6 * the checkboxes "alwaysClear" and "deleteOnClose" should share the same state. 7 * The state of the cleaning categories cookies, cache and offlineApps should be in the state of the "deleteOnClose" box. 8 */ 9 add_setup(async function () { 10 await SpecialPowers.pushPrefEnv({ 11 set: [["privacy.sanitize.useOldClearHistoryDialog", true]], 12 }); 13 }); 14 15 add_task(async function test_syncWithoutCustomPrefs() { 16 await openPreferencesViaOpenPreferencesAPI("panePrivacy", { 17 leaveOpen: true, 18 }); 19 20 let document = gBrowser.contentDocument; 21 let deleteOnCloseBox = document.getElementById("deleteOnClose"); 22 let alwaysClearBox = document.getElementById("alwaysClear"); 23 24 ok(!deleteOnCloseBox.checked, "DeleteOnClose initial state is deselected"); 25 ok(!alwaysClearBox.checked, "AlwaysClear initial state is deselected"); 26 27 deleteOnCloseBox.click(); 28 29 // Wait for UI to update. 30 await new Promise(resolve => requestAnimationFrame(resolve)); 31 32 ok(deleteOnCloseBox.checked, "DeleteOnClose is selected"); 33 is( 34 deleteOnCloseBox.checked, 35 alwaysClearBox.checked, 36 "DeleteOnClose sets alwaysClear in the same state, selected" 37 ); 38 ok( 39 Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"), 40 "Cookie cleaning pref is set" 41 ); 42 ok( 43 Services.prefs.getBoolPref("privacy.clearOnShutdown.cache"), 44 "Cache cleaning pref is set" 45 ); 46 ok( 47 Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"), 48 "OfflineApps cleaning pref is set" 49 ); 50 ok( 51 !Services.prefs.getBoolPref("privacy.clearOnShutdown.downloads"), 52 "Downloads cleaning pref is not set" 53 ); 54 55 deleteOnCloseBox.click(); 56 57 // Wait for UI to update. 58 await new Promise(resolve => requestAnimationFrame(resolve)); 59 60 ok(!deleteOnCloseBox.checked, "DeleteOnClose is deselected"); 61 is( 62 deleteOnCloseBox.checked, 63 alwaysClearBox.checked, 64 "DeleteOnclose sets alwaysClear in the same state, deselected" 65 ); 66 67 ok( 68 !Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"), 69 "Cookie cleaning pref is reset" 70 ); 71 ok( 72 !Services.prefs.getBoolPref("privacy.clearOnShutdown.cache"), 73 "Cache cleaning pref is reset" 74 ); 75 ok( 76 !Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"), 77 "OfflineApps cleaning pref is reset" 78 ); 79 ok( 80 !Services.prefs.getBoolPref("privacy.clearOnShutdown.downloads"), 81 "Downloads cleaning pref is not set" 82 ); 83 84 BrowserTestUtils.removeTab(gBrowser.selectedTab); 85 Services.prefs.clearUserPref("privacy.clearOnShutdown.downloads"); 86 Services.prefs.clearUserPref("privacy.clearOnShutdown.offlineApps"); 87 Services.prefs.clearUserPref("privacy.clearOnShutdown.cache"); 88 Services.prefs.clearUserPref("privacy.clearOnShutdown.cookies"); 89 Services.prefs.clearUserPref("privacy.sanitize.sanitizeOnShutdown"); 90 }); 91 92 /* 93 * With custom cleaning category already set and SanitizeOnShutdown enabled, 94 * deselecting "deleteOnClose" should not change the state of "alwaysClear". 95 * The state of the cleaning categories cookies, cache and offlineApps should be in the state of the "deleteOnClose" box. 96 */ 97 add_task(async function test_syncWithCustomPrefs() { 98 await SpecialPowers.pushPrefEnv({ 99 set: [ 100 ["privacy.clearOnShutdown.history", true], 101 ["privacy.sanitize.sanitizeOnShutdown", true], 102 ], 103 }); 104 105 await openPreferencesViaOpenPreferencesAPI("panePrivacy", { 106 leaveOpen: true, 107 }); 108 109 let document = gBrowser.contentDocument; 110 let deleteOnCloseBox = document.getElementById("deleteOnClose"); 111 let alwaysClearBox = document.getElementById("alwaysClear"); 112 113 ok(!deleteOnCloseBox.checked, "DeleteOnClose initial state is deselected"); 114 ok(alwaysClearBox.checked, "AlwaysClear initial state is selected"); 115 116 deleteOnCloseBox.click(); 117 118 ok(deleteOnCloseBox.checked, "DeleteOnClose is selected"); 119 is( 120 deleteOnCloseBox.checked, 121 alwaysClearBox.checked, 122 "AlwaysClear and deleteOnClose are in the same state, selected" 123 ); 124 ok( 125 Services.prefs.getBoolPref("privacy.clearOnShutdown.history"), 126 "History cleaning pref is still set" 127 ); 128 129 ok( 130 Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"), 131 "Cookie cleaning pref is set" 132 ); 133 ok( 134 Services.prefs.getBoolPref("privacy.clearOnShutdown.cache"), 135 "Cache cleaning pref is set" 136 ); 137 ok( 138 Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"), 139 "OfflineApps cleaning pref is set" 140 ); 141 142 deleteOnCloseBox.click(); 143 144 ok(!deleteOnCloseBox.checked, "DeleteOnClose is deselected"); 145 is( 146 !deleteOnCloseBox.checked, 147 alwaysClearBox.checked, 148 "AlwaysClear is not synced with deleteOnClose, only deleteOnClose is deselected" 149 ); 150 151 ok( 152 !Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"), 153 "Cookie cleaning pref is reset" 154 ); 155 ok( 156 !Services.prefs.getBoolPref("privacy.clearOnShutdown.cache"), 157 "Cache cleaning pref is reset" 158 ); 159 ok( 160 !Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"), 161 "OfflineApps cleaning pref is reset" 162 ); 163 ok( 164 Services.prefs.getBoolPref("privacy.clearOnShutdown.history"), 165 "History cleaning pref is still set" 166 ); 167 168 BrowserTestUtils.removeTab(gBrowser.selectedTab); 169 await SpecialPowers.popPrefEnv(); 170 }); 171 172 /* 173 * Setting/resetting cleaning prefs for cookies, cache, offline apps 174 * and selecting/deselecting the "alwaysClear" Box, also selects/deselects 175 * the "deleteOnClose" box. 176 */ 177 178 add_task(async function test_syncWithCustomPrefs() { 179 await openPreferencesViaOpenPreferencesAPI("panePrivacy", { 180 leaveOpen: true, 181 }); 182 183 let document = gBrowser.contentDocument; 184 let deleteOnCloseBox = document.getElementById("deleteOnClose"); 185 let alwaysClearBox = document.getElementById("alwaysClear"); 186 187 ok(!deleteOnCloseBox.checked, "DeleteOnClose initial state is deselected"); 188 ok(!alwaysClearBox.checked, "AlwaysClear initial state is deselected"); 189 190 await SpecialPowers.pushPrefEnv({ 191 set: [ 192 ["privacy.clearOnShutdown.cookies", true], 193 ["privacy.clearOnShutdown.cache", true], 194 ["privacy.clearOnShutdown.offlineApps", true], 195 ["privacy.sanitize.sanitizeOnShutdown", true], 196 // Make sure custom is selected so the depending checkboxes are visible. 197 ["privacy.history.custom", true], 198 ], 199 }); 200 201 ok(alwaysClearBox.checked, "AlwaysClear is selected"); 202 is( 203 deleteOnCloseBox.checked, 204 alwaysClearBox.checked, 205 "AlwaysClear and deleteOnClose are in the same state, selected" 206 ); 207 208 alwaysClearBox.click(); 209 210 // Wait for UI to update. 211 await new Promise(resolve => requestAnimationFrame(resolve)); 212 213 ok(!alwaysClearBox.checked, "AlwaysClear is deselected"); 214 is( 215 deleteOnCloseBox.checked, 216 alwaysClearBox.checked, 217 "AlwaysClear and deleteOnClose are in the same state, deselected" 218 ); 219 220 BrowserTestUtils.removeTab(gBrowser.selectedTab); 221 await SpecialPowers.popPrefEnv(); 222 }); 223 224 /* 225 * On loading the page, the ClearOnClose box should be set according to the pref selection 226 */ 227 add_task(async function test_initialState() { 228 await SpecialPowers.pushPrefEnv({ 229 set: [ 230 ["privacy.clearOnShutdown.cookies", true], 231 ["privacy.clearOnShutdown.cache", true], 232 ["privacy.clearOnShutdown.offlineApps", true], 233 ["privacy.sanitize.sanitizeOnShutdown", true], 234 ], 235 }); 236 237 await openPreferencesViaOpenPreferencesAPI("panePrivacy", { 238 leaveOpen: true, 239 }); 240 241 let document = gBrowser.contentDocument; 242 let deleteOnCloseBox = document.getElementById("deleteOnClose"); 243 244 ok( 245 deleteOnCloseBox.checked, 246 "DeleteOnClose is set accordingly to the prefs, selected" 247 ); 248 249 BrowserTestUtils.removeTab(gBrowser.selectedTab); 250 251 await SpecialPowers.pushPrefEnv({ 252 set: [ 253 ["privacy.clearOnShutdown.cookies", false], 254 ["privacy.clearOnShutdown.cache", false], 255 ["privacy.clearOnShutdown.offlineApps", false], 256 ["privacy.sanitize.sanitizeOnShutdown", true], 257 ["privacy.clearOnShutdown.history", true], 258 ], 259 }); 260 261 await openPreferencesViaOpenPreferencesAPI("panePrivacy", { 262 leaveOpen: true, 263 }); 264 265 document = gBrowser.contentDocument; 266 deleteOnCloseBox = document.getElementById("deleteOnClose"); 267 268 ok( 269 !deleteOnCloseBox.checked, 270 "DeleteOnClose is set accordingly to the prefs, deselected" 271 ); 272 273 BrowserTestUtils.removeTab(gBrowser.selectedTab); 274 275 // When private browsing mode autostart is selected, the deleteOnClose Box is selected always 276 await SpecialPowers.pushPrefEnv({ 277 set: [ 278 ["privacy.clearOnShutdown.cookies", false], 279 ["privacy.clearOnShutdown.cache", false], 280 ["privacy.clearOnShutdown.offlineApps", false], 281 ["privacy.sanitize.sanitizeOnShutdown", false], 282 ["browser.privatebrowsing.autostart", true], 283 ], 284 }); 285 286 await openPreferencesViaOpenPreferencesAPI("panePrivacy", { 287 leaveOpen: true, 288 }); 289 290 document = gBrowser.contentDocument; 291 deleteOnCloseBox = document.getElementById("deleteOnClose"); 292 293 ok( 294 deleteOnCloseBox.checked, 295 "DeleteOnClose is set accordingly to the private Browsing autostart pref, selected" 296 ); 297 298 // Reset history mode 299 await SpecialPowers.popPrefEnv(); 300 gBrowser.contentWindow.Preferences.getSetting("historyMode").value = 301 "remember"; 302 BrowserTestUtils.removeTab(gBrowser.selectedTab); 303 });