Source code

Revision control

Copy as Markdown

Other Tools

/* 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 https://mozilla.org/MPL/2.0/. */
import { BackupResource } from "resource:///modules/backup/BackupResource.sys.mjs";
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
const lazy = {};
XPCOMUtils.defineLazyPreferenceGetter(
lazy,
"isSanitizeOnShutdownEnabled",
"privacy.sanitize.sanitizeOnShutdown",
false
);
XPCOMUtils.defineLazyPreferenceGetter(
lazy,
"isSiteSettingsClearedOnShutdown",
"privacy.clearOnShutdown.siteSettings",
false
);
XPCOMUtils.defineLazyPreferenceGetter(
lazy,
"isSiteSettingsClearedOnShutdown2",
"privacy.clearOnShutdown_v2.siteSettings",
false
);
XPCOMUtils.defineLazyPreferenceGetter(
lazy,
"useOldClearHistoryDialog",
"privacy.sanitize.useOldClearHistoryDialog",
false
);
/**
* Class representing the backup and restore of a user's site settings
*/
export class SiteSettingsBackupResource extends BackupResource {
static get key() {
return "site_settings";
}
static get requiresEncryption() {
return false;
}
static get priority() {
return 1;
}
static get canBackupResource() {
if (!lazy.isSanitizeOnShutdownEnabled) {
return true;
}
if (lazy.useOldClearHistoryDialog) {
return !lazy.isSiteSettingsClearedOnShutdown;
}
return !lazy.isSiteSettingsClearedOnShutdown2;
}
async backup(
stagingPath,
profilePath = PathUtils.profileDir,
_isEncrypting = false
) {
const sqliteDatabases = ["permissions.sqlite", "content-prefs.sqlite"];
await BackupResource.copySqliteDatabases(
profilePath,
stagingPath,
sqliteDatabases
);
return null;
}
async recover(_manifestEntry, recoveryPath, destProfilePath) {
/**
* pass the file path to postRecovery() so that we can import all bookmarks into the new
* profile once it's been launched and restored.
*/
const simpleCopyFiles = ["permissions.sqlite", "content-prefs.sqlite"];
await BackupResource.copyFiles(
recoveryPath,
destProfilePath,
simpleCopyFiles
);
return null;
}
async measure(_profilePath = PathUtils.profileDir) {
// Unsure how to measure this!!
}
}