1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
/* 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
);
}
}
|