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
80
81
82
83
|
"use strict";
/**
* Ensure that there is no dialog for OS crypto that blocks a migration when
* importing from an empty Login Data DB.
*/
const { AppConstants } = ChromeUtils.importESModule(
"resource://gre/modules/AppConstants.sys.mjs"
);
const PROFILE = {
id: "Default",
name: "Person With No Data",
};
add_task(async function setup() {
let dirSvcPath;
let pathId;
// Use a mock service and account name to avoid a Keychain auth. prompt that
// would block the test from finishing if Chrome has already created a matching
// Keychain entry. This allows us to still exercise the keychain lookup code.
// The mock encryption passphrase is used when the Keychain item isn't found.
let mockMacOSKeychain = {
passphrase: "bW96aWxsYWZpcmVmb3g=",
serviceName: "TESTING Chrome Safe Storage",
accountName: "TESTING Chrome",
};
if (AppConstants.platform == "macosx") {
dirSvcPath = "LibraryWithNoData/";
pathId = "ULibDir";
} else if (AppConstants.platform == "win") {
dirSvcPath = "AppData/LocalWithNoData/";
pathId = "LocalAppData";
} else {
throw new Error("Not implemented");
}
let dirSvcFile = do_get_file(dirSvcPath);
registerFakePath(pathId, dirSvcFile);
if (AppConstants.platform == "macosx") {
let migrator = await MigrationUtils.getMigrator("chrome");
Object.assign(migrator, {
_keychainServiceName: mockMacOSKeychain.serviceName,
_keychainAccountName: mockMacOSKeychain.accountName,
// No `_keychainMockPassphrase` as we don't want to mock the OS dialog as
// it shouldn't appear.
});
}
registerCleanupFunction(() => {
Services.logins.removeAllUserFacingLogins();
});
});
add_task(async function test_importEmptyDBWithoutAuthPrompts() {
let migrator = await MigrationUtils.getMigrator("chrome");
Assert.ok(
await migrator.isSourceAvailable(),
"Sanity check the source exists"
);
let logins = Services.logins.getAllLogins();
Assert.equal(logins.length, 0, "There are no logins initially");
// Migrate the logins. If an OS dialog (e.g. Keychain) blocks this the test
// would timeout.
await promiseMigration(
migrator,
MigrationUtils.resourceTypes.PASSWORDS,
PROFILE,
true
);
logins = Services.logins.getAllLogins();
Assert.equal(logins.length, 0, "Check login count after importing the data");
Assert.equal(
logins.length,
MigrationUtils._importQuantities.logins,
"Check telemetry matches the actual import."
);
});
|