diff options
5 files changed, 123 insertions, 155 deletions
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index 692bc4102e09..707b09a591d1 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -21,9 +21,7 @@ import static com.android.internal.util.Preconditions.checkNotNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.backup.IFullBackupRestoreObserver; -import android.app.backup.IRestoreSession; import android.content.Context; -import android.content.pm.PackageManager; import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.os.UserHandle; @@ -93,51 +91,6 @@ public class BackupManagerService { // TODO (b/118520567): Stop hardcoding system user when we pass in user id as a parameter // --------------------------------------------- - // RESTORE OPERATIONS - // --------------------------------------------- - - /** - * Used to run a restore pass for an application that is being installed. This should only be - * called from the {@link PackageManager}. - */ - public void restoreAtInstall(@UserIdInt int userId, String packageName, int token) { - UserBackupManagerService userBackupManagerService = - getServiceForUserIfCallerHasPermission(userId, "restoreAtInstall()"); - - if (userBackupManagerService != null) { - userBackupManagerService.restoreAtInstall(packageName, token); - } - } - - /** - * Begin a restore for the specified package {@code packageName} using the specified transport - * {@code transportName}. - */ - @Nullable - public IRestoreSession beginRestoreSession( - @UserIdInt int userId, String packageName, String transportName) { - UserBackupManagerService userBackupManagerService = - getServiceForUserIfCallerHasPermission(userId, "beginRestoreSession()"); - - return userBackupManagerService == null - ? null - : userBackupManagerService.beginRestoreSession(packageName, transportName); - } - - /** - * Get the restore-set token for the best-available restore set for this {@code packageName}: - * the active set if possible, else the ancestral one. Returns zero if none available. - */ - public long getAvailableRestoreToken(@UserIdInt int userId, String packageName) { - UserBackupManagerService userBackupManagerService = - getServiceForUserIfCallerHasPermission(userId, "getAvailableRestoreToken()"); - - return userBackupManagerService == null - ? 0 - : userBackupManagerService.getAvailableRestoreToken(packageName); - } - - // --------------------------------------------- // ADB BACKUP/RESTORE OPERATIONS // --------------------------------------------- diff --git a/services/backup/java/com/android/server/backup/Trampoline.java b/services/backup/java/com/android/server/backup/Trampoline.java index 7d0f7ae68e27..0522102f3786 100644 --- a/services/backup/java/com/android/server/backup/Trampoline.java +++ b/services/backup/java/com/android/server/backup/Trampoline.java @@ -41,6 +41,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; import android.os.Binder; import android.os.FileUtils; import android.os.Handler; @@ -634,7 +635,7 @@ public class Trampoline extends IBackupManager.Stub { public void restoreAtInstallForUser(int userId, String packageName, int token) throws RemoteException { if (isUserReadyForBackup(userId)) { - mService.restoreAtInstall(userId, packageName, token); + restoreAtInstall(userId, packageName, token); } } @@ -643,6 +644,19 @@ public class Trampoline extends IBackupManager.Stub { restoreAtInstallForUser(binderGetCallingUserId(), packageName, token); } + /** + * Used to run a restore pass for an application that is being installed. This should only be + * called from the {@link PackageManager}. + */ + public void restoreAtInstall(@UserIdInt int userId, String packageName, int token) { + UserBackupManagerService userBackupManagerService = + getServiceForUserIfCallerHasPermission(userId, "restoreAtInstall()"); + + if (userBackupManagerService != null) { + userBackupManagerService.restoreAtInstall(packageName, token); + } + } + @Override public void setBackupEnabledForUser(@UserIdInt int userId, boolean isEnabled) throws RemoteException { @@ -1138,8 +1152,23 @@ public class Trampoline extends IBackupManager.Stub { @Override public IRestoreSession beginRestoreSessionForUser( int userId, String packageName, String transportID) throws RemoteException { - return isUserReadyForBackup(userId) ? mService.beginRestoreSession(userId, packageName, - transportID) : null; + return isUserReadyForBackup(userId) + ? beginRestoreSession(userId, packageName, transportID) : null; + } + + /** + * Begin a restore for the specified package {@code packageName} using the specified transport + * {@code transportName}. + */ + @Nullable + public IRestoreSession beginRestoreSession( + @UserIdInt int userId, String packageName, String transportName) { + UserBackupManagerService userBackupManagerService = + getServiceForUserIfCallerHasPermission(userId, "beginRestoreSession()"); + + return userBackupManagerService == null + ? null + : userBackupManagerService.beginRestoreSession(packageName, transportName); } @Override @@ -1169,8 +1198,20 @@ public class Trampoline extends IBackupManager.Stub { @Override public long getAvailableRestoreTokenForUser(int userId, String packageName) { - return isUserReadyForBackup(userId) ? mService.getAvailableRestoreToken(userId, - packageName) : 0; + return isUserReadyForBackup(userId) ? getAvailableRestoreToken(userId, packageName) : 0; + } + + /** + * Get the restore-set token for the best-available restore set for this {@code packageName}: + * the active set if possible, else the ancestral one. Returns zero if none available. + */ + public long getAvailableRestoreToken(@UserIdInt int userId, String packageName) { + UserBackupManagerService userBackupManagerService = + getServiceForUserIfCallerHasPermission(userId, "getAvailableRestoreToken()"); + + return userBackupManagerService == null + ? 0 + : userBackupManagerService.getAvailableRestoreToken(packageName); } @Override diff --git a/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java b/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java index d08b6dafebdd..6dc9a2e2c1cb 100644 --- a/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java +++ b/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java @@ -214,83 +214,6 @@ public class BackupManagerServiceTest { } // --------------------------------------------- - // Restore tests - // --------------------------------------------- - - /** Test that the backup service routes methods correctly to the user that requests it. */ - @Test - public void testRestoreAtInstall_onRegisteredUser_callsMethodForUser() throws Exception { - registerUser(mUserOneId, mUserOneService); - BackupManagerService backupManagerService = createService(); - setCallerAndGrantInteractUserPermission(mUserOneId, /* shouldGrantPermission */ false); - - backupManagerService.restoreAtInstall(mUserOneId, TEST_PACKAGE, /* token */ 0); - - verify(mUserOneService).restoreAtInstall(TEST_PACKAGE, /* token */ 0); - } - - /** Test that the backup service does not route methods for non-registered users. */ - @Test - public void testRestoreAtInstall_onUnknownUser_doesNotPropagateCall() throws Exception { - registerUser(mUserOneId, mUserOneService); - BackupManagerService backupManagerService = createService(); - setCallerAndGrantInteractUserPermission(mUserTwoId, /* shouldGrantPermission */ false); - - backupManagerService.restoreAtInstall(mUserTwoId, TEST_PACKAGE, /* token */ 0); - - verify(mUserOneService, never()).restoreAtInstall(TEST_PACKAGE, /* token */ 0); - } - - /** Test that the backup service routes methods correctly to the user that requests it. */ - @Test - public void testBeginRestoreSession_onRegisteredUser_callsMethodForUser() throws Exception { - registerUser(mUserOneId, mUserOneService); - BackupManagerService backupManagerService = createService(); - setCallerAndGrantInteractUserPermission(mUserOneId, /* shouldGrantPermission */ false); - - backupManagerService.beginRestoreSession(mUserOneId, TEST_PACKAGE, TEST_TRANSPORT); - - verify(mUserOneService).beginRestoreSession(TEST_PACKAGE, TEST_TRANSPORT); - } - - /** Test that the backup service does not route methods for non-registered users. */ - @Test - public void testBeginRestoreSession_onUnknownUser_doesNotPropagateCall() throws Exception { - registerUser(mUserOneId, mUserOneService); - BackupManagerService backupManagerService = createService(); - setCallerAndGrantInteractUserPermission(mUserTwoId, /* shouldGrantPermission */ false); - - backupManagerService.beginRestoreSession(mUserTwoId, TEST_PACKAGE, TEST_TRANSPORT); - - verify(mUserOneService, never()).beginRestoreSession(TEST_PACKAGE, TEST_TRANSPORT); - } - - /** Test that the backup service routes methods correctly to the user that requests it. */ - @Test - public void testGetAvailableRestoreToken_onRegisteredUser_callsMethodForUser() - throws Exception { - registerUser(mUserOneId, mUserOneService); - BackupManagerService backupManagerService = createService(); - setCallerAndGrantInteractUserPermission(mUserOneId, /* shouldGrantPermission */ false); - - backupManagerService.getAvailableRestoreToken(mUserOneId, TEST_PACKAGE); - - verify(mUserOneService).getAvailableRestoreToken(TEST_PACKAGE); - } - - /** Test that the backup service does not route methods for non-registered users. */ - @Test - public void testGetAvailableRestoreToken_onUnknownUser_doesNotPropagateCall() throws Exception { - registerUser(mUserOneId, mUserOneService); - BackupManagerService backupManagerService = createService(); - setCallerAndGrantInteractUserPermission(mUserTwoId, /* shouldGrantPermission */ false); - - backupManagerService.getAvailableRestoreToken(mUserTwoId, TEST_PACKAGE); - - verify(mUserOneService, never()).getAvailableRestoreToken(TEST_PACKAGE); - } - - // --------------------------------------------- // Adb backup/restore tests // --------------------------------------------- diff --git a/services/robotests/backup/src/com/android/server/backup/TrampolineRoboTest.java b/services/robotests/backup/src/com/android/server/backup/TrampolineRoboTest.java index 9d789e8e8165..7e994f0bed74 100644 --- a/services/robotests/backup/src/com/android/server/backup/TrampolineRoboTest.java +++ b/services/robotests/backup/src/com/android/server/backup/TrampolineRoboTest.java @@ -1030,6 +1030,83 @@ public class TrampolineRoboTest { verify(mUserOneService, never()).fullTransportBackup(packages); } + // --------------------------------------------- + // Restore tests + // --------------------------------------------- + + /** Test that the backup service routes methods correctly to the user that requests it. */ + @Test + public void testRestoreAtInstall_onRegisteredUser_callsMethodForUser() throws Exception { + Trampoline backupManagerService = createService(); + registerUser(backupManagerService, mUserOneId, mUserOneService); + setCallerAndGrantInteractUserPermission(mUserOneId, /* shouldGrantPermission */ false); + + backupManagerService.restoreAtInstall(mUserOneId, TEST_PACKAGE, /* token */ 0); + + verify(mUserOneService).restoreAtInstall(TEST_PACKAGE, /* token */ 0); + } + + /** Test that the backup service does not route methods for non-registered users. */ + @Test + public void testRestoreAtInstall_onUnknownUser_doesNotPropagateCall() throws Exception { + Trampoline backupManagerService = createService(); + registerUser(backupManagerService, mUserOneId, mUserOneService); + setCallerAndGrantInteractUserPermission(mUserTwoId, /* shouldGrantPermission */ false); + + backupManagerService.restoreAtInstall(mUserTwoId, TEST_PACKAGE, /* token */ 0); + + verify(mUserOneService, never()).restoreAtInstall(TEST_PACKAGE, /* token */ 0); + } + + /** Test that the backup service routes methods correctly to the user that requests it. */ + @Test + public void testBeginRestoreSession_onRegisteredUser_callsMethodForUser() throws Exception { + Trampoline backupManagerService = createService(); + registerUser(backupManagerService, mUserOneId, mUserOneService); + setCallerAndGrantInteractUserPermission(mUserOneId, /* shouldGrantPermission */ false); + + backupManagerService.beginRestoreSession(mUserOneId, TEST_PACKAGE, TEST_TRANSPORT); + + verify(mUserOneService).beginRestoreSession(TEST_PACKAGE, TEST_TRANSPORT); + } + + /** Test that the backup service does not route methods for non-registered users. */ + @Test + public void testBeginRestoreSession_onUnknownUser_doesNotPropagateCall() throws Exception { + Trampoline backupManagerService = createService(); + registerUser(backupManagerService, mUserOneId, mUserOneService); + setCallerAndGrantInteractUserPermission(mUserTwoId, /* shouldGrantPermission */ false); + + backupManagerService.beginRestoreSession(mUserTwoId, TEST_PACKAGE, TEST_TRANSPORT); + + verify(mUserOneService, never()).beginRestoreSession(TEST_PACKAGE, TEST_TRANSPORT); + } + + /** Test that the backup service routes methods correctly to the user that requests it. */ + @Test + public void testGetAvailableRestoreToken_onRegisteredUser_callsMethodForUser() + throws Exception { + Trampoline backupManagerService = createService(); + registerUser(backupManagerService, mUserOneId, mUserOneService); + setCallerAndGrantInteractUserPermission(mUserOneId, /* shouldGrantPermission */ false); + + backupManagerService.getAvailableRestoreToken(mUserOneId, TEST_PACKAGE); + + verify(mUserOneService).getAvailableRestoreToken(TEST_PACKAGE); + } + + /** Test that the backup service does not route methods for non-registered users. */ + @Test + public void testGetAvailableRestoreToken_onUnknownUser_doesNotPropagateCall() throws Exception { + Trampoline backupManagerService = createService(); + registerUser(backupManagerService, mUserOneId, mUserOneService); + setCallerAndGrantInteractUserPermission(mUserTwoId, /* shouldGrantPermission */ false); + + backupManagerService.getAvailableRestoreToken(mUserTwoId, TEST_PACKAGE); + + verify(mUserOneService, never()).getAvailableRestoreToken(TEST_PACKAGE); + } + private Trampoline createService() { return new Trampoline(mContext); } diff --git a/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java b/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java index 4aa949382361..eb90b4553a9b 100644 --- a/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java @@ -482,23 +482,6 @@ public class TrampolineTest { } @Test - public void restoreAtInstallForUser_forwarded() throws Exception { - - mTrampoline.restoreAtInstallForUser(mUserId, PACKAGE_NAME, 123); - - verify(mBackupManagerServiceMock).restoreAtInstall(mUserId, PACKAGE_NAME, 123); - } - - @Test - public void restoreAtInstall_forwarded() throws Exception { - TrampolineTestable.sCallingUserId = mUserId; - - mTrampoline.restoreAtInstall(PACKAGE_NAME, 123); - - verify(mBackupManagerServiceMock).restoreAtInstall(mUserId, PACKAGE_NAME, 123); - } - - @Test public void setBackupPassword_forwarded() throws Exception { mTrampoline.setBackupPassword(CURRENT_PASSWORD, NEW_PASSWORD); verify(mBackupManagerServiceMock).setBackupPassword(CURRENT_PASSWORD, NEW_PASSWORD); @@ -613,15 +596,6 @@ public class TrampolineTest { } @Test - public void getAvailableRestoreTokenForUser_forwarded() { - when(mBackupManagerServiceMock.getAvailableRestoreToken(mUserId, PACKAGE_NAME)) - .thenReturn(123L); - - assertEquals(123, mTrampoline.getAvailableRestoreTokenForUser(mUserId, PACKAGE_NAME)); - verify(mBackupManagerServiceMock).getAvailableRestoreToken(mUserId, PACKAGE_NAME); - } - - @Test public void dump_callerDoesNotHavePermission_ignored() { when(mContextMock.checkCallingOrSelfPermission( android.Manifest.permission.DUMP)).thenReturn( |