Review Changes for Media CP Redirection CL

This CL is in continuation to ag/16214441 CL and takes care of few review comments which were pending from the media content provider redirection CL.

Bug: 202035750
Test: atest CtsAppCloningHostTest
Change-Id: I408f985d257b03faef9b934acb43dd5c4cbdb508
This commit is contained in:
Himanshu Dagar
2022-01-21 21:08:15 +00:00
parent e9605c6905
commit 9c8f641254
2 changed files with 15 additions and 25 deletions

View File

@@ -18,6 +18,7 @@ package android.content;
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
import static android.os.Process.myUserHandle;
import static android.os.Trace.TRACE_TAG_DATABASE;
import android.annotation.NonNull;
@@ -738,7 +739,7 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall
}
boolean checkUser(int pid, int uid, Context context) {
int callingUserId = UserHandle.getUserId(uid);
final int callingUserId = UserHandle.getUserId(uid);
if (callingUserId == context.getUserId() || mSingleUser) {
return true;
@@ -765,8 +766,8 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall
if (um != null && um.isCloneProfile()) {
UserHandle parent = um.getProfileParent(callingUser);
if (parent != null && parent.equals(context.getUser())) {
mUsersRedirectedToOwner.put(callingUser.getIdentifier(), true);
if (parent != null && parent.equals(myUserHandle())) {
mUsersRedirectedToOwner.put(callingUserId, true);
return true;
}
}
@@ -774,7 +775,7 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall
// ignore
}
mUsersRedirectedToOwner.put(UserHandle.getUserId(uid), false);
mUsersRedirectedToOwner.put(callingUserId, false);
return false;
}

View File

@@ -1046,6 +1046,16 @@ public class ContentProviderHelper {
userId = UserHandle.getCallingUserId();
}
if (isAuthorityRedirectedForCloneProfile(authority)) {
UserManagerInternal umInternal = LocalServices.getService(UserManagerInternal.class);
UserInfo userInfo = umInternal.getUserInfo(userId);
if (userInfo != null && userInfo.isCloneProfile()) {
userId = umInternal.getProfileParentId(userId);
checkUser = false;
}
}
ProviderInfo cpi = null;
try {
cpi = AppGlobals.getPackageManager().resolveContentProvider(authority,
@@ -1055,17 +1065,6 @@ public class ContentProviderHelper {
| PackageManager.MATCH_DIRECT_BOOT_AWARE
| PackageManager.MATCH_DIRECT_BOOT_UNAWARE,
userId);
if (cpi == null && isAuthorityRedirectedForCloneProfile(authority)) {
// This might be a provider that's running only in the system user that's
// also serving clone profiles
cpi = AppGlobals.getPackageManager().resolveContentProvider(authority,
ActivityManagerService.STOCK_PM_FLAGS
| PackageManager.GET_URI_PERMISSION_PATTERNS
| PackageManager.MATCH_DISABLED_COMPONENTS
| PackageManager.MATCH_DIRECT_BOOT_AWARE
| PackageManager.MATCH_DIRECT_BOOT_UNAWARE,
UserHandle.USER_SYSTEM);
}
} catch (RemoteException ignored) {
}
if (cpi == null) {
@@ -1073,16 +1072,6 @@ public class ContentProviderHelper {
+ "; expected to find a valid ContentProvider for this authority";
}
if (isAuthorityRedirectedForCloneProfile(authority)) {
UserManagerInternal umInternal = LocalServices.getService(UserManagerInternal.class);
UserInfo userInfo = umInternal.getUserInfo(userId);
if (userInfo != null && userInfo.isCloneProfile()) {
userId = umInternal.getProfileParentId(userId);
checkUser = false;
}
}
final int callingPid = Binder.getCallingPid();
ProcessRecord r;
final String appName;