diff options
author | kholoud mohamed <kholoudm@google.com> | 2020-05-07 14:52:27 +0100 |
---|---|---|
committer | Kholoud Mohamed <kholoudm@google.com> | 2020-05-15 11:01:39 +0000 |
commit | 087391049e337ac24089954398b5d71297732c4d (patch) | |
tree | ad33227995f0c6a697ab19b75cdb3e9da3a0bd5a /services/robotests | |
parent | 54dd86ac12b6d812c792da14160eb2ab7327aa45 (diff) |
Kill app if cross profile app op gets revoked
Kill the app in both profiles if user/admin revokes
the cross profile app op permission, this is to ensure
that any cross profile bound services gets unbound as
soon as the app op is revoked.
Fixes: 154693902
Test: atest ManagedProfileCrossProfileTest
Test: atest FrameworksServicesTests:com.android.server.pm.CrossProfileAppsServiceImplTest
Test: atest CrossProfileAppsServiceImplRoboTest
Change-Id: Iaa3b9196468149c1cec51e9101989f1877374cc5
Diffstat (limited to 'services/robotests')
-rw-r--r-- | services/robotests/src/com/android/server/pm/CrossProfileAppsServiceImplRoboTest.java | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/services/robotests/src/com/android/server/pm/CrossProfileAppsServiceImplRoboTest.java b/services/robotests/src/com/android/server/pm/CrossProfileAppsServiceImplRoboTest.java index f8d197acf883..d78dad55e181 100644 --- a/services/robotests/src/com/android/server/pm/CrossProfileAppsServiceImplRoboTest.java +++ b/services/robotests/src/com/android/server/pm/CrossProfileAppsServiceImplRoboTest.java @@ -46,6 +46,7 @@ import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; +import android.content.pm.PermissionInfo; import android.content.pm.ResolveInfo; import android.os.Process; import android.os.UserHandle; @@ -106,6 +107,7 @@ public class CrossProfileAppsServiceImplRoboTest { new CrossProfileAppsServiceImpl(mContext, mInjector); private final Map<UserHandle, Set<Intent>> mSentUserBroadcasts = new HashMap<>(); private final Map<Integer, List<ApplicationInfo>> installedApplications = new HashMap<>(); + private final Set<Integer> mKilledUids = new HashSet<>(); @Mock private PackageManagerInternal mPackageManagerInternal; @Mock private IPackageManager mIPackageManager; @@ -389,6 +391,33 @@ public class CrossProfileAppsServiceImplRoboTest { } @Test + public void setInteractAcrossProfilesAppOp_toAllowed_doesNotKillApp() { + mCrossProfileAppsServiceImpl.setInteractAcrossProfilesAppOp( + CROSS_PROFILE_APP_PACKAGE_NAME, MODE_ALLOWED); + assertThat(mKilledUids).isEmpty(); + } + + @Test + public void setInteractAcrossProfilesAppOp_toDisallowed_killsAppsInBothProfiles() { + shadowOf(mPackageManager).addPermissionInfo(createCrossProfilesPermissionInfo()); + mCrossProfileAppsServiceImpl.setInteractAcrossProfilesAppOp( + CROSS_PROFILE_APP_PACKAGE_NAME, MODE_ALLOWED); + + mCrossProfileAppsServiceImpl.setInteractAcrossProfilesAppOp( + CROSS_PROFILE_APP_PACKAGE_NAME, MODE_DEFAULT); + + assertThat(mKilledUids).contains(WORK_PROFILE_UID); + assertThat(mKilledUids).contains(PERSONAL_PROFILE_UID); + } + + private PermissionInfo createCrossProfilesPermissionInfo() { + PermissionInfo permissionInfo = new PermissionInfo(); + permissionInfo.name = Manifest.permission.INTERACT_ACROSS_PROFILES; + permissionInfo.protectionLevel = PermissionInfo.PROTECTION_FLAG_APPOP; + return permissionInfo; + } + + @Test public void canConfigureInteractAcrossProfiles_packageNotInstalledInProfile_returnsFalse() { mockUninstallCrossProfileAppFromWorkProfile(); assertThat(mCrossProfileAppsServiceImpl @@ -678,5 +707,10 @@ public class CrossProfileAppsServiceImplRoboTest { // ShadowActivityThread with Robolectric. This method is currently not supported there. return mContext.checkPermission(permission, Process.myPid(), uid); } + + @Override + public void killUid(String packageName, int uid) { + mKilledUids.add(uid); + } } } |