Merge "Allow recents component to launch non-exported activities" into pi-dev

This commit is contained in:
Winson Chung
2018-05-16 04:40:35 +00:00
committed by Android (Google) Code Review
3 changed files with 11 additions and 6 deletions

View File

@@ -1702,11 +1702,16 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
boolean checkStartAnyActivityPermission(Intent intent, ActivityInfo aInfo,
String resultWho, int requestCode, int callingPid, int callingUid,
String callingPackage, boolean ignoreTargetSecurity, ProcessRecord callerApp,
ActivityRecord resultRecord, ActivityStack resultStack) {
String callingPackage, boolean ignoreTargetSecurity, boolean launchingInTask,
ProcessRecord callerApp, ActivityRecord resultRecord, ActivityStack resultStack) {
final boolean isCallerRecents = mService.getRecentTasks() != null &&
mService.getRecentTasks().isCallerRecents(callingUid);
final int startAnyPerm = mService.checkPermission(START_ANY_ACTIVITY, callingPid,
callingUid);
if (startAnyPerm == PERMISSION_GRANTED) {
if (startAnyPerm == PERMISSION_GRANTED || (isCallerRecents && launchingInTask)) {
// If the caller has START_ANY_ACTIVITY, ignore all checks below. In addition, if the
// caller is the recents component and we are specifically starting an activity in an
// existing task, then also allow the activity to be fully relaunched.
return true;
}
final int componentRestriction = getComponentRestrictionForCallingPackage(

View File

@@ -713,7 +713,7 @@ class ActivityStarter {
boolean abort = !mSupervisor.checkStartAnyActivityPermission(intent, aInfo, resultWho,
requestCode, callingPid, callingUid, callingPackage, ignoreTargetSecurity,
callerApp, resultRecord, resultStack);
inTask != null, callerApp, resultRecord, resultStack);
abort |= !mService.mIntentFirewall.checkStartActivity(intent, callingUid,
callingPid, resolvedType, aInfo.applicationInfo);

View File

@@ -243,7 +243,7 @@ public class ActivityStarterTests extends ActivityTestsBase {
if (containsConditions(preconditions,PRECONDITION_CANNOT_START_ANY_ACTIVITY)) {
doReturn(false).when(service.mStackSupervisor).checkStartAnyActivityPermission(
any(), any(), any(), anyInt(), anyInt(), anyInt(), any(),
anyBoolean(), any(), any(), any());
anyBoolean(), anyBoolean(), any(), any(), any());
}
try {
@@ -302,7 +302,7 @@ public class ActivityStarterTests extends ActivityTestsBase {
// always allow test to start activity.
doReturn(true).when(mService.mStackSupervisor).checkStartAnyActivityPermission(
any(), any(), any(), anyInt(), anyInt(), anyInt(), any(),
anyBoolean(), any(), any(), any());
anyBoolean(), anyBoolean(), any(), any(), any());
// instrument the stack and task used.
final ActivityStack stack = mService.mStackSupervisor.getDefaultDisplay().createStack(