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 });