summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/backup/java/com/android/server/backup/BackupManagerService.java28
-rw-r--r--services/backup/java/com/android/server/backup/Trampoline.java22
-rw-r--r--services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java16
4 files changed, 30 insertions, 40 deletions
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index 69e4df01c4db..14277d3c5988 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -49,13 +49,11 @@ import android.util.SparseArray;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.DumpUtils;
-import com.android.server.SystemConfig;
import com.android.server.SystemService;
import java.io.File;
import java.io.FileDescriptor;
import java.io.PrintWriter;
-import java.util.Collections;
import java.util.Set;
/**
@@ -80,8 +78,6 @@ public class BackupManagerService {
// Keeps track of all unlocked users registered with this service. Indexed by user id.
private final SparseArray<UserBackupManagerService> mServiceUsers = new SparseArray<>();
- private Set<ComponentName> mTransportWhitelist;
-
private final BroadcastReceiver mUserRemovedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -99,13 +95,6 @@ public class BackupManagerService {
mContext = checkNotNull(context);
mTrampoline = checkNotNull(trampoline);
- // Set up our transport options.
- SystemConfig systemConfig = SystemConfig.getInstance();
- mTransportWhitelist = systemConfig.getBackupTransportWhitelist();
- if (mTransportWhitelist == null) {
- mTransportWhitelist = Collections.emptySet();
- }
-
mContext.registerReceiver(mUserRemovedReceiver,
new IntentFilter(Intent.ACTION_USER_REMOVED));
}
@@ -147,7 +136,7 @@ public class BackupManagerService {
* UserBackupManagerService} and registering it with this service.
*/
@VisibleForTesting
- protected void startServiceForUser(int userId) {
+ protected void startServiceForUser(int userId, Set<ComponentName> transportWhitelist) {
if (mServiceUsers.get(userId) != null) {
Slog.i(TAG, "userId " + userId + " already started, so not starting again");
return;
@@ -155,7 +144,7 @@ public class BackupManagerService {
UserBackupManagerService userBackupManagerService =
UserBackupManagerService.createAndInitializeService(
- userId, mContext, mTrampoline, mTransportWhitelist);
+ userId, mContext, mTrampoline, transportWhitelist);
startServiceForUser(userId, userBackupManagerService);
}
@@ -364,19 +353,6 @@ public class BackupManagerService {
: userBackupManagerService.listAllTransportComponents();
}
- /** Report all system whitelisted transports. */
- @Nullable
- public String[] getTransportWhitelist() {
- // No permission check, intentionally.
- String[] whitelistedTransports = new String[mTransportWhitelist.size()];
- int i = 0;
- for (ComponentName component : mTransportWhitelist) {
- whitelistedTransports[i] = component.flattenToShortString();
- i++;
- }
- return whitelistedTransports;
- }
-
/**
* Update the attributes of the transport identified by {@code transportComponent}. If the
* specified transport has not been bound at least once (for registration), this call will be
diff --git a/services/backup/java/com/android/server/backup/Trampoline.java b/services/backup/java/com/android/server/backup/Trampoline.java
index 0061cf02adfd..12fb46bc3eab 100644
--- a/services/backup/java/com/android/server/backup/Trampoline.java
+++ b/services/backup/java/com/android/server/backup/Trampoline.java
@@ -19,6 +19,8 @@ package com.android.server.backup;
import static com.android.internal.util.Preconditions.checkNotNull;
import static com.android.server.backup.BackupManagerService.TAG;
+import static java.util.Collections.emptySet;
+
import android.Manifest;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
@@ -48,12 +50,14 @@ import android.util.Slog;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.DumpUtils;
+import com.android.server.SystemConfig;
import com.android.server.backup.utils.RandomAccessFileUtils;
import java.io.File;
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
+import java.util.Set;
/**
* A proxy to the {@link BackupManagerService} implementation.
@@ -118,6 +122,7 @@ public class Trampoline extends IBackupManager.Stub {
@VisibleForTesting
protected volatile BackupManagerService mService;
private final Handler mHandler;
+ private final Set<ComponentName> mTransportWhitelist;
public Trampoline(Context context) {
mContext = context;
@@ -128,6 +133,9 @@ public class Trampoline extends IBackupManager.Stub {
mHandler = new Handler(handlerThread.getLooper());
mUserManager = UserManager.get(context);
mService = new BackupManagerService(mContext, this);
+ Set<ComponentName> transportWhitelist =
+ SystemConfig.getInstance().getBackupTransportWhitelist();
+ mTransportWhitelist = (transportWhitelist == null) ? emptySet() : transportWhitelist;
}
// TODO: Remove this when we implement DI by injecting in the construtor.
@@ -270,7 +278,7 @@ public class Trampoline extends IBackupManager.Stub {
return;
}
Slog.i(TAG, "Starting service for user: " + userId);
- mService.startServiceForUser(userId);
+ mService.startServiceForUser(userId, mTransportWhitelist);
}
/**
@@ -618,7 +626,17 @@ public class Trampoline extends IBackupManager.Stub {
@Override
public String[] getTransportWhitelist() {
int userId = binderGetCallingUserId();
- return (isUserReadyForBackup(userId)) ? mService.getTransportWhitelist() : null;
+ if (!isUserReadyForBackup(userId)) {
+ return null;
+ }
+ // No permission check, intentionally.
+ String[] whitelistedTransports = new String[mTransportWhitelist.size()];
+ int i = 0;
+ for (ComponentName component : mTransportWhitelist) {
+ whitelistedTransports[i] = component.flattenToShortString();
+ i++;
+ }
+ return whitelistedTransports;
}
@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 a65d1dca2a57..0d99561af889 100644
--- a/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java
+++ b/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java
@@ -36,6 +36,8 @@ import static org.mockito.Mockito.verify;
import static org.robolectric.Shadows.shadowOf;
import static org.testng.Assert.expectThrows;
+import static java.util.Collections.emptySet;
+
import android.annotation.UserIdInt;
import android.app.Application;
import android.app.backup.IBackupManagerMonitor;
@@ -160,7 +162,7 @@ public class BackupManagerServiceTest {
public void testStartServiceForUser_registersUser() throws Exception {
BackupManagerService backupManagerService = createService();
- backupManagerService.startServiceForUser(mUserOneId);
+ backupManagerService.startServiceForUser(mUserOneId, emptySet());
SparseArray<UserBackupManagerService> serviceUsers = backupManagerService.getUserServices();
assertThat(serviceUsers.size()).isEqualTo(1);
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 3da2fd3b6a8e..8668a3cfa26c 100644
--- a/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java
+++ b/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java
@@ -22,6 +22,7 @@ import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
@@ -70,6 +71,7 @@ import java.io.File;
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
+import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
@@ -227,7 +229,9 @@ public class TrampolineTest {
trampoline.getBackupHandler().post(unlocked::open);
unlocked.block();
assertNull(trampoline.getUserService(NON_USER_SYSTEM));
- verify(mBackupManagerServiceMock, never()).startServiceForUser(NON_USER_SYSTEM);
+ //noinspection unchecked
+ verify(mBackupManagerServiceMock, never()).startServiceForUser(
+ eq(NON_USER_SYSTEM), any(Set.class));
}
@Test
@@ -752,17 +756,7 @@ public class TrampolineTest {
}
@Test
- public void getTransportWhitelist_forwarded() {
- when(mBackupManagerServiceMock.getTransportWhitelist()).thenReturn(TRANSPORTS);
-
- assertEquals(TRANSPORTS, mTrampoline.getTransportWhitelist());
- verify(mBackupManagerServiceMock).getTransportWhitelist();
- }
-
- @Test
public void updateTransportAttributesForUser_forwarded() {
- when(mBackupManagerServiceMock.getTransportWhitelist()).thenReturn(TRANSPORTS);
-
mTrampoline.updateTransportAttributesForUser(
mUserId,
TRANSPORT_COMPONENT_NAME,