tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_BackupService_internalPostRecovery.js (2768B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 https://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 let testBackupDirPath;
      7 let recoveredProfilePath;
      8 
      9 add_setup(async function () {
     10  setupProfile();
     11 
     12  testBackupDirPath = await IOUtils.createUniqueDirectory(
     13    PathUtils.tempDir,
     14    "internalPostRecoveryBackup"
     15  );
     16  recoveredProfilePath = await IOUtils.createUniqueDirectory(
     17    PathUtils.tempDir,
     18    "internalPostRecoveryRestore"
     19  );
     20  registerCleanupFunction(async () => {
     21    await IOUtils.remove(testBackupDirPath, { recursive: true });
     22    await IOUtils.remove(recoveredProfilePath, { recursive: true });
     23  });
     24 });
     25 
     26 add_task(async function test_internal_post_recovery() {
     27  let bs = new BackupService({});
     28 
     29  const testBackupPath = (
     30    await bs.createBackup({ profilePath: testBackupDirPath })
     31  ).archivePath;
     32 
     33  await bs.getBackupFileInfo(testBackupPath);
     34  const restoreID = bs.state.restoreID;
     35  const expectedRestoreAttributes = {
     36    is_restored: true,
     37    backup_timestamp: new Date(bs.state.backupFileInfo.date).getTime(),
     38    backup_app_name: bs.state.backupFileInfo.appName,
     39    backup_app_version: bs.state.backupFileInfo.appVersion,
     40    backup_build_id: bs.state.backupFileInfo.buildID,
     41    backup_os_name: bs.state.backupFileInfo.osName,
     42    backup_os_version: bs.state.backupFileInfo.osVersion,
     43    backup_legacy_client_id: bs.state.backupFileInfo.legacyClientID,
     44  };
     45 
     46  await bs.recoverFromBackupArchive(
     47    testBackupPath,
     48    null,
     49    false,
     50    testBackupDirPath,
     51    recoveredProfilePath
     52  );
     53 
     54  // Intercept the telemetry that we want to check for before it gets submitted
     55  // and cleared out.
     56  let restoredProfileLaunchedEvents;
     57  let telemetrySetCallback = () => {
     58    Services.obs.removeObserver(
     59      telemetrySetCallback,
     60      "browser-backup-restored-profile-telemetry-set"
     61    );
     62    restoredProfileLaunchedEvents =
     63      Glean.browserBackup.restoredProfileLaunched.testGetValue();
     64  };
     65  Services.obs.addObserver(
     66    telemetrySetCallback,
     67    "browser-backup-restored-profile-telemetry-set"
     68  );
     69 
     70  // Simulate the browser starting up into this profile
     71  Services.prefs.setIntPref(
     72    "browser.backup.profile-restoration-date",
     73    Math.round(Date.now() / 1000)
     74  );
     75  bs = new BackupService({});
     76  await bs.checkForPostRecovery(recoveredProfilePath);
     77 
     78  Assert.equal(
     79    restoredProfileLaunchedEvents.length,
     80    1,
     81    "Should be a single restore profile launch event after we launch a restored profile"
     82  );
     83  Assert.deepEqual(
     84    restoredProfileLaunchedEvents[0].extra,
     85    { restore_id: restoreID },
     86    "Restore profile launch event should have the right data"
     87  );
     88 
     89  Assert.deepEqual(
     90    Glean.browserBackup.restoredProfileData.testGetValue(),
     91    expectedRestoreAttributes
     92  );
     93 });