Runtime permission tests for MediaStore.
Verify that MediaStore is enforcing runtime storage permissions.
Bug: 22718722
Change-Id: I4a253edd5e37f16a7325093b412761b5e2650bb7
diff --git a/hostsidetests/appsecurity/test-apps/ExternalStorageApp/src/com/android/cts/externalstorageapp/CommonExternalStorageTest.java b/hostsidetests/appsecurity/test-apps/ExternalStorageApp/src/com/android/cts/externalstorageapp/CommonExternalStorageTest.java
index c935c91..f01db4f 100644
--- a/hostsidetests/appsecurity/test-apps/ExternalStorageApp/src/com/android/cts/externalstorageapp/CommonExternalStorageTest.java
+++ b/hostsidetests/appsecurity/test-apps/ExternalStorageApp/src/com/android/cts/externalstorageapp/CommonExternalStorageTest.java
@@ -16,8 +16,13 @@
package com.android.cts.externalstorageapp;
+import android.content.ContentResolver;
+import android.content.ContentValues;
import android.content.Context;
+import android.net.Uri;
import android.os.Environment;
+import android.provider.MediaStore;
+import android.provider.MediaStore.Images;
import android.test.AndroidTestCase;
import android.util.Log;
@@ -286,6 +291,35 @@
}
}
+ public static void assertMediaNoAccess(ContentResolver resolver) throws Exception {
+ final ContentValues values = new ContentValues();
+ values.put(Images.Media.MIME_TYPE, "image/jpeg");
+ values.put(Images.Media.DATA,
+ buildProbeFile(Environment.getExternalStorageDirectory()).getAbsolutePath());
+
+ try {
+ resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
+ fail("Expected access to be blocked");
+ } catch (Exception expected) {
+ }
+ }
+
+ public static void assertMediaReadWriteAccess(ContentResolver resolver) throws Exception {
+ final ContentValues values = new ContentValues();
+ values.put(Images.Media.MIME_TYPE, "image/jpeg");
+ values.put(Images.Media.DATA,
+ buildProbeFile(Environment.getExternalStorageDirectory()).getAbsolutePath());
+
+ final Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
+ try {
+ resolver.openFileDescriptor(uri, "rw").close();
+ resolver.openFileDescriptor(uri, "w").close();
+ resolver.openFileDescriptor(uri, "r").close();
+ } finally {
+ resolver.delete(uri, null, null);
+ }
+ }
+
private static boolean isWhiteList(File file) {
final String[] whiteLists = {
"autorun.inf", ".android_secure", "android_secure"
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionApp/src/com/android/cts/usepermission/UsePermissionTest.java b/hostsidetests/appsecurity/test-apps/UsePermissionApp/src/com/android/cts/usepermission/UsePermissionTest.java
index 5137ee8..d6e97e0 100644
--- a/hostsidetests/appsecurity/test-apps/UsePermissionApp/src/com/android/cts/usepermission/UsePermissionTest.java
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionApp/src/com/android/cts/usepermission/UsePermissionTest.java
@@ -18,6 +18,8 @@
import static com.android.cts.externalstorageapp.CommonExternalStorageTest.assertDirNoAccess;
import static com.android.cts.externalstorageapp.CommonExternalStorageTest.assertDirReadWriteAccess;
+import static com.android.cts.externalstorageapp.CommonExternalStorageTest.assertMediaNoAccess;
+import static com.android.cts.externalstorageapp.CommonExternalStorageTest.assertMediaReadWriteAccess;
import static com.android.cts.externalstorageapp.CommonExternalStorageTest.logCommand;
import android.content.pm.PackageManager;
@@ -52,6 +54,7 @@
assertEquals(Environment.MEDIA_MOUNTED, Environment.getExternalStorageState());
assertDirNoAccess(Environment.getExternalStorageDirectory());
assertDirReadWriteAccess(getInstrumentation().getContext().getExternalCacheDir());
+ assertMediaNoAccess(getInstrumentation().getContext().getContentResolver());
}
public void testGranted() throws Exception {
@@ -64,6 +67,7 @@
assertEquals(Environment.MEDIA_MOUNTED, Environment.getExternalStorageState());
assertDirReadWriteAccess(Environment.getExternalStorageDirectory());
assertDirReadWriteAccess(getInstrumentation().getContext().getExternalCacheDir());
+ assertMediaReadWriteAccess(getInstrumentation().getContext().getContentResolver());
}
public void testInteractiveGrant() throws Exception {
@@ -77,6 +81,7 @@
assertEquals(Environment.MEDIA_MOUNTED, Environment.getExternalStorageState());
assertDirNoAccess(Environment.getExternalStorageDirectory());
assertDirReadWriteAccess(getInstrumentation().getContext().getExternalCacheDir());
+ assertMediaNoAccess(getInstrumentation().getContext().getContentResolver());
// Go through normal grant flow
mDevice = UiDevice.getInstance(getInstrumentation());
@@ -110,6 +115,7 @@
assertEquals(Environment.MEDIA_MOUNTED, Environment.getExternalStorageState());
assertDirReadWriteAccess(Environment.getExternalStorageDirectory());
assertDirReadWriteAccess(getInstrumentation().getContext().getExternalCacheDir());
+ assertMediaReadWriteAccess(getInstrumentation().getContext().getContentResolver());
mActivity.finish();
}
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionAppCompat/src/com/android/cts/usepermission/UsePermissionCompatTest.java b/hostsidetests/appsecurity/test-apps/UsePermissionAppCompat/src/com/android/cts/usepermission/UsePermissionCompatTest.java
index fb87e81..7f21d3400 100644
--- a/hostsidetests/appsecurity/test-apps/UsePermissionAppCompat/src/com/android/cts/usepermission/UsePermissionCompatTest.java
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionAppCompat/src/com/android/cts/usepermission/UsePermissionCompatTest.java
@@ -18,6 +18,8 @@
import static com.android.cts.externalstorageapp.CommonExternalStorageTest.assertDirNoAccess;
import static com.android.cts.externalstorageapp.CommonExternalStorageTest.assertDirReadWriteAccess;
+import static com.android.cts.externalstorageapp.CommonExternalStorageTest.assertMediaNoAccess;
+import static com.android.cts.externalstorageapp.CommonExternalStorageTest.assertMediaReadWriteAccess;
import static com.android.cts.externalstorageapp.CommonExternalStorageTest.getAllPackageSpecificPaths;
import static com.android.cts.externalstorageapp.CommonExternalStorageTest.logCommand;
@@ -50,6 +52,7 @@
assertDirReadWriteAccess(path);
}
}
+ assertMediaReadWriteAccess(getInstrumentation().getContext().getContentResolver());
}
public void testCompatRevoked() throws Exception {
@@ -71,6 +74,7 @@
assertDirNoAccess(dir);
}
}
+ assertMediaNoAccess(getInstrumentation().getContext().getContentResolver());
// Just to be sure, poke explicit path
assertDirNoAccess(new File(Environment.getExternalStorageDirectory(),