diff options
| author | 2020-03-19 21:41:57 -0600 | |
|---|---|---|
| committer | 2020-03-19 21:41:57 -0600 | |
| commit | ce8a353b8b5aaba5871e40feef6443fe8486a618 (patch) | |
| tree | 38694cba41e3f0ce5497d5c865978ae30fc5ca47 | |
| parent | c285c18e66cb49e042d6950f9e0f1b7d288c24e0 (diff) | |
Add missing symmetrical ContentResolver method.
We have a new ContentProvider.checkUriPermission() method, but we
forgot to add the symmetric ContentResolver.checkUriPermission() to
the public API, and a first-party developer helped identify this
oversight.
Bug: 151165313
Test: atest CtsContentTestCases:android.content.cts.ContentResolverTest
Change-Id: Ic5496b5a6fda14c25cb3752f5af2f71564d003ba
| -rwxr-xr-x | api/system-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/content/ContentProvider.java | 4 | ||||
| -rw-r--r-- | core/java/android/content/ContentResolver.java | 22 |
3 files changed, 26 insertions, 1 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index a0c0126a755a..7dd8136658a4 100755 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -1777,6 +1777,7 @@ package android.content { } public abstract class ContentResolver { + method public int checkUriPermission(@NonNull android.net.Uri, int, int); method @NonNull public static android.net.Uri decodeFromFile(@NonNull java.io.File); method @NonNull public static java.io.File encodeToFile(@NonNull android.net.Uri); method @Nullable @RequiresPermission("android.permission.CACHE_CONTENT") public android.os.Bundle getCache(@NonNull android.net.Uri); diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java index d8e8b27d0621..65eb642369c9 100644 --- a/core/java/android/content/ContentProvider.java +++ b/core/java/android/content/ContentProvider.java @@ -1585,6 +1585,10 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall * This method is typically used when the provider implements more dynamic * access controls that cannot be expressed with {@code <path-permission>} * style static rules. + * <p> + * Because validation of these dynamic access controls has significant + * system health impact, this feature is only available to providers that + * are built into the system. * * @param uri the {@link Uri} to perform an access check on. * @param uid the UID to check the permission for. diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index b134c3796b40..7510ce73a59a 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -1357,8 +1357,28 @@ public abstract class ContentResolver implements ContentInterface { } } - /** {@hide} */ + /** + * Perform a detailed internal check on a {@link Uri} to determine if a UID + * is able to access it with specific mode flags. + * <p> + * This method is typically used when the provider implements more dynamic + * access controls that cannot be expressed with {@code <path-permission>} + * style static rules. + * <p> + * Because validation of these dynamic access controls has significant + * system health impact, this feature is only available to providers that + * are built into the system. + * + * @param uri the {@link Uri} to perform an access check on. + * @param uid the UID to check the permission for. + * @param modeFlags the access flags to use for the access check, such as + * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION}. + * @return {@link PackageManager#PERMISSION_GRANTED} if access is allowed, + * otherwise {@link PackageManager#PERMISSION_DENIED}. + * @hide + */ @Override + @SystemApi public int checkUriPermission(@NonNull Uri uri, int uid, @Intent.AccessUriMode int modeFlags) { Objects.requireNonNull(uri, "uri"); |