Merge "Move transport whitelist to Trampoline"
This commit is contained in:
committed by
Android (Google) Code Review
commit
ce725e3019
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
@@ -751,18 +755,8 @@ public class TrampolineTest {
|
||||
verify(mBackupManagerServiceMock).listAllTransportComponents(mUserId);
|
||||
}
|
||||
|
||||
@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,
|
||||
|
||||
Reference in New Issue
Block a user