Merge "Revert "Revert "Use PM#isSameApp instead of getPackageUidAsUser.""" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
2ab33f7284
@@ -764,6 +764,7 @@ public abstract class PackageManager {
|
|||||||
MATCH_DISABLED_UNTIL_USED_COMPONENTS,
|
MATCH_DISABLED_UNTIL_USED_COMPONENTS,
|
||||||
MATCH_SYSTEM_ONLY,
|
MATCH_SYSTEM_ONLY,
|
||||||
MATCH_FACTORY_ONLY,
|
MATCH_FACTORY_ONLY,
|
||||||
|
MATCH_ANY_USER,
|
||||||
MATCH_DEBUG_TRIAGED_MISSING,
|
MATCH_DEBUG_TRIAGED_MISSING,
|
||||||
MATCH_INSTANT,
|
MATCH_INSTANT,
|
||||||
MATCH_APEX,
|
MATCH_APEX,
|
||||||
|
|||||||
@@ -490,7 +490,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
|
|||||||
mMainHandler, context,
|
mMainHandler, context,
|
||||||
new PolicyWarningUIController.NotificationController(context));
|
new PolicyWarningUIController.NotificationController(context));
|
||||||
mSecurityPolicy = new AccessibilitySecurityPolicy(policyWarningUIController, mContext,
|
mSecurityPolicy = new AccessibilitySecurityPolicy(policyWarningUIController, mContext,
|
||||||
this);
|
this, LocalServices.getService(PackageManagerInternal.class));
|
||||||
mA11yWindowManager = new AccessibilityWindowManager(mLock, mMainHandler,
|
mA11yWindowManager = new AccessibilityWindowManager(mLock, mMainHandler,
|
||||||
mWindowManagerService, this, mSecurityPolicy, this, mTraceManager);
|
mWindowManagerService, this, mSecurityPolicy, this, mTraceManager);
|
||||||
mA11yDisplayListener = new AccessibilityDisplayListener(mContext, mMainHandler);
|
mA11yDisplayListener = new AccessibilityDisplayListener(mContext, mMainHandler);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import android.appwidget.AppWidgetManagerInternal;
|
|||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.pm.PackageManagerInternal;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.content.pm.ServiceInfo;
|
import android.content.pm.ServiceInfo;
|
||||||
import android.content.pm.UserInfo;
|
import android.content.pm.UserInfo;
|
||||||
@@ -99,6 +100,7 @@ public class AccessibilitySecurityPolicy {
|
|||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final PackageManager mPackageManager;
|
private final PackageManager mPackageManager;
|
||||||
|
private final PackageManagerInternal mPackageManagerInternal;
|
||||||
private final UserManager mUserManager;
|
private final UserManager mUserManager;
|
||||||
private final AppOpsManager mAppOpsManager;
|
private final AppOpsManager mAppOpsManager;
|
||||||
private final AccessibilityUserManager mAccessibilityUserManager;
|
private final AccessibilityUserManager mAccessibilityUserManager;
|
||||||
@@ -116,10 +118,12 @@ public class AccessibilitySecurityPolicy {
|
|||||||
*/
|
*/
|
||||||
public AccessibilitySecurityPolicy(PolicyWarningUIController policyWarningUIController,
|
public AccessibilitySecurityPolicy(PolicyWarningUIController policyWarningUIController,
|
||||||
@NonNull Context context,
|
@NonNull Context context,
|
||||||
@NonNull AccessibilityUserManager a11yUserManager) {
|
@NonNull AccessibilityUserManager a11yUserManager,
|
||||||
|
@NonNull PackageManagerInternal packageManagerInternal) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mAccessibilityUserManager = a11yUserManager;
|
mAccessibilityUserManager = a11yUserManager;
|
||||||
mPackageManager = mContext.getPackageManager();
|
mPackageManager = mContext.getPackageManager();
|
||||||
|
mPackageManagerInternal = packageManagerInternal;
|
||||||
mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
|
mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
|
||||||
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
|
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
|
||||||
mPolicyWarningUIController = policyWarningUIController;
|
mPolicyWarningUIController = policyWarningUIController;
|
||||||
@@ -515,10 +519,8 @@ public class AccessibilitySecurityPolicy {
|
|||||||
try {
|
try {
|
||||||
// Since we treat calls from a profile as if made by its parent, using
|
// Since we treat calls from a profile as if made by its parent, using
|
||||||
// MATCH_ANY_USER to query the uid of the given package name.
|
// MATCH_ANY_USER to query the uid of the given package name.
|
||||||
return uid == mPackageManager.getPackageUidAsUser(
|
return mPackageManagerInternal.isSameApp(packageName, PackageManager.MATCH_ANY_USER,
|
||||||
packageName, PackageManager.MATCH_ANY_USER, UserHandle.getUserId(uid));
|
uid, UserHandle.getUserId(uid));
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
|
||||||
return false;
|
|
||||||
} finally {
|
} finally {
|
||||||
Binder.restoreCallingIdentity(token);
|
Binder.restoreCallingIdentity(token);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,17 +153,25 @@ public abstract class PackageManagerInternal {
|
|||||||
public abstract boolean isPermissionsReviewRequired(String packageName, int userId);
|
public abstract boolean isPermissionsReviewRequired(String packageName, int userId);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Variant of {@link #isSameApp(String, long, int, int)} with no flags.
|
||||||
|
* @see #isSameApp(String, long, int, int)
|
||||||
|
*/
|
||||||
|
public abstract boolean isSameApp(String packageName, int callingUid, int userId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets whether a given package name belongs to the calling uid. If the calling uid is an
|
* Gets whether a given package name belongs to the calling uid. If the calling uid is an
|
||||||
* {@link Process#isSdkSandboxUid(int) sdk sandbox uid}, checks whether the package name is
|
* {@link Process#isSdkSandboxUid(int) sdk sandbox uid}, checks whether the package name is
|
||||||
* equal to {@link PackageManager#getSdkSandboxPackageName()}.
|
* equal to {@link PackageManager#getSdkSandboxPackageName()}.
|
||||||
*
|
*
|
||||||
* @param packageName The package name to check.
|
* @param packageName The package name to check.
|
||||||
|
* @param flags The PackageInfoFlagsBits flags to use during uid lookup.
|
||||||
* @param callingUid The calling uid.
|
* @param callingUid The calling uid.
|
||||||
* @param userId The user under which to check.
|
* @param userId The user under which to check.
|
||||||
* @return True if the package name belongs to the calling uid.
|
* @return True if the package name belongs to the calling uid.
|
||||||
*/
|
*/
|
||||||
public abstract boolean isSameApp(String packageName, int callingUid, int userId);
|
public abstract boolean isSameApp(String packageName,
|
||||||
|
@PackageManager.PackageInfoFlagsBits long flags, int callingUid, int userId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve all of the information we know about a particular package/application.
|
* Retrieve all of the information we know about a particular package/application.
|
||||||
|
|||||||
@@ -6843,6 +6843,12 @@ public class PackageManagerService implements PackageSender, TestUtilityService
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSameApp(@Nullable String packageName, int callingUid, int userId) {
|
public boolean isSameApp(@Nullable String packageName, int callingUid, int userId) {
|
||||||
|
return isSameApp(packageName, /*flags=*/0, callingUid, userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSameApp(@Nullable String packageName,
|
||||||
|
@PackageManager.PackageInfoFlagsBits long flags, int callingUid, int userId) {
|
||||||
if (packageName == null) {
|
if (packageName == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -6851,7 +6857,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
|
|||||||
return packageName.equals(mRequiredSdkSandboxPackage);
|
return packageName.equals(mRequiredSdkSandboxPackage);
|
||||||
}
|
}
|
||||||
Computer snapshot = snapshot();
|
Computer snapshot = snapshot();
|
||||||
int uid = snapshot.getPackageUid(packageName, 0, userId);
|
int uid = snapshot.getPackageUid(packageName, flags, userId);
|
||||||
return UserHandle.isSameApp(uid, callingUid);
|
return UserHandle.isSameApp(uid, callingUid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.server.accessibility;
|
package com.android.server.accessibility;
|
||||||
|
|
||||||
|
import static android.content.pm.PackageManager.MATCH_ANY_USER;
|
||||||
|
|
||||||
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
||||||
|
|
||||||
import static junit.framework.Assert.assertFalse;
|
import static junit.framework.Assert.assertFalse;
|
||||||
@@ -146,7 +148,7 @@ public class AccessibilitySecurityPolicyTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private PolicyWarningUIController mPolicyWarningUIController;
|
private PolicyWarningUIController mPolicyWarningUIController;
|
||||||
@Mock
|
@Mock
|
||||||
private PackageManagerInternal mPackageManagerInternal;
|
private PackageManagerInternal mMockPackageManagerInternal;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -158,7 +160,8 @@ public class AccessibilitySecurityPolicyTest {
|
|||||||
R.dimen.accessibility_focus_highlight_stroke_width, 1);
|
R.dimen.accessibility_focus_highlight_stroke_width, 1);
|
||||||
|
|
||||||
mA11ySecurityPolicy = new AccessibilitySecurityPolicy(
|
mA11ySecurityPolicy = new AccessibilitySecurityPolicy(
|
||||||
mPolicyWarningUIController, mContext, mMockA11yUserManager);
|
mPolicyWarningUIController, mContext, mMockA11yUserManager,
|
||||||
|
mMockPackageManagerInternal);
|
||||||
mA11ySecurityPolicy.setSendingNonA11yToolNotificationLocked(true);
|
mA11ySecurityPolicy.setSendingNonA11yToolNotificationLocked(true);
|
||||||
mA11ySecurityPolicy.setAccessibilityWindowManager(mMockA11yWindowManager);
|
mA11ySecurityPolicy.setAccessibilityWindowManager(mMockA11yWindowManager);
|
||||||
mA11ySecurityPolicy.setAppWidgetManager(mMockAppWidgetManager);
|
mA11ySecurityPolicy.setAppWidgetManager(mMockAppWidgetManager);
|
||||||
@@ -237,8 +240,9 @@ public class AccessibilitySecurityPolicyTest {
|
|||||||
@Test
|
@Test
|
||||||
public void resolveValidReportedPackage_uidAndPkgNameMatched_returnPkgName()
|
public void resolveValidReportedPackage_uidAndPkgNameMatched_returnPkgName()
|
||||||
throws PackageManager.NameNotFoundException {
|
throws PackageManager.NameNotFoundException {
|
||||||
when(mMockPackageManager.getPackageUidAsUser(PACKAGE_NAME,
|
when(mMockPackageManagerInternal.isSameApp(
|
||||||
PackageManager.MATCH_ANY_USER, TEST_USER_ID)).thenReturn(APP_UID);
|
PACKAGE_NAME, MATCH_ANY_USER, APP_UID, TEST_USER_ID))
|
||||||
|
.thenReturn(true);
|
||||||
|
|
||||||
assertEquals(mA11ySecurityPolicy.resolveValidReportedPackageLocked(
|
assertEquals(mA11ySecurityPolicy.resolveValidReportedPackageLocked(
|
||||||
PACKAGE_NAME, APP_UID, TEST_USER_ID, APP_PID),
|
PACKAGE_NAME, APP_UID, TEST_USER_ID, APP_PID),
|
||||||
@@ -257,8 +261,9 @@ public class AccessibilitySecurityPolicyTest {
|
|||||||
|
|
||||||
when(mMockAppWidgetManager.getHostedWidgetPackages(widgetHostUid))
|
when(mMockAppWidgetManager.getHostedWidgetPackages(widgetHostUid))
|
||||||
.thenReturn(widgetPackages);
|
.thenReturn(widgetPackages);
|
||||||
when(mMockPackageManager.getPackageUidAsUser(hostPackageName, TEST_USER_ID))
|
when(mMockPackageManagerInternal.isSameApp(
|
||||||
.thenReturn(widgetHostUid);
|
hostPackageName, MATCH_ANY_USER, widgetHostUid, TEST_USER_ID))
|
||||||
|
.thenReturn(true);
|
||||||
|
|
||||||
assertEquals(mA11ySecurityPolicy.resolveValidReportedPackageLocked(
|
assertEquals(mA11ySecurityPolicy.resolveValidReportedPackageLocked(
|
||||||
widgetPackageName, widgetHostUid, TEST_USER_ID, widgetHostPid),
|
widgetPackageName, widgetHostUid, TEST_USER_ID, widgetHostPid),
|
||||||
@@ -272,8 +277,9 @@ public class AccessibilitySecurityPolicyTest {
|
|||||||
final String[] uidPackages = {PACKAGE_NAME, PACKAGE_NAME2};
|
final String[] uidPackages = {PACKAGE_NAME, PACKAGE_NAME2};
|
||||||
when(mMockPackageManager.getPackagesForUid(APP_UID))
|
when(mMockPackageManager.getPackagesForUid(APP_UID))
|
||||||
.thenReturn(uidPackages);
|
.thenReturn(uidPackages);
|
||||||
when(mMockPackageManager.getPackageUidAsUser(invalidPackageName, TEST_USER_ID))
|
when(mMockPackageManagerInternal.isSameApp(
|
||||||
.thenThrow(PackageManager.NameNotFoundException.class);
|
invalidPackageName, MATCH_ANY_USER, APP_UID, TEST_USER_ID))
|
||||||
|
.thenReturn(false);
|
||||||
when(mMockAppWidgetManager.getHostedWidgetPackages(APP_UID))
|
when(mMockAppWidgetManager.getHostedWidgetPackages(APP_UID))
|
||||||
.thenReturn(new ArraySet<>());
|
.thenReturn(new ArraySet<>());
|
||||||
mContext.getTestablePermissions().setPermission(
|
mContext.getTestablePermissions().setPermission(
|
||||||
@@ -292,8 +298,9 @@ public class AccessibilitySecurityPolicyTest {
|
|||||||
final String[] uidPackages = {PACKAGE_NAME};
|
final String[] uidPackages = {PACKAGE_NAME};
|
||||||
when(mMockPackageManager.getPackagesForUid(APP_UID))
|
when(mMockPackageManager.getPackagesForUid(APP_UID))
|
||||||
.thenReturn(uidPackages);
|
.thenReturn(uidPackages);
|
||||||
when(mMockPackageManager.getPackageUidAsUser(wantedPackageName, TEST_USER_ID))
|
when(mMockPackageManagerInternal.isSameApp(
|
||||||
.thenReturn(wantedUid);
|
wantedPackageName, MATCH_ANY_USER, wantedUid, TEST_USER_ID))
|
||||||
|
.thenReturn(true);
|
||||||
when(mMockAppWidgetManager.getHostedWidgetPackages(APP_UID))
|
when(mMockAppWidgetManager.getHostedWidgetPackages(APP_UID))
|
||||||
.thenReturn(new ArraySet<>());
|
.thenReturn(new ArraySet<>());
|
||||||
mContext.getTestablePermissions().setPermission(
|
mContext.getTestablePermissions().setPermission(
|
||||||
@@ -312,8 +319,9 @@ public class AccessibilitySecurityPolicyTest {
|
|||||||
final String[] uidPackages = {PACKAGE_NAME};
|
final String[] uidPackages = {PACKAGE_NAME};
|
||||||
when(mMockPackageManager.getPackagesForUid(APP_UID))
|
when(mMockPackageManager.getPackagesForUid(APP_UID))
|
||||||
.thenReturn(uidPackages);
|
.thenReturn(uidPackages);
|
||||||
when(mMockPackageManager.getPackageUidAsUser(wantedPackageName, TEST_USER_ID))
|
when(mMockPackageManagerInternal.isSameApp(
|
||||||
.thenReturn(wantedUid);
|
wantedPackageName, MATCH_ANY_USER, wantedUid, TEST_USER_ID))
|
||||||
|
.thenReturn(true);
|
||||||
when(mMockAppWidgetManager.getHostedWidgetPackages(APP_UID))
|
when(mMockAppWidgetManager.getHostedWidgetPackages(APP_UID))
|
||||||
.thenReturn(new ArraySet<>());
|
.thenReturn(new ArraySet<>());
|
||||||
mContext.getTestablePermissions().setPermission(
|
mContext.getTestablePermissions().setPermission(
|
||||||
|
|||||||
Reference in New Issue
Block a user