From 28a9850a8da2dd80920f5f3ff78f54ef5eedcf32 Mon Sep 17 00:00:00 2001 From: Cassie Wang Date: Thu, 22 Jul 2021 18:55:19 +0000 Subject: [PATCH] Rename the user-to-execute-as to "targetUser". Aligns it with more common conventions of "target" meaning the potentially different user we'll be executing as. And keeping "calling" to refer to the original user who made the request. Bug: 194413082 Test: presubmit Change-Id: Id762ed7be8da783f7372841b68e22f088a889b97 --- .../appsearch/AppSearchManagerService.java | 273 +++++++++++------- 1 file changed, 162 insertions(+), 111 deletions(-) diff --git a/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java b/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java index db23a6dc3047f..6a4f4db5ef246 100644 --- a/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java +++ b/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java @@ -332,17 +332,20 @@ public class AppSearchManagerService extends SystemService { long totalLatencyStartTimeMillis = SystemClock.elapsedRealtime(); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { @AppSearchResult.ResultCode int statusCode = AppSearchResult.RESULT_OK; AppSearchUserInstance instance = null; int operationSuccessCount = 0; int operationFailureCount = 0; try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); List schemas = new ArrayList<>(schemaBundles.size()); for (int i = 0; i < schemaBundles.size(); i++) { schemas.add(new AppSearchSchema(schemaBundles.get(i))); @@ -359,7 +362,7 @@ public class AppSearchManagerService extends SystemService { } schemasVisibleToPackages.put(entry.getKey(), packageIdentifiers); } - instance = mAppSearchUserInstanceManager.getUserInstance(callingUser); + instance = mAppSearchUserInstanceManager.getUserInstance(targetUser); SetSchemaResponse setSchemaResponse = instance.getAppSearchImpl().setSchema( packageName, databaseName, @@ -418,15 +421,18 @@ public class AppSearchManagerService extends SystemService { Objects.requireNonNull(callback); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); AppSearchUserInstance instance = - mAppSearchUserInstanceManager.getUserInstance(callingUser); + mAppSearchUserInstanceManager.getUserInstance(targetUser); GetSchemaResponse response = instance.getAppSearchImpl().getSchema(packageName, databaseName); invokeCallbackOnResult( @@ -450,15 +456,18 @@ public class AppSearchManagerService extends SystemService { Objects.requireNonNull(callback); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); AppSearchUserInstance instance = - mAppSearchUserInstanceManager.getUserInstance(callingUser); + mAppSearchUserInstanceManager.getUserInstance(targetUser); List namespaces = instance.getAppSearchImpl().getNamespaces(packageName, databaseName); invokeCallbackOnResult( @@ -485,20 +494,23 @@ public class AppSearchManagerService extends SystemService { long totalLatencyStartTimeMillis = SystemClock.elapsedRealtime(); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { @AppSearchResult.ResultCode int statusCode = AppSearchResult.RESULT_OK; AppSearchUserInstance instance = null; int operationSuccessCount = 0; int operationFailureCount = 0; try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); AppSearchBatchResult.Builder resultBuilder = new AppSearchBatchResult.Builder<>(); - instance = mAppSearchUserInstanceManager.getUserInstance(callingUser); + instance = mAppSearchUserInstanceManager.getUserInstance(targetUser); for (int i = 0; i < documentBundles.size(); i++) { GenericDocument document = new GenericDocument(documentBundles.get(i)); try { @@ -571,20 +583,23 @@ public class AppSearchManagerService extends SystemService { long totalLatencyStartTimeMillis = SystemClock.elapsedRealtime(); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { @AppSearchResult.ResultCode int statusCode = AppSearchResult.RESULT_OK; AppSearchUserInstance instance = null; int operationSuccessCount = 0; int operationFailureCount = 0; try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); AppSearchBatchResult.Builder resultBuilder = new AppSearchBatchResult.Builder<>(); - instance = mAppSearchUserInstanceManager.getUserInstance(callingUser); + instance = mAppSearchUserInstanceManager.getUserInstance(targetUser); for (int i = 0; i < ids.size(); i++) { String id = ids.get(i); try { @@ -652,18 +667,21 @@ public class AppSearchManagerService extends SystemService { long totalLatencyStartTimeMillis = SystemClock.elapsedRealtime(); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { @AppSearchResult.ResultCode int statusCode = AppSearchResult.RESULT_OK; AppSearchUserInstance instance = null; int operationSuccessCount = 0; int operationFailureCount = 0; try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); - instance = mAppSearchUserInstanceManager.getUserInstance(callingUser); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); + instance = mAppSearchUserInstanceManager.getUserInstance(targetUser); SearchResultPage searchResultPage = instance.getAppSearchImpl().query( packageName, databaseName, @@ -718,18 +736,21 @@ public class AppSearchManagerService extends SystemService { long totalLatencyStartTimeMillis = SystemClock.elapsedRealtime(); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { @AppSearchResult.ResultCode int statusCode = AppSearchResult.RESULT_OK; AppSearchUserInstance instance = null; int operationSuccessCount = 0; int operationFailureCount = 0; try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); - instance = mAppSearchUserInstanceManager.getUserInstance(callingUser); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); + instance = mAppSearchUserInstanceManager.getUserInstance(targetUser); boolean callerHasSystemAccess = instance.getVisibilityStore().doesCallerHaveSystemAccess(packageName); @@ -783,17 +804,20 @@ public class AppSearchManagerService extends SystemService { Objects.requireNonNull(callback); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); // TODO(b/162450968) check nextPageToken is being advanced by the same uid as originally // opened it EXECUTOR.execute(() -> { try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); AppSearchUserInstance instance = - mAppSearchUserInstanceManager.getUserInstance(callingUser); + mAppSearchUserInstanceManager.getUserInstance(targetUser); SearchResultPage searchResultPage = instance.getAppSearchImpl().getNextPage(packageName, nextPageToken); invokeCallbackOnResult( @@ -812,15 +836,18 @@ public class AppSearchManagerService extends SystemService { Objects.requireNonNull(userHandle); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); AppSearchUserInstance instance = - mAppSearchUserInstanceManager.getUserInstance(callingUser); + mAppSearchUserInstanceManager.getUserInstance(targetUser); instance.getAppSearchImpl().invalidateNextPageToken(packageName, nextPageToken); } catch (Throwable t) { Log.e(TAG, "Unable to invalidate the query page token", t); @@ -846,15 +873,18 @@ public class AppSearchManagerService extends SystemService { Objects.requireNonNull(callback); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); AppSearchUserInstance instance = - mAppSearchUserInstanceManager.getUserInstance(callingUser); + mAppSearchUserInstanceManager.getUserInstance(targetUser); // we don't need to append the file. The file is always brand new. try (DataOutputStream outputStream = new DataOutputStream( new FileOutputStream(fileDescriptor.getFileDescriptor()))) { @@ -895,15 +925,18 @@ public class AppSearchManagerService extends SystemService { Objects.requireNonNull(callback); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); AppSearchUserInstance instance = - mAppSearchUserInstanceManager.getUserInstance(callingUser); + mAppSearchUserInstanceManager.getUserInstance(targetUser); GenericDocument document; ArrayList migrationFailureBundles = new ArrayList<>(); @@ -957,15 +990,18 @@ public class AppSearchManagerService extends SystemService { Objects.requireNonNull(callback); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); AppSearchUserInstance instance = - mAppSearchUserInstanceManager.getUserInstance(callingUser); + mAppSearchUserInstanceManager.getUserInstance(targetUser); if (systemUsage && !instance.getVisibilityStore() @@ -1004,20 +1040,23 @@ public class AppSearchManagerService extends SystemService { long totalLatencyStartTimeMillis = SystemClock.elapsedRealtime(); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { @AppSearchResult.ResultCode int statusCode = AppSearchResult.RESULT_OK; AppSearchUserInstance instance = null; int operationSuccessCount = 0; int operationFailureCount = 0; try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); AppSearchBatchResult.Builder resultBuilder = new AppSearchBatchResult.Builder<>(); - instance = mAppSearchUserInstanceManager.getUserInstance(callingUser); + instance = mAppSearchUserInstanceManager.getUserInstance(targetUser); for (int i = 0; i < ids.size(); i++) { String id = ids.get(i); try { @@ -1090,18 +1129,21 @@ public class AppSearchManagerService extends SystemService { long totalLatencyStartTimeMillis = SystemClock.elapsedRealtime(); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { @AppSearchResult.ResultCode int statusCode = AppSearchResult.RESULT_OK; AppSearchUserInstance instance = null; int operationSuccessCount = 0; int operationFailureCount = 0; try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); - instance = mAppSearchUserInstanceManager.getUserInstance(callingUser); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); + instance = mAppSearchUserInstanceManager.getUserInstance(targetUser); instance.getAppSearchImpl().removeByQuery( packageName, databaseName, @@ -1154,15 +1196,18 @@ public class AppSearchManagerService extends SystemService { Objects.requireNonNull(callback); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); AppSearchUserInstance instance = - mAppSearchUserInstanceManager.getUserInstance(callingUser); + mAppSearchUserInstanceManager.getUserInstance(targetUser); StorageInfo storageInfo = instance.getAppSearchImpl() .getStorageInfoForDatabase(packageName, databaseName); Bundle storageInfoBundle = storageInfo.getBundle(); @@ -1184,18 +1229,21 @@ public class AppSearchManagerService extends SystemService { long totalLatencyStartTimeMillis = SystemClock.elapsedRealtime(); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { @AppSearchResult.ResultCode int statusCode = AppSearchResult.RESULT_OK; AppSearchUserInstance instance = null; int operationSuccessCount = 0; int operationFailureCount = 0; try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); - instance = mAppSearchUserInstanceManager.getUserInstance(callingUser); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); + instance = mAppSearchUserInstanceManager.getUserInstance(targetUser); instance.getAppSearchImpl().persistToDisk(PersistType.Code.FULL); ++operationSuccessCount; } catch (Throwable t) { @@ -1236,7 +1284,7 @@ public class AppSearchManagerService extends SystemService { long totalLatencyStartTimeMillis = SystemClock.elapsedRealtime(); int callingUid = Binder.getCallingUid(); - UserHandle callingUser = handleIncomingUser(userHandle, callingUid); + UserHandle targetUser = handleIncomingUser(userHandle, callingUid); EXECUTOR.execute(() -> { @AppSearchResult.ResultCode int statusCode = AppSearchResult.RESULT_OK; @@ -1244,12 +1292,15 @@ public class AppSearchManagerService extends SystemService { int operationSuccessCount = 0; int operationFailureCount = 0; try { - Context userContext = mContext.createContextAsUser(callingUser, /*flags=*/ 0); - verifyUserUnlocked(callingUser); - verifyCallingPackage(userContext, callingUser, callingUid, packageName); - verifyNotInstantApp(userContext, packageName); + Context targetUserContext = mContext.createContextAsUser(targetUser, + /*flags=*/ 0); + verifyUserUnlocked(targetUser); + // TODO(b/193902620): Pass in the callingUser and not the targetUser. + verifyCallingPackage(targetUserContext, targetUser, callingUid, packageName); + // TODO(b/194939218): Pass in the callingUser and not the targetUser. + verifyNotInstantApp(targetUserContext, packageName); instance = mAppSearchUserInstanceManager.getOrCreateUserInstance( - userContext, callingUser, AppSearchConfig.getInstance(EXECUTOR)); + targetUserContext, targetUser, AppSearchConfig.getInstance(EXECUTOR)); ++operationSuccessCount; invokeCallbackOnResult(callback, AppSearchResult.newSuccessfulResult(null)); } catch (Throwable t) { @@ -1354,26 +1405,26 @@ public class AppSearchManagerService extends SystemService { /** * Helper for dealing with incoming user arguments to system service calls. * - * @param requestedUser The user which the caller is requesting to execute as. + * @param targetUserHandle The user which the caller is requesting to execute as. * @param callingUid The actual uid of the caller as determined by Binder. * @return the user handle that the call should run as. Will always be a concrete user. */ @NonNull - private UserHandle handleIncomingUser(@NonNull UserHandle requestedUser, int callingUid) { - UserHandle callingUser = UserHandle.getUserHandleForUid(callingUid); - if (callingUser.equals(requestedUser)) { - return requestedUser; + private UserHandle handleIncomingUser(@NonNull UserHandle targetUserHandle, int callingUid) { + UserHandle callingUserHandle = UserHandle.getUserHandleForUid(callingUid); + if (callingUserHandle.equals(targetUserHandle)) { + return targetUserHandle; } // Duplicates UserController#ensureNotSpecialUser - if (requestedUser.getIdentifier() < 0) { + if (targetUserHandle.getIdentifier() < 0) { throw new IllegalArgumentException( - "Call does not support special user " + requestedUser); + "Call does not support special user " + targetUserHandle); } throw new SecurityException( - "Requested user, " + requestedUser + ", is not the same as the calling user, " - + callingUser + "."); + "Requested user, " + targetUserHandle + ", is not the same as the calling user, " + + callingUserHandle + "."); } /**