Bug 1876097 - Migrate old prefs to the new prefs for clear on shutdown in the new clear history dialog. r=pbz

Differential Revision: https://phabricator.services.mozilla.com/D199445
This commit is contained in:
Harshit Sohaney 2024-01-29 14:17:40 +00:00
parent b122e1a7cd
commit 396c4816a3
6 changed files with 404 additions and 0 deletions

View File

@ -1065,6 +1065,8 @@ pref("privacy.sanitize.timeSpan", 1);
pref("privacy.sanitize.useOldClearHistoryDialog", true);
pref("privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs", false);
pref("privacy.panicButton.enabled", true);
// Time until temporary permissions expire, in ms

View File

@ -153,6 +153,10 @@ var gSanitizePromptDialog = {
this._dialog.setAttribute("inClearOnShutdown", "true");
// remove the clear private data groupbox element
clearPrivateDataGroupbox.remove();
// If this is the first time the user is opening the new clear on shutdown
// dialog, migrate their prefs
Sanitizer.maybeMigrateSanitizeOnShutdownPrefs();
} else if (!lazy.USE_OLD_DIALOG) {
okButtonl10nID = "sanitize-button-ok2";
// remove the clear on shutdown groupbox element

View File

@ -35,3 +35,5 @@ support-files = [
["browser_sanitizeDialog.js"]
["browser_sanitizeDialog_v2.js"]
["browser_sanitizeOnShutdown_migration.js"]

View File

@ -1313,3 +1313,31 @@ add_task(async function testClearingOptionsTelemetry() {
`Expected ${telemetryObject} to be the same as ${expectedObject}`
);
});
add_task(async function testCheckboxStatesAfterMigration() {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.clearOnShutdown.history", false],
["privacy.clearOnShutdown.formdata", true],
["privacy.clearOnShutdown.cookies", true],
["privacy.clearOnShutdown.offlineApps", false],
["privacy.clearOnShutdown.sessions", false],
["privacy.clearOnShutdown.siteSettings", false],
["privacy.clearOnShutdown.cache", true],
["privacy.clearOnShutdown_v2.cookiesAndStorage", false],
["privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs", false],
],
});
let dh = new DialogHelper();
dh.setMode("clearOnShutdown");
dh.onload = function () {
this.validateCheckbox("cookiesAndStorage", true);
this.validateCheckbox("historyFormDataAndDownloads", false);
this.validateCheckbox("cache", true);
this.validateCheckbox("siteSettings", false);
this.cancelDialog();
};
dh.open();
await dh.promiseClosed;
});

View File

