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

Commit bc454980 authored by Hao Ke's avatar Hao Ke Committed by Android (Google) Code Review
Browse files

Merge "Do not block intetn in a top level ClipData from being launched" into main

parents 87808096 965db179
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -221,6 +221,12 @@ public class ClipData implements Parcelable {
        // if the data is obtained from {@link #copyForTransferWithActivityInfo}
        private ActivityInfo mActivityInfo;

        private boolean mTokenVerificationEnabled;

        void setTokenVerificationEnabled() {
            mTokenVerificationEnabled = true;
        }

        /**
         * A builder for a ClipData Item.
         */
@@ -398,7 +404,9 @@ public class ClipData implements Parcelable {
         * Retrieve the raw Intent contained in this Item.
         */
        public Intent getIntent() {
            if (mTokenVerificationEnabled) {
                Intent.maybeMarkAsMissingCreatorToken(mIntent);
            }
            return mIntent;
        }

@@ -1353,6 +1361,12 @@ public class ClipData implements Parcelable {
        }
    }

    void setTokenVerificationEnabled() {
        for (int i = 0; i < mItems.size(); ++i) {
            mItems.get(i).setTokenVerificationEnabled();
        }
    }

    @Override
    public int describeContents() {
        return 0;
+6 −0
Original line number Diff line number Diff line
@@ -12506,6 +12506,9 @@ public class Intent implements Parcelable, Cloneable {
        if (intent.mExtras != null) {
            intent.mExtras.enableTokenVerification();
        }
        if (intent.mClipData != null) {
            intent.mClipData.setTokenVerificationEnabled();
        }
    };
    /** @hide */
@@ -12517,6 +12520,9 @@ public class Intent implements Parcelable, Cloneable {
            // mark trusted creator token present.
            mExtras.enableTokenVerification();
        }
        if (mClipData != null) {
            mClipData.setTokenVerificationEnabled();
        }
    }
    /** @hide */
+12 −0
Original line number Diff line number Diff line
@@ -1454,6 +1454,18 @@ public class ActivityManagerServiceTest {
        assertThat(tokenForFullIntent.getKeyFields()).isEqualTo(tokenForCloneIntent.getKeyFields());
    }

    @Test
    public void testCanLaunchClipDataIntent() {
        ClipData clipData = ClipData.newIntent("test", new Intent("test"));
        clipData.prepareToLeaveProcess(true);
        // skip mimicking sending clipData to another app because it will just be parceled and
        // un-parceled.
        Intent intent = clipData.getItemAt(0).getIntent();
        // default intent redirect protection won't block an intent nested in a top level ClipData.
        assertThat(intent.getExtendedFlags()
                & Intent.EXTENDED_FLAG_MISSING_CREATOR_OR_INVALID_TOKEN).isEqualTo(0);
    }

    private void verifyWaitingForNetworkStateUpdate(long curProcStateSeq,
            long lastNetworkUpdatedProcStateSeq,
            final long procStateSeqToWait, boolean expectWait) throws Exception {