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

Commit 72d558ec authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Revoke drag and drop related grants on client crash"

parents af9cb7e6 87c60d66
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
package android.view;

import android.app.Activity;
import android.app.ActivityManagerNative;
import android.os.Binder;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
@@ -54,7 +54,7 @@ public final class DragAndDropPermissions implements Parcelable {

    private final IDragAndDropPermissions mDragAndDropPermissions;

    private IBinder mPermissionOwnerToken;
    private IBinder mTransientToken;

    /**
     * Create a new {@link DragAndDropPermissions} object to control the access permissions for
@@ -98,9 +98,8 @@ public final class DragAndDropPermissions implements Parcelable {
     */
    public boolean takeTransient() {
        try {
            mPermissionOwnerToken = ActivityManagerNative.getDefault().
                    newUriPermissionOwner("drop");
            mDragAndDropPermissions.takeTransient(mPermissionOwnerToken);
            mTransientToken = new Binder();
            mDragAndDropPermissions.takeTransient(mTransientToken);
        } catch (RemoteException e) {
            return false;
        }
@@ -113,7 +112,7 @@ public final class DragAndDropPermissions implements Parcelable {
    public void release() {
        try {
            mDragAndDropPermissions.release();
            mPermissionOwnerToken = null;
            mTransientToken = null;
        } catch (RemoteException e) {
        }
    }
@@ -139,11 +138,11 @@ public final class DragAndDropPermissions implements Parcelable {
    @Override
    public void writeToParcel(Parcel destination, int flags) {
        destination.writeStrongInterface(mDragAndDropPermissions);
        destination.writeStrongBinder(mPermissionOwnerToken);
        destination.writeStrongBinder(mTransientToken);
    }

    private DragAndDropPermissions(Parcel in) {
        mDragAndDropPermissions = IDragAndDropPermissions.Stub.asInterface(in.readStrongBinder());
        mPermissionOwnerToken = in.readStrongBinder();
        mTransientToken = in.readStrongBinder();
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -24,6 +24,6 @@ import android.os.IBinder;
 */
interface IDragAndDropPermissions {
    void take(IBinder activityToken);
    void takeTransient(IBinder permissionOwnerToken);
    void takeTransient(IBinder transientToken);
    void release();
}
+7 −4
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ class DragAndDropPermissionsHandler extends IDragAndDropPermissions.Stub

    private IBinder mActivityToken = null;
    private IBinder mPermissionOwnerToken = null;
    private IBinder mTransientToken = null;

    DragAndDropPermissionsHandler(ClipData clipData, int sourceUid, String targetPackage, int mode,
                                  int sourceUserId, int targetUserId) {
@@ -80,12 +81,13 @@ class DragAndDropPermissionsHandler extends IDragAndDropPermissions.Stub
    }

    @Override
    public void takeTransient(IBinder permissionOwnerToken) throws RemoteException {
    public void takeTransient(IBinder transientToken) throws RemoteException {
        if (mActivityToken != null || mPermissionOwnerToken != null) {
            return;
        }
        mPermissionOwnerToken = permissionOwnerToken;
        mPermissionOwnerToken.linkToDeath(this, 0);
        mPermissionOwnerToken = ActivityManagerNative.getDefault().newUriPermissionOwner("drop");
        mTransientToken = transientToken;
        mTransientToken.linkToDeath(this, 0);

        doTake(mPermissionOwnerToken);
    }
@@ -109,8 +111,9 @@ class DragAndDropPermissionsHandler extends IDragAndDropPermissions.Stub
            }
        } else {
            permissionOwner = mPermissionOwnerToken;
            mPermissionOwnerToken.unlinkToDeath(this, 0);
            mPermissionOwnerToken = null;
            mTransientToken.unlinkToDeath(this, 0);
            mTransientToken = null;
        }

        for (int i = 0; i < mUris.size(); ++i) {