@ -0,0 +1,312 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim:set ts=2 sw=2 sts=2 et: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [["privacy.sanitize.useOldClearHistoryDialog", false]],
});
});
add_task(async function testMigrationOfCacheAndSiteSettings() {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.clearOnShutdown.cache", true],
["privacy.clearOnShutdown.siteSettings", true],
["privacy.clearOnShutdown_v2.cache", false],
["privacy.clearOnShutdown_v2.siteSettings", false],
["privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs", false],
],
});
Sanitizer.runSanitizeOnShutdown();
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cache"),
true,
"Cache should be set to true"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.siteSettings"),
true,
"siteSettings should be set to true"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.cache"),
true,
"old cache should remain true"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.siteSettings"),
true,
"old siteSettings should remain true"
);
Assert.equal(
Services.prefs.getBoolPref(
"privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs"
),
true,
"migration pref has been flipped"
);
});
add_task(async function testHistoryAndFormData_historyTrue() {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.clearOnShutdown.history", true],
["privacy.clearOnShutdown.formdata", false],
["privacy.clearOnShutdown_v2.historyFormDataAndDownloads", false],
["privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs", false],
],
});
Sanitizer.runSanitizeOnShutdown();
Assert.equal(
Services.prefs.getBoolPref(
"privacy.clearOnShutdown_v2.historyFormDataAndDownloads"
),
true,
"historyFormDataAndDownloads should be set to true"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.history"),
true,
"old history pref should remain true"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.formdata"),
false,
"old formdata pref should remain false"
);
Assert.equal(
Services.prefs.getBoolPref(
"privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs"
),
true,
"migration pref has been flipped"
);
});
add_task(async function testHistoryAndFormData_historyFalse() {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.clearOnShutdown.history", false],
["privacy.clearOnShutdown.formdata", true],
["privacy.clearOnShutdown_v2.historyFormDataAndDownloads", true],
["privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs", false],
],
});
Sanitizer.runSanitizeOnShutdown();
Assert.equal(
Services.prefs.getBoolPref(
"privacy.clearOnShutdown_v2.historyFormDataAndDownloads"
),
false,
"historyFormDataAndDownloads should be set to true"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.history"),
false,
"old history pref should remain false"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.formdata"),
true,
"old formdata pref should remain true"
);
Assert.equal(
Services.prefs.getBoolPref(
"privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs"
),
true,
"migration pref has been flipped"
);
});
add_task(async function testCookiesAndStorage_cookiesFalse() {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.clearOnShutdown.cookies", false],
["privacy.clearOnShutdown.offlineApps", true],
["privacy.clearOnShutdown.sessions", true],
["privacy.clearOnShutdown_v2.cookiesAndStorage", true],
["privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs", false],
],
});
// Simulate clearing on shutdown.
Sanitizer.runSanitizeOnShutdown();
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cookiesAndStorage"),
false,
"cookiesAndStorage should be set to false"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"),
false,
"old cookies pref should remain false"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"),
true,
"old offlineApps pref should remain true"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.sessions"),
true,
"old sessions pref should remain true"
);
Assert.equal(
Services.prefs.getBoolPref(
"privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs"
),
true,
"migration pref has been flipped"
);
});
add_task(async function testCookiesAndStorage_cookiesTrue() {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.clearOnShutdown.cookies", true],
["privacy.clearOnShutdown.offlineApps", false],
["privacy.clearOnShutdown.sessions", false],
["privacy.clearOnShutdown_v2.cookiesAndStorage", false],
["privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs", false],
],
});
Sanitizer.runSanitizeOnShutdown();
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cookiesAndStorage"),
true,
"cookiesAndStorage should be set to true"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"),
true,
"old cookies pref should remain true"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"),
false,
"old offlineApps pref should remain false"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.sessions"),
false,
"old sessions pref should remain false"
);
Assert.equal(
Services.prefs.getBoolPref(
"privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs"
),
true,
"migration pref has been flipped"
);
});
add_task(async function testMigrationDoesNotRepeat() {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.clearOnShutdown.cookies", true],
["privacy.clearOnShutdown.offlineApps", false],
["privacy.clearOnShutdown.sessions", false],
["privacy.clearOnShutdown_v2.cookiesAndStorage", false],
["privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs", true],
],
});
// Simulate clearing on shutdown.
Sanitizer.runSanitizeOnShutdown();
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cookiesAndStorage"),
false,
"cookiesAndStorage should remain false"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"),
true,
"old cookies pref should remain true"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"),
false,
"old offlineApps pref should remain false"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.sessions"),
false,
"old sessions pref should remain false"
);
Assert.equal(
Services.prefs.getBoolPref(
"privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs"
),
true,
"migration pref has been flipped"
);
});
add_task(async function ensureNoOldPrefsAreEffectedByMigration() {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.clearOnShutdown.history", true],
["privacy.clearOnShutdown.formdata", true],
["privacy.clearOnShutdown.cookies", true],
["privacy.clearOnShutdown.offlineApps", false],
["privacy.clearOnShutdown.sessions", false],
["privacy.clearOnShutdown.siteSettings", true],
["privacy.clearOnShutdown.cache", true],
["privacy.clearOnShutdown_v2.cookiesAndStorage", false],
["privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs", false],
],
});
Sanitizer.runSanitizeOnShutdown();
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown_v2.cookiesAndStorage"),
true,
"cookiesAndStorage should become true"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"),
true,
"old cookies pref should remain true"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"),
false,
"old offlineApps pref should remain false"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.sessions"),
false,
"old sessions pref should remain false"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.history"),
true,
"old history pref should remain true"
);
Assert.equal(
Services.prefs.getBoolPref("privacy.clearOnShutdown.formdata"),
true,
"old formdata pref should remain true"
);
});

View File

@ -396,6 +396,58 @@ export var Sanitizer = {
});
},
/**
* Migrate old sanitize on shutdown prefs to the new prefs for the new
* clear on shutdown dialog. Does nothing if the migration was completed before
* based on the pref privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs
*
*/
maybeMigrateSanitizeOnShutdownPrefs() {
if (
Services.prefs.getBoolPref(
"privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs"
)
) {
return;
}
let cookies = Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies");
let history = Services.prefs.getBoolPref("privacy.clearOnShutdown.history");
let cache = Services.prefs.getBoolPref("privacy.clearOnShutdown.cache");
let siteSettings = Services.prefs.getBoolPref(
"privacy.clearOnShutdown.siteSettings"
);
// We set cookiesAndStorage to true if cookies are enabled for clearing on shutdown
// regardless of what sessions and offlineApps are set to
// This is because cookie clearing behaviour takes precedence over sessions and offlineApps clearing.
Services.prefs.setBoolPref(
"privacy.clearOnShutdown_v2.cookiesAndStorage",
cookies
);
// we set historyFormDataAndDownloads to true if history is enabled for clearing on
// shutdown, regardless of what form data is set to.
// This is because history clearing behavious takes precedence over formdata clearing.
Services.prefs.setBoolPref(
"privacy.clearOnShutdown_v2.historyFormDataAndDownloads",
history
);
// cache and siteSettings follow the old dialog prefs
Services.prefs.setBoolPref("privacy.clearOnShutdown_v2.cache", cache);
Services.prefs.setBoolPref(
"privacy.clearOnShutdown_v2.siteSettings",
siteSettings
);
Services.prefs.setBoolPref(
"privacy.sanitize.sanitizeOnShutdown.hasMigratedToNewPrefs",
true
);
},
// When making any changes to the sanitize implementations here,
// please check whether the changes are applicable to Android
// (mobile/android/modules/geckoview/GeckoViewStorageController.jsm) as well.
@ -1031,6 +1083,10 @@ async function sanitizeOnShutdown(progress) {
),
};
} else {
// Perform a migration if this is the first time sanitizeOnShutdown is
// running for the user with the new dialog
Sanitizer.maybeMigrateSanitizeOnShutdownPrefs();
progress.sanitizationPrefs = {
privacy_sanitize_sanitizeOnShutdown: Services.prefs.getBoolPref(
"privacy.sanitize.sanitizeOnShutdown"