Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6985)

Unified Diff: chrome/test/android/javatests/src/org/chromium/chrome/test/TestContentProvider.java

Issue 2476823002: Increase test coverage for Content:// urls (Closed)
Patch Set: Fixed indent Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/android/javatests/src/org/chromium/chrome/test/TestContentProvider.java
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/TestContentProvider.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/TestContentProvider.java
index f13980e883dbe720d89b6f3cddb1d141ce488e50..4f5083720b0f9a94dd894937a71bcbb971a9f6f1 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/TestContentProvider.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/TestContentProvider.java
@@ -11,37 +11,50 @@ package org.chromium.chrome.test;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
-import android.content.res.AssetFileDescriptor;
import android.database.AbstractCursor;
import android.database.Cursor;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
-import android.util.Log;
-import java.io.FileOutputStream;
+import org.chromium.base.Log;
+import org.chromium.base.test.util.UrlUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
import java.io.IOException;
+import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
-// Note: if you move this class, make sure you have also updated AndroidManifest.xml
+/**
+ * Content provider for testing content:// urls.
+ * Note: if you move this class, make sure you have also updated AndroidManifest.xml
+ */
public class TestContentProvider extends ContentProvider {
+ private static final String ANDROID_DATA_FILE_PATH = "android/";
private static final String AUTHORITY = "org.chromium.chrome.test.TestContentProvider";
private static final String CONTENT_SCHEME = "content://";
- private static final String CONTENT_TYPE = "image/png";
private static final String GET_RESOURCE_REQUEST_COUNT = "get_resource_request_count";
- private static final String RESET_RESOURCE_REQUEST_COUNT = "reset_resource_request_count";
+ private static final String RESET_RESOURCE_REQUEST_COUNTS = "reset_resource_request_counts";
private static final String TAG = "TestContentProvider";
private enum ColumnIndex {
RESOURCE_REQUEST_COUNT_COLUMN,
}
- private final Map<String, Integer> mResourceRequestCount;
+ private Map<String, Integer> mResourceRequestCount;
+
+ // Content providers can be accessed from multiple threads.
+ private Object mLock = new Object();
public static String createContentUrl(String target) {
return CONTENT_SCHEME + AUTHORITY + "/" + target;
}
private static Uri createRequestUri(final String target, String resource) {
- return Uri.parse(createContentUrl(target) + "?" + resource);
+ if (resource == null) {
+ return Uri.parse(createContentUrl(target));
+ } else {
+ return Uri.parse(createContentUrl(target) + "?" + resource);
+ }
}
public static int getResourceRequestCount(Context context, String resource) {
@@ -55,36 +68,44 @@ public class TestContentProvider extends ContentProvider {
}
}
- public static void resetResourceRequestCount(Context context, String resource) {
- Uri uri = createRequestUri(RESET_RESOURCE_REQUEST_COUNT, resource);
+ public static void resetResourceRequestCounts(Context context) {
+ Uri uri = createRequestUri(RESET_RESOURCE_REQUEST_COUNTS, null);
// A null cursor is returned for this request.
context.getContentResolver().query(uri, null, null, null, null);
}
- public TestContentProvider() {
- super();
- mResourceRequestCount = new HashMap<String, Integer>();
- }
-
@Override
public boolean onCreate() {
return true;
}
@Override
- public AssetFileDescriptor openAssetFile(Uri uri, String mode) {
+ public ParcelFileDescriptor openFile(final Uri uri, String mode) throws FileNotFoundException {
String resource = uri.getLastPathSegment();
- if (mResourceRequestCount.containsKey(resource)) {
- mResourceRequestCount.put(resource, mResourceRequestCount.get(resource) + 1);
- } else {
- mResourceRequestCount.put(resource, 1);
+ synchronized (mLock) {
+ if (mResourceRequestCount.containsKey(resource)) {
+ mResourceRequestCount.put(resource, mResourceRequestCount.get(resource) + 1);
+ } else {
+ mResourceRequestCount.put(resource, 1);
+ }
+ }
+ return createAsset(resource);
+ }
+
+ private static ParcelFileDescriptor createAsset(String resource) {
+ try {
+ return ParcelFileDescriptor.open(
+ new File(UrlUtils.getTestFilePath(ANDROID_DATA_FILE_PATH + resource)),
+ ParcelFileDescriptor.MODE_READ_ONLY);
+ } catch (IOException e) {
+ Log.e(TAG, e.getMessage(), e);
}
- return createImage();
+ return null;
}
@Override
public String getType(Uri uri) {
- return CONTENT_TYPE;
+ return URLConnection.guessContentTypeFromName(uri.getLastPathSegment());
}
@Override
@@ -181,46 +202,16 @@ public class TestContentProvider extends ContentProvider {
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
- String action = uri.getLastPathSegment();
- String resource = uri.getQuery();
- if (GET_RESOURCE_REQUEST_COUNT.equals(action)) {
- return new ProviderStateCursor(mResourceRequestCount.containsKey(resource)
- ? mResourceRequestCount.get(resource) : 0);
- } else if (RESET_RESOURCE_REQUEST_COUNT.equals(action)) {
- mResourceRequestCount.put(resource, 0);
- }
- return null;
- }
-
- // 1x1 black dot png image.
- private static final byte[] IMAGE = {
- (byte) 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00,
- 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x7e, (byte) 0x9b, 0x55, 0x00,
- 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, (byte) 0xae, (byte) 0xce,
- 0x1c, (byte) 0xe9, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x44, 0x41, 0x54, 0x08,
- 0x1d, 0x01, 0x02, 0x00, (byte) 0xfd, (byte) 0xff, 0x00, 0x00, 0x00, 0x02,
- 0x00, 0x01, (byte) 0xcd, (byte) 0xe3, (byte) 0xd1, 0x2b, 0x00, 0x00, 0x00,
- 0x00, 0x49, 0x45, 0x4e, 0x44, (byte) 0xae, 0x42, 0x60, (byte) 0x82
- };
-
- private static AssetFileDescriptor createImage() {
- ParcelFileDescriptor[] pfds = null;
- FileOutputStream fileOut = null;
- try {
- try {
- pfds = ParcelFileDescriptor.createPipe();
- fileOut = new FileOutputStream(pfds[1].getFileDescriptor());
- fileOut.write(IMAGE);
- fileOut.flush();
- return new AssetFileDescriptor(pfds[0], 0, -1);
- } finally {
- if (fileOut != null) fileOut.close();
- if (pfds != null && pfds[1] != null) pfds[1].close();
+ synchronized (mLock) {
+ String action = uri.getLastPathSegment();
+ String resource = uri.getQuery();
+ if (GET_RESOURCE_REQUEST_COUNT.equals(action)) {
+ return new ProviderStateCursor(mResourceRequestCount.containsKey(resource)
+ ? mResourceRequestCount.get(resource) : 0);
+ } else if (RESET_RESOURCE_REQUEST_COUNTS.equals(action)) {
+ mResourceRequestCount = new HashMap<String, Integer>();
}
- } catch (IOException e) {
- Log.e(TAG, e.getMessage(), e);
+ return null;
}
- return null;
}
}

Powered by Google App Engine
This is Rietveld 408576698