Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 87389006 authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Automerger Merge Worker
Browse files

Merge "Collect Uri grants for startActivities()." into rvc-dev am: fe1d660c am: c40369b0

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11932141

Change-Id: I50a1ea8fe3afe21ee5c1bff3156080f300b98cf0
parents 88d687b6 c40369b0
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
import com.android.server.am.ActivityManagerService;
import com.android.server.am.PendingIntentRecord;
import com.android.server.uri.NeededUriGrants;
import com.android.server.wm.ActivityStackSupervisor.PendingActivityLaunch;
import com.android.server.wm.ActivityStarter.DefaultFactory;
import com.android.server.wm.ActivityStarter.Factory;
@@ -402,6 +403,7 @@ public class ActivityStartController {
            // potentially acquire activity manager lock that leads to deadlock.
            for (int i = 0; i < intents.length; i++) {
                Intent intent = intents[i];
                NeededUriGrants intentGrants = null;

                // Refuse possible leaked file descriptors.
                if (intent.hasFileDescriptors()) {
@@ -418,6 +420,14 @@ public class ActivityStartController {
                        0 /* startFlags */, null /* profilerInfo */, userId, filterCallingUid);
                aInfo = mService.mAmInternal.getActivityInfoForUser(aInfo, userId);

                // Carefully collect grants without holding lock
                if (aInfo != null) {
                    intentGrants = mSupervisor.mService.mUgmInternal
                            .checkGrantUriPermissionFromIntent(intent, filterCallingUid,
                                    aInfo.applicationInfo.packageName,
                                    UserHandle.getUserId(aInfo.applicationInfo.uid));
                }

                if (aInfo != null) {
                    if ((aInfo.applicationInfo.privateFlags
                            & ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE) != 0) {
@@ -433,6 +443,7 @@ public class ActivityStartController {
                        ? options
                        : null;
                starters[i] = obtainStarter(intent, reason)
                        .setIntentGrants(intentGrants)
                        .setCaller(caller)
                        .setResolvedType(resolvedTypes[i])
                        .setActivityInfo(aInfo)
+5 −0
Original line number Diff line number Diff line
@@ -2638,6 +2638,11 @@ class ActivityStarter {
        return mRequest.intent;
    }

    ActivityStarter setIntentGrants(NeededUriGrants intentGrants) {
        mRequest.intentGrants = intentGrants;
        return this;
    }

    ActivityStarter setReason(String reason) {
        mRequest.reason = reason;
        return this;