summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Sharkey <jsharkey@android.com> 2020-03-19 21:41:57 -0600
committer Jeff Sharkey <jsharkey@android.com> 2020-03-19 21:41:57 -0600
commitce8a353b8b5aaba5871e40feef6443fe8486a618 (patch)
tree38694cba41e3f0ce5497d5c865978ae30fc5ca47
parentc285c18e66cb49e042d6950f9e0f1b7d288c24e0 (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-xapi/system-current.txt1
-rw-r--r--core/java/android/content/ContentProvider.java4
-rw-r--r--core/java/android/content/ContentResolver.java22
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");