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

Commit 33598e2d authored by Jahdiel Alvarez's avatar Jahdiel Alvarez Committed by Android (Google) Code Review
Browse files

Merge "Caching permission check results in ContentProvider#applyBatch" into main

parents 2e58697d d734fa62
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ import android.os.storage.StorageManager;
import android.permission.PermissionCheckerManager;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
import android.util.SparseBooleanArray;

@@ -486,6 +487,8 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall
            validateIncomingAuthority(authority);
            int numOperations = operations.size();
            final int[] userIds = new int[numOperations];
            final ArraySet<String> readPermissions = new ArraySet<String>();
            final ArraySet<String> writePermissions = new ArraySet<String>();
            for (int i = 0; i < numOperations; i++) {
                ContentProviderOperation operation = operations.get(i);
                Uri uri = operation.getUri();
@@ -499,17 +502,19 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall
                }
                final AttributionSource accessAttributionSource =
                        attributionSource;
                if (operation.isReadOperation()) {
                if (operation.isReadOperation() && !readPermissions.contains(uri.toString())) {
                    if (enforceReadPermission(accessAttributionSource, uri)
                            != PermissionChecker.PERMISSION_GRANTED) {
                        throw new OperationApplicationException("App op not allowed", 0);
                    }
                    readPermissions.add(uri.toString());
                }
                if (operation.isWriteOperation()) {
                if (operation.isWriteOperation() && !writePermissions.contains(uri.toString())) {
                    if (enforceWritePermission(accessAttributionSource, uri)
                            != PermissionChecker.PERMISSION_GRANTED) {
                        throw new OperationApplicationException("App op not allowed", 0);
                    }
                    writePermissions.add(uri.toString());
                }
            }
            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "applyBatch: ", authority);