browser_sanitizeOnShutdown_migration.js (18941B)
1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ 2 /* vim:set ts=2 sw=2 sts=2 et: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 add_setup(async function () { 8 await SpecialPowers.pushPrefEnv({ 9 set: [["privacy.sanitize.useOldClearHistoryDialog", false]], 10 }); 11 }); 12 13 // Test checking "clear cookies and site data when firefox shuts down" does a migration 14 // before making any pref changes (Bug 1894933) 15 add_task(async function testMigrationForDeleteOnClose() { 16 await SpecialPowers.pushPrefEnv({ 17 set: [ 18 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3", false], 19 ["privacy.sanitize.sanitizeOnShutdown", false], 20 ["privacy.clearOnShutdown_v2.cookiesAndStorage", true], 21 ["privacy.clearOnShutdown_v2.browsingHistoryAndDownloads", true], 22 ["privacy.clearOnShutdown_v2.siteSettings", false], 23 ["privacy.clearOnShutdown_v2.cache", false], 24 ], 25 }); 26 27 // open privacy settings 28 await openPreferencesViaOpenPreferencesAPI("panePrivacy", { 29 leaveOpen: true, 30 }); 31 32 let document = gBrowser.contentDocument; 33 let deleteOnCloseBox = document.getElementById("deleteOnClose"); 34 ok(!deleteOnCloseBox.checked, "DeleteOnClose initial state is deselected"); 35 36 let alwaysClearBox = document.getElementById("alwaysClear"); 37 ok(!alwaysClearBox.checked, "AlwaysClear initial state is deselected"); 38 39 deleteOnCloseBox.click(); 40 // Wait for change to take effect. 41 await new Promise(resolve => requestAnimationFrame(resolve)); 42 43 ok(deleteOnCloseBox.checked, "DeleteOnClose is selected"); 44 is( 45 deleteOnCloseBox.checked, 46 alwaysClearBox.checked, 47 "DeleteOnClose sets alwaysClear in the same state, selected" 48 ); 49 // We are done changing settings in about:preferences, remove the tab 50 BrowserTestUtils.removeTab(gBrowser.selectedTab); 51 // Open the clear on shutdown preferences dialog 52 let dh = new ClearHistoryDialogHelper({ mode: "clearOnShutdown" }); 53 dh.onload = function () { 54 is( 55 Services.prefs.getBoolPref( 56 "privacy.clearOnShutdown_v2.browsingHistoryAndDownloads" 57 ), 58 false, 59 "History pref should flip to false" 60 ); 61 is( 62 Services.prefs.getBoolPref( 63 "privacy.clearOnShutdown_v2.cookiesAndStorage" 64 ), 65 true, 66 "Cookies pref should remain true" 67 ); 68 is( 69 Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cache"), 70 true, 71 "Cache pref should flip to true" 72 ); 73 is( 74 Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.siteSettings"), 75 false, 76 "Site settings should remain false" 77 ); 78 this.cancelDialog(); 79 }; 80 dh.open(); 81 await dh.promiseClosed; 82 }); 83 84 // Test removal of the old pref privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs 85 add_task(async function testOldPrefRemoval() { 86 await SpecialPowers.pushPrefEnv({ 87 set: [ 88 ["privacy.clearOnShutdown.history", true], 89 ["privacy.clearOnShutdown_v2.browsingHistoryAndDownloads", false], 90 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3", false], 91 ["privacy.sanitize.cpd.hasMigratedToNewPrefs3", false], 92 ], 93 }); 94 95 // Add the old prefs to indicate that a migration was done before 96 Services.prefs.setBoolPref( 97 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs", 98 true 99 ); 100 Services.prefs.setBoolPref( 101 "privacy.sanitize.cpd.hasMigratedToNewPrefs", 102 true 103 ); 104 Services.prefs.setBoolPref( 105 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs2", 106 true 107 ); 108 Services.prefs.setBoolPref( 109 "privacy.sanitize.cpd.hasMigratedToNewPrefs2", 110 true 111 ); 112 113 is( 114 Services.prefs.getPrefType( 115 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs" 116 ), 117 Services.prefs.PREF_BOOL, 118 "Old migration pref should exist" 119 ); 120 121 is( 122 Services.prefs.getPrefType("privacy.sanitize.cpd.hasMigratedToNewPrefs"), 123 Services.prefs.PREF_BOOL, 124 "Old migration pref should exist" 125 ); 126 127 is( 128 Services.prefs.getPrefType( 129 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs2" 130 ), 131 Services.prefs.PREF_BOOL, 132 "Old migration pref should exist" 133 ); 134 135 is( 136 Services.prefs.getPrefType("privacy.sanitize.cpd.hasMigratedToNewPrefs2"), 137 Services.prefs.PREF_BOOL, 138 "Old migration pref should exist" 139 ); 140 141 Sanitizer.maybeMigratePrefs("clearOnShutdown"); 142 143 is( 144 Services.prefs.getPrefType( 145 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs" 146 ), 147 Services.prefs.PREF_INVALID, 148 "Old clearonshutdown migration pref should not exist anymore" 149 ); 150 151 is( 152 Services.prefs.getPrefType( 153 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs2" 154 ), 155 Services.prefs.PREF_BOOL, 156 "Old clearonshutdown migration pref should still exist" 157 ); 158 159 ok( 160 Services.prefs.getBoolPref( 161 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3" 162 ), 163 "Migration should be reflected on new clearonshutdown pref" 164 ); 165 166 ok( 167 Services.prefs.getBoolPref( 168 "privacy.clearOnShutdown_v2.browsingHistoryAndDownloads" 169 ), 170 "History should be flipped to true after migrating" 171 ); 172 173 Sanitizer.maybeMigratePrefs("cpd"); 174 175 is( 176 Services.prefs.getPrefType("privacy.sanitize.cpd.hasMigratedToNewPrefs"), 177 Services.prefs.PREF_INVALID, 178 "old cpd migration pref should not exist anymore" 179 ); 180 181 is( 182 Services.prefs.getPrefType("privacy.sanitize.cpd.hasMigratedToNewPrefs2"), 183 Services.prefs.PREF_BOOL, 184 "old cpd migration pref should still exist" 185 ); 186 187 ok( 188 Services.prefs.getBoolPref("privacy.sanitize.cpd.hasMigratedToNewPrefs3"), 189 "Migration should be reflected on new cpd pref" 190 ); 191 }); 192 193 add_task(async function testMigrationOfCacheAndSiteSettings() { 194 await SpecialPowers.pushPrefEnv({ 195 set: [ 196 ["privacy.clearOnShutdown.cache", true], 197 ["privacy.clearOnShutdown.siteSettings", true], 198 ["privacy.clearOnShutdown_v2.cache", false], 199 ["privacy.clearOnShutdown_v2.siteSettings", false], 200 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3", false], 201 ], 202 }); 203 204 Sanitizer.runSanitizeOnShutdown(); 205 206 ok( 207 Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cache"), 208 "Cache should be set to true" 209 ); 210 ok( 211 Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.siteSettings"), 212 "siteSettings should be set to true" 213 ); 214 ok( 215 Services.prefs.getBoolPref("privacy.clearOnShutdown.cache"), 216 "old cache should remain true" 217 ); 218 ok( 219 Services.prefs.getBoolPref("privacy.clearOnShutdown.siteSettings"), 220 "old siteSettings should remain true" 221 ); 222 223 ok( 224 Services.prefs.getBoolPref( 225 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3" 226 ), 227 "migration pref has been flipped" 228 ); 229 }); 230 231 add_task(async function testHistoryAndFormData_historyTrue() { 232 await SpecialPowers.pushPrefEnv({ 233 set: [ 234 ["privacy.clearOnShutdown.history", true], 235 ["privacy.clearOnShutdown.formdata", false], 236 ["privacy.clearOnShutdown_v2.browsingHistoryAndDownloads", false], 237 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3", false], 238 ], 239 }); 240 241 Sanitizer.runSanitizeOnShutdown(); 242 243 ok( 244 Services.prefs.getBoolPref( 245 "privacy.clearOnShutdown_v2.browsingHistoryAndDownloads" 246 ), 247 "browsingHistoryAndDownloads should be set to true" 248 ); 249 ok( 250 Services.prefs.getBoolPref("privacy.clearOnShutdown.history"), 251 "old history pref should remain true" 252 ); 253 ok( 254 !Services.prefs.getBoolPref("privacy.clearOnShutdown.formdata"), 255 "old formdata pref should remain false" 256 ); 257 258 ok( 259 Services.prefs.getBoolPref( 260 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3" 261 ), 262 "migration pref has been flipped" 263 ); 264 }); 265 266 add_task(async function testHistoryAndDownloads_historyFalse() { 267 await SpecialPowers.pushPrefEnv({ 268 set: [ 269 ["privacy.clearOnShutdown.history", false], 270 ["privacy.clearOnShutdown.formdata", true], 271 ["privacy.clearOnShutdown_v2.browsingHistoryAndDownloads", true], 272 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3", false], 273 ], 274 }); 275 276 Sanitizer.runSanitizeOnShutdown(); 277 278 ok( 279 !Services.prefs.getBoolPref( 280 "privacy.clearOnShutdown_v2.browsingHistoryAndDownloads" 281 ), 282 "browsingHistoryAndDownloads should be set to false" 283 ); 284 ok( 285 !Services.prefs.getBoolPref("privacy.clearOnShutdown.history"), 286 "old history pref should remain false" 287 ); 288 ok( 289 Services.prefs.getBoolPref("privacy.clearOnShutdown.formdata"), 290 "old formdata pref should remain true" 291 ); 292 293 ok( 294 Services.prefs.getBoolPref( 295 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3" 296 ), 297 "migration pref has been flipped" 298 ); 299 }); 300 301 add_task(async function testFormData_historyFalse() { 302 await SpecialPowers.pushPrefEnv({ 303 set: [ 304 ["privacy.clearOnShutdown_v2.historyFormDataAndDownloads", false], 305 ["privacy.clearOnShutdown_v2.formdata", true], 306 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3", false], 307 ], 308 }); 309 310 Sanitizer.runSanitizeOnShutdown(); 311 312 ok( 313 !Services.prefs.getBoolPref( 314 "privacy.clearOnShutdown_v2.historyFormDataAndDownloads" 315 ), 316 "historyFormDataAndDownloads should still be false" 317 ); 318 ok( 319 Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.formdata"), 320 "old history pref should be set to true" 321 ); 322 323 ok( 324 Services.prefs.getBoolPref( 325 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3" 326 ), 327 "migration pref has been flipped" 328 ); 329 }); 330 331 add_task(async function testCookiesAndStorage_cookiesFalse() { 332 await SpecialPowers.pushPrefEnv({ 333 set: [ 334 ["privacy.clearOnShutdown.cookies", false], 335 ["privacy.clearOnShutdown.offlineApps", true], 336 ["privacy.clearOnShutdown.sessions", true], 337 ["privacy.clearOnShutdown_v2.cookiesAndStorage", true], 338 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3", false], 339 ], 340 }); 341 342 // Simulate clearing on shutdown. 343 Sanitizer.runSanitizeOnShutdown(); 344 345 ok( 346 !Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cookiesAndStorage"), 347 "cookiesAndStorage should be set to false" 348 ); 349 ok( 350 !Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"), 351 "old cookies pref should remain false" 352 ); 353 ok( 354 Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"), 355 "old offlineApps pref should remain true" 356 ); 357 ok( 358 Services.prefs.getBoolPref("privacy.clearOnShutdown.sessions"), 359 "old sessions pref should remain true" 360 ); 361 362 ok( 363 Services.prefs.getBoolPref( 364 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3" 365 ), 366 "migration pref has been flipped" 367 ); 368 }); 369 370 add_task(async function testCookiesAndStorage_cookiesTrue() { 371 await SpecialPowers.pushPrefEnv({ 372 set: [ 373 ["privacy.clearOnShutdown.cookies", true], 374 ["privacy.clearOnShutdown.offlineApps", false], 375 ["privacy.clearOnShutdown.sessions", false], 376 ["privacy.clearOnShutdown_v2.cookiesAndStorage", false], 377 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3", false], 378 ], 379 }); 380 381 Sanitizer.runSanitizeOnShutdown(); 382 383 ok( 384 Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cookiesAndStorage"), 385 "cookiesAndStorage should be set to true" 386 ); 387 ok( 388 Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"), 389 "old cookies pref should remain true" 390 ); 391 ok( 392 !Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"), 393 "old offlineApps pref should remain false" 394 ); 395 ok( 396 !Services.prefs.getBoolPref("privacy.clearOnShutdown.sessions"), 397 "old sessions pref should remain false" 398 ); 399 400 ok( 401 Services.prefs.getBoolPref( 402 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3" 403 ), 404 "migration pref has been flipped" 405 ); 406 }); 407 408 add_task(async function testMigrationDoesNotRepeat() { 409 await SpecialPowers.pushPrefEnv({ 410 set: [ 411 ["privacy.clearOnShutdown.cookies", true], 412 ["privacy.clearOnShutdown.offlineApps", false], 413 ["privacy.clearOnShutdown.sessions", false], 414 ["privacy.clearOnShutdown_v2.cookiesAndStorage", false], 415 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3", true], 416 ], 417 }); 418 419 // Simulate clearing on shutdown. 420 Sanitizer.runSanitizeOnShutdown(); 421 422 ok( 423 !Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cookiesAndStorage"), 424 "cookiesAndStorage should remain false" 425 ); 426 ok( 427 Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"), 428 "old cookies pref should remain true" 429 ); 430 ok( 431 !Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"), 432 "old offlineApps pref should remain false" 433 ); 434 ok( 435 !Services.prefs.getBoolPref("privacy.clearOnShutdown.sessions"), 436 "old sessions pref should remain false" 437 ); 438 439 ok( 440 Services.prefs.getBoolPref( 441 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3" 442 ), 443 "migration pref has been flipped" 444 ); 445 }); 446 447 add_task(async function ensureNoOldPrefsAreEffectedByMigration() { 448 await SpecialPowers.pushPrefEnv({ 449 set: [ 450 ["privacy.clearOnShutdown.history", true], 451 ["privacy.clearOnShutdown.formdata", true], 452 ["privacy.clearOnShutdown.cookies", true], 453 ["privacy.clearOnShutdown.offlineApps", false], 454 ["privacy.clearOnShutdown.sessions", false], 455 ["privacy.clearOnShutdown.siteSettings", true], 456 ["privacy.clearOnShutdown.cache", true], 457 ["privacy.clearOnShutdown_v2.cookiesAndStorage", false], 458 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3", false], 459 ], 460 }); 461 462 Sanitizer.runSanitizeOnShutdown(); 463 464 ok( 465 Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cookiesAndStorage"), 466 "cookiesAndStorage should become true" 467 ); 468 ok( 469 Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"), 470 "old cookies pref should remain true" 471 ); 472 ok( 473 !Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"), 474 "old offlineApps pref should remain false" 475 ); 476 ok( 477 !Services.prefs.getBoolPref("privacy.clearOnShutdown.sessions"), 478 "old sessions pref should remain false" 479 ); 480 ok( 481 Services.prefs.getBoolPref("privacy.clearOnShutdown.history"), 482 "old history pref should remain true" 483 ); 484 ok( 485 Services.prefs.getBoolPref("privacy.clearOnShutdown.formdata"), 486 "old formdata pref should remain true" 487 ); 488 }); 489 490 add_task(async function ensureOldPrefsTrueDontInfluenceV2ToV3Migration() { 491 // Verify that no true value from v1 prefs spill over to v2 prefs when 492 // hasMigratedToNewPrefs2 migration already happend. 493 await SpecialPowers.pushPrefEnv({ 494 set: [ 495 // v1 prefs 496 ["privacy.clearOnShutdown.history", true], 497 ["privacy.clearOnShutdown.formdata", true], 498 ["privacy.clearOnShutdown.cookies", true], 499 ["privacy.clearOnShutdown.offlineApps", true], 500 ["privacy.clearOnShutdown.sessions", true], 501 ["privacy.clearOnShutdown.siteSettings", true], 502 ["privacy.clearOnShutdown.cache", true], 503 // v2 prefs 504 ["privacy.clearOnShutdown_v2.historyFormDataAndDownloads", false], 505 // shared v2 and v3 prefs 506 ["privacy.clearOnShutdown_v2.cache", false], 507 ["privacy.clearOnShutdown_v2.cookiesAndStorage", false], 508 ["privacy.clearOnShutdown_v2.siteSettings", false], 509 // v3 prefs 510 ["privacy.clearOnShutdown_v2.formdata", true], 511 ["privacy.clearOnShutdown_v2.browsingHistoryAndDownloads", true], 512 513 // migration state prefs 514 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs2", true], 515 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3", false], 516 ], 517 }); 518 519 Sanitizer.runSanitizeOnShutdown(); 520 521 // verify that unmigrated prefs are unaffected 522 ok( 523 !Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cache"), 524 "cache shouldn't be migrated v2 to v3" 525 ); 526 ok( 527 !Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cookiesAndStorage"), 528 "cookiesAndStorage shouldn't be migrated v2 to v3" 529 ); 530 ok( 531 !Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.siteSettings"), 532 "cookiesAndStorage shouldn't be migrated v2 to v3" 533 ); 534 // verify that v3 prefs got migrated 535 ok( 536 !Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.formdata"), 537 "formdata should be migrated from v2 pref" 538 ); 539 ok( 540 !Services.prefs.getBoolPref( 541 "privacy.clearOnShutdown_v2.browsingHistoryAndDownloads" 542 ), 543 "browsingHistoryAndDownloads should be migrated from v2 pref" 544 ); 545 ok( 546 Services.prefs.getBoolPref( 547 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3" 548 ), 549 "migration to v3 ran" 550 ); 551 }); 552 553 add_task(async function ensureOldPrefsFalseDontInfluenceV2ToV3Migration() { 554 // Verify that no false value from v1 prefs spill over to v2 prefs when 555 // hasMigratedToNewPrefs2 migration already happend. 556 await SpecialPowers.pushPrefEnv({ 557 set: [ 558 // v1 prefs 559 ["privacy.clearOnShutdown.history", false], 560 ["privacy.clearOnShutdown.formdata", false], 561 ["privacy.clearOnShutdown.cookies", false], 562 ["privacy.clearOnShutdown.offlineApps", false], 563 ["privacy.clearOnShutdown.sessions", false], 564 ["privacy.clearOnShutdown.siteSettings", false], 565 ["privacy.clearOnShutdown.cache", false], 566 // v2 prefs 567 ["privacy.clearOnShutdown_v2.historyFormDataAndDownloads", true], 568 // shared v2 and v3 prefs 569 ["privacy.clearOnShutdown_v2.cache", true], 570 ["privacy.clearOnShutdown_v2.cookiesAndStorage", true], 571 ["privacy.clearOnShutdown_v2.siteSettings", true], 572 // v3 prefs 573 ["privacy.clearOnShutdown_v2.formdata", false], 574 ["privacy.clearOnShutdown_v2.browsingHistoryAndDownloads", false], 575 576 // migration state prefs 577 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs2", true], 578 ["privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3", false], 579 ], 580 }); 581 582 Sanitizer.runSanitizeOnShutdown(); 583 584 // verify that unmigrated prefs are unaffected 585 ok( 586 Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cache"), 587 "cache shouldn't be migrated v2 to v3" 588 ); 589 ok( 590 Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cookiesAndStorage"), 591 "cookiesAndStorage shouldn't be migrated v2 to v3" 592 ); 593 ok( 594 Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.siteSettings"), 595 "cookiesAndStorage shouldn't be migrated v2 to v3" 596 ); 597 // verify that v3 prefs got migrated 598 ok( 599 Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.formdata"), 600 "formdata should be migrated from v2 pref" 601 ); 602 ok( 603 Services.prefs.getBoolPref( 604 "privacy.clearOnShutdown_v2.browsingHistoryAndDownloads" 605 ), 606 "browsingHistoryAndDownloads should be migrated from v2 pref" 607 ); 608 609 ok( 610 Services.prefs.getBoolPref( 611 "privacy.sanitize.clearOnShutdown.hasMigratedToNewPrefs3" 612 ), 613 "migration to v3 ran" 614 ); 615 });