| 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 4f5083720b0f9a94dd894937a71bcbb971a9f6f1..f13980e883dbe720d89b6f3cddb1d141ce488e50 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,50 +11,37 @@
|
| 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 org.chromium.base.Log;
|
| -import org.chromium.base.test.util.UrlUtils;
|
| -
|
| -import java.io.File;
|
| -import java.io.FileNotFoundException;
|
| +import android.util.Log;
|
| +
|
| +import java.io.FileOutputStream;
|
| import java.io.IOException;
|
| -import java.net.URLConnection;
|
| import java.util.HashMap;
|
| import java.util.Map;
|
|
|
| -/**
|
| - * Content provider for testing content:// urls.
|
| - * Note: if you move this class, make sure you have also updated AndroidManifest.xml
|
| - */
|
| +// 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_COUNTS = "reset_resource_request_counts";
|
| + private static final String RESET_RESOURCE_REQUEST_COUNT = "reset_resource_request_count";
|
| private static final String TAG = "TestContentProvider";
|
| private enum ColumnIndex {
|
| RESOURCE_REQUEST_COUNT_COLUMN,
|
| }
|
| - private Map<String, Integer> mResourceRequestCount;
|
| -
|
| - // Content providers can be accessed from multiple threads.
|
| - private Object mLock = new Object();
|
| + private final Map<String, Integer> mResourceRequestCount;
|
|
|
| public static String createContentUrl(String target) {
|
| return CONTENT_SCHEME + AUTHORITY + "/" + target;
|
| }
|
|
|
| private static Uri createRequestUri(final String target, String resource) {
|
| - if (resource == null) {
|
| - return Uri.parse(createContentUrl(target));
|
| - } else {
|
| - return Uri.parse(createContentUrl(target) + "?" + resource);
|
| - }
|
| + return Uri.parse(createContentUrl(target) + "?" + resource);
|
| }
|
|
|
| public static int getResourceRequestCount(Context context, String resource) {
|
| @@ -68,44 +55,36 @@
|
| }
|
| }
|
|
|
| - public static void resetResourceRequestCounts(Context context) {
|
| - Uri uri = createRequestUri(RESET_RESOURCE_REQUEST_COUNTS, null);
|
| + public static void resetResourceRequestCount(Context context, String resource) {
|
| + Uri uri = createRequestUri(RESET_RESOURCE_REQUEST_COUNT, resource);
|
| // 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 ParcelFileDescriptor openFile(final Uri uri, String mode) throws FileNotFoundException {
|
| + public AssetFileDescriptor openAssetFile(Uri uri, String mode) {
|
| String resource = uri.getLastPathSegment();
|
| - 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 null;
|
| + if (mResourceRequestCount.containsKey(resource)) {
|
| + mResourceRequestCount.put(resource, mResourceRequestCount.get(resource) + 1);
|
| + } else {
|
| + mResourceRequestCount.put(resource, 1);
|
| + }
|
| + return createImage();
|
| }
|
|
|
| @Override
|
| public String getType(Uri uri) {
|
| - return URLConnection.guessContentTypeFromName(uri.getLastPathSegment());
|
| + return CONTENT_TYPE;
|
| }
|
|
|
| @Override
|
| @@ -202,16 +181,46 @@
|
| @Override
|
| public Cursor query(Uri uri, String[] projection, String selection,
|
| String[] selectionArgs, String sortOrder) {
|
| - 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>();
|
| + 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();
|
| }
|
| - return null;
|
| - }
|
| + } catch (IOException e) {
|
| + Log.e(TAG, e.getMessage(), e);
|
| + }
|
| + return null;
|
| }
|
| }
|
|
|