Merge "Ensure DO/PO are also DA." into nyc-dev

am: aafff2f835

* commit 'aafff2f835ea7c6dd08cadea0d92dfa7288c8e09':
  Ensure DO/PO are also DA.
This commit is contained in:
Makoto Onuki
2016-02-18 18:51:14 +00:00
committed by android-build-merger
3 changed files with 37 additions and 4 deletions

View File

@@ -5396,6 +5396,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
}
synchronized (this) {
enforceCanSetDeviceOwnerLocked(userId);
if (getActiveAdminUncheckedLocked(admin, userId) == null) {
throw new IllegalArgumentException("Not active admin: " + admin);
}
// Shutting down backup manager service permanently.
long ident = mInjector.binderClearCallingIdentity();
@@ -5571,6 +5574,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
}
synchronized (this) {
enforceCanSetProfileOwnerLocked(userHandle);
if (getActiveAdminUncheckedLocked(who, userHandle) == null) {
throw new IllegalArgumentException("Not active admin: " + who);
}
mOwners.setProfileOwner(who, ownerName, userHandle);
mOwners.writeProfileOwner(userHandle);
return true;

View File

@@ -1668,7 +1668,12 @@ public class DevicePolicyManagerTest extends DpmTestBase {
// that the test user is not affiliated anymore.
dpm.clearProfileOwner(admin2);
final ComponentName admin = new ComponentName("test", "test");
markPackageAsInstalled(admin.getPackageName(), null, DpmMockContext.CALLER_USER_HANDLE);
setUpPackageManagerForFakeAdmin(admin, DpmMockContext.CALLER_UID,
/* enabledSetting =*/ PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
/* appTargetSdk = */ null, admin2);
dpm.setActiveAdmin(admin, /* refreshing =*/ true, DpmMockContext.CALLER_USER_HANDLE);
assertTrue(dpm.setProfileOwner(admin, "owner-name", DpmMockContext.CALLER_USER_HANDLE));
assertFalse(dpm.isAffiliatedUser());

View File

@@ -19,6 +19,7 @@ package com.android.server.devicepolicy;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@@ -96,12 +97,26 @@ public abstract class DpmTestBase extends AndroidTestCase {
protected void setUpPackageManagerForAdmin(ComponentName admin, int packageUid,
Integer enabledSetting, Integer appTargetSdk) throws Exception {
setUpPackageManagerForFakeAdmin(admin, packageUid, enabledSetting, appTargetSdk,
admin);
}
/**
* Set up a component in the mock package manager to be an active admin.
*
* @param admin ComponentName that's visible to the test code, which doesn't have to exist.
* @param copyFromAdmin package information for {@code admin} will be built based on this
* component's information.
*/
protected void setUpPackageManagerForFakeAdmin(ComponentName admin, int packageUid,
Integer enabledSetting, Integer appTargetSdk, ComponentName copyFromAdmin)
throws Exception {
// Set up getApplicationInfo().
final ApplicationInfo ai = DpmTestUtils.cloneParcelable(
mRealTestContext.getPackageManager().getApplicationInfo(
admin.getPackageName(),
copyFromAdmin.getPackageName(),
PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS));
ai.enabledSetting = enabledSetting == null
@@ -111,6 +126,8 @@ public abstract class DpmTestBase extends AndroidTestCase {
ai.targetSdkVersion = appTargetSdk;
}
ai.uid = packageUid;
ai.packageName = admin.getPackageName();
ai.name = admin.getClassName();
doReturn(ai).when(mMockContext.ipackageManager).getApplicationInfo(
eq(admin.getPackageName()),
@@ -120,7 +137,7 @@ public abstract class DpmTestBase extends AndroidTestCase {
// Set up queryBroadcastReceivers().
final Intent resolveIntent = new Intent();
resolveIntent.setComponent(admin);
resolveIntent.setComponent(copyFromAdmin);
final List<ResolveInfo> realResolveInfo =
mRealTestContext.getPackageManager().queryBroadcastReceivers(
resolveIntent,
@@ -132,7 +149,10 @@ public abstract class DpmTestBase extends AndroidTestCase {
realResolveInfo.set(0, DpmTestUtils.cloneParcelable(realResolveInfo.get(0)));
// We need to rewrite the UID in the activity info.
realResolveInfo.get(0).activityInfo.applicationInfo = ai;
final ActivityInfo aci = realResolveInfo.get(0).activityInfo;
aci.applicationInfo = ai;
aci.packageName = admin.getPackageName();
aci.name = admin.getClassName();
doReturn(realResolveInfo).when(mMockContext.packageManager).queryBroadcastReceiversAsUser(
MockUtils.checkIntentComponent(admin),