From 8313fc7e94e46e5cc09f457a15a771a325b9f74f Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Sun, 26 Sep 2010 18:34:53 -0700 Subject: Allow all apps to call ContentResolver.getType(). I can't find the bug number for this, but it is needed for some things we are doing where the app building an intent may not have access to the URI in the data field. This is for HC, but doing in GB to avoid introducing integration issues. Change-Id: I0cac971854198b18775d2a73deb80f23431bfbe2 --- .../android/server/am/ActivityManagerService.java | 32 ++++++++++++++++++++++ .../java/com/android/server/am/UriPermission.java | 4 +-- 2 files changed, 34 insertions(+), 2 deletions(-) (limited to 'services/java/com') diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 223d77d..22cd8ff 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -5592,6 +5592,38 @@ public final class ActivityManagerService extends ActivityManagerNative } } + /** + * Allows app to retrieve the MIME type of a URI without having permission + * to access its content provider. + * + * CTS tests for this functionality can be run with "runtest cts-appsecurity". + * + * Test cases are at cts/tests/appsecurity-tests/test-apps/UsePermissionDiffCert/ + * src/com/android/cts/usespermissiondiffcertapp/AccessPermissionWithDiffSigTest.java + */ + public String getProviderMimeType(Uri uri) { + final String name = uri.getAuthority(); + final long ident = Binder.clearCallingIdentity(); + ContentProviderHolder holder = null; + + try { + holder = getContentProviderExternal(name); + if (holder != null) { + return holder.provider.getType(uri); + } + } catch (RemoteException e) { + Log.w(TAG, "Content provider dead retrieving " + uri, e); + return null; + } finally { + if (holder != null) { + removeContentProviderExternal(name); + } + Binder.restoreCallingIdentity(ident); + } + + return null; + } + // ========================================================= // GLOBAL MANAGEMENT // ========================================================= diff --git a/services/java/com/android/server/am/UriPermission.java b/services/java/com/android/server/am/UriPermission.java index 0cb6943..e3347cb 100644 --- a/services/java/com/android/server/am/UriPermission.java +++ b/services/java/com/android/server/am/UriPermission.java @@ -27,8 +27,8 @@ import java.util.HashSet; * * CTS tests for this functionality can be run with "runtest cts-appsecurity". * - * Test cases are at cts/tests/appsecurity-tests/test-apps/UsePermissionDiffCert - * /src/com/android/cts/usespermissiondiffcertapp/AccessPermissionWithDiffSigTest.java + * Test cases are at cts/tests/appsecurity-tests/test-apps/UsePermissionDiffCert/ + * src/com/android/cts/usespermissiondiffcertapp/AccessPermissionWithDiffSigTest.java */ class UriPermission { final int uid; -- cgit v1.1