Backed out changeset 5e494cb0aff6 (bug 1901534)
Backed out changeset e8773eda97c1 (bug 1891854)
Backed out changeset 4b079909d830 (bug 1901520)
Backed out changeset 5509d1905d2c (bug 1901520)
Backed out changeset 6d98566735ad (bug 1901520)
80 lines
2.4 KiB
JavaScript
80 lines
2.4 KiB
JavaScript
/* 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,
|
|
bytesToFuzzyKilobytes,
|
|
} from "resource:///modules/backup/BackupResource.sys.mjs";
|
|
|
|
const lazy = {};
|
|
|
|
ChromeUtils.defineESModuleGetters(lazy, {
|
|
SessionStore: "resource:///modules/sessionstore/SessionStore.sys.mjs",
|
|
});
|
|
|
|
/**
|
|
* Class representing Session store related files within a user profile.
|
|
*/
|
|
export class SessionStoreBackupResource extends BackupResource {
|
|
static get key() {
|
|
return "sessionstore";
|
|
}
|
|
|
|
static get requiresEncryption() {
|
|
// Session store data does not require encryption, but if encryption is
|
|
// disabled, then session cookies will be cleared from the backup before
|
|
// writing it to the disk.
|
|
return false;
|
|
}
|
|
|
|
async backup(stagingPath, profilePath = PathUtils.profileDir) {
|
|
let sessionStoreState = lazy.SessionStore.getCurrentState(true);
|
|
let sessionStorePath = PathUtils.join(stagingPath, "sessionstore.jsonlz4");
|
|
|
|
/* Bug 1891854 - remove cookies from session store state if the backup file is
|
|
* not encrypted. */
|
|
|
|
await IOUtils.writeJSON(sessionStorePath, sessionStoreState, {
|
|
compress: true,
|
|
});
|
|
await BackupResource.copyFiles(profilePath, stagingPath, [
|
|
"sessionstore-backups",
|
|
]);
|
|
|
|
return null;
|
|
}
|
|
|
|
async recover(_manifestEntry, recoveryPath, destProfilePath) {
|
|
await BackupResource.copyFiles(recoveryPath, destProfilePath, [
|
|
"sessionstore.jsonlz4",
|
|
"sessionstore-backups",
|
|
]);
|
|
|
|
return null;
|
|
}
|
|
|
|
async measure(profilePath = PathUtils.profileDir) {
|
|
// Get the current state of the session store JSON and
|
|
// measure it's uncompressed size.
|
|
let sessionStoreJson = lazy.SessionStore.getCurrentState(true);
|
|
let sessionStoreSize = new TextEncoder().encode(
|
|
JSON.stringify(sessionStoreJson)
|
|
).byteLength;
|
|
let sessionStoreNearestTenthKb = bytesToFuzzyKilobytes(sessionStoreSize);
|
|
|
|
Glean.browserBackup.sessionStoreSize.set(sessionStoreNearestTenthKb);
|
|
|
|
let sessionStoreBackupsDirectoryPath = PathUtils.join(
|
|
profilePath,
|
|
"sessionstore-backups"
|
|
);
|
|
let sessionStoreBackupsDirectorySize =
|
|
await BackupResource.getDirectorySize(sessionStoreBackupsDirectoryPath);
|
|
|
|
Glean.browserBackup.sessionStoreBackupsDirectorySize.set(
|
|
sessionStoreBackupsDirectorySize
|
|
);
|
|
}
|
|
}
|