Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
let testBackupDirPath;
let recoveredProfilePath;
add_setup(async function () {
setupProfile();
testBackupDirPath = await IOUtils.createUniqueDirectory(
PathUtils.tempDir,
"internalPostRecoveryBackup"
);
recoveredProfilePath = await IOUtils.createUniqueDirectory(
PathUtils.tempDir,
"internalPostRecoveryRestore"
);
registerCleanupFunction(async () => {
await IOUtils.remove(testBackupDirPath, { recursive: true });
await IOUtils.remove(recoveredProfilePath, { recursive: true });
});
});
add_task(async function test_internal_post_recovery() {
let bs = new BackupService({});
const testBackupPath = (
await bs.createBackup({ profilePath: testBackupDirPath })
).archivePath;
await bs.getBackupFileInfo(testBackupPath);
const restoreID = bs.state.restoreID;
const expectedRestoreAttributes = {
is_restored: true,
backup_timestamp: new Date(bs.state.backupFileInfo.date).getTime(),
backup_app_name: bs.state.backupFileInfo.appName,
backup_app_version: bs.state.backupFileInfo.appVersion,
backup_build_id: bs.state.backupFileInfo.buildID,
backup_os_name: bs.state.backupFileInfo.osName,
backup_os_version: bs.state.backupFileInfo.osVersion,
backup_legacy_client_id: bs.state.backupFileInfo.legacyClientID,
};
await bs.recoverFromBackupArchive(
testBackupPath,
null,
false,
testBackupDirPath,
recoveredProfilePath
);
// Intercept the telemetry that we want to check for before it gets submitted
// and cleared out.
let restoredProfileLaunchedEvents;
let telemetrySetCallback = () => {
Services.obs.removeObserver(
telemetrySetCallback,
"browser-backup-restored-profile-telemetry-set"
);
restoredProfileLaunchedEvents =
Glean.browserBackup.restoredProfileLaunched.testGetValue();
};
Services.obs.addObserver(
telemetrySetCallback,
"browser-backup-restored-profile-telemetry-set"
);
// Simulate the browser starting up into this profile
Services.prefs.setIntPref(
"browser.backup.profile-restoration-date",
Math.round(Date.now() / 1000)
);
bs = new BackupService({});
await bs.checkForPostRecovery(recoveredProfilePath);
Assert.equal(
restoredProfileLaunchedEvents.length,
1,
"Should be a single restore profile launch event after we launch a restored profile"
);
Assert.deepEqual(
restoredProfileLaunchedEvents[0].extra,
{ restore_id: restoreID },
"Restore profile launch event should have the right data"
);
Assert.deepEqual(
Glean.browserBackup.restoredProfileData.testGetValue(),
expectedRestoreAttributes
);
});