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

Unified Diff: android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java

Issue 2784353002: Android: Remove GetApplicationContext part 2 (Closed)
Patch Set: Fix tests Created 3 years, 8 months 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: android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java
diff --git a/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java b/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java
index 20717b6e536f2a825f6f41d6319e886957f4a5ba..dff52eebbc6016f0437f7f9ab22239d3d79ee00b 100644
--- a/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java
+++ b/android_webview/java/src/org/chromium/android_webview/AndroidProtocolHandler.java
@@ -4,12 +4,12 @@
package org.chromium.android_webview;
-import android.content.Context;
import android.content.res.AssetManager;
import android.net.Uri;
import android.util.Log;
import android.util.TypedValue;
+import org.chromium.base.ContextUtils;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
@@ -33,12 +33,12 @@ public class AndroidProtocolHandler {
/**
* Open an InputStream for an Android resource.
- * @param context The context manager.
+ *
* @param url The url to load.
* @return An InputStream to the Android resource.
*/
@CalledByNative
- public static InputStream open(Context context, String url) {
+ public static InputStream open(String url) {
Uri uri = verifyUrl(url);
if (uri == null) {
return null;
@@ -47,12 +47,12 @@ public class AndroidProtocolHandler {
String path = uri.getPath();
if (uri.getScheme().equals(FILE_SCHEME)) {
if (path.startsWith(nativeGetAndroidAssetPath())) {
- return openAsset(context, uri);
+ return openAsset(uri);
} else if (path.startsWith(nativeGetAndroidResourcePath())) {
- return openResource(context, uri);
+ return openResource(uri);
}
} else if (uri.getScheme().equals(CONTENT_SCHEME)) {
- return openContent(context, uri);
+ return openContent(uri);
}
} catch (Exception ex) {
Log.e(TAG, "Error opening inputstream: " + url);
@@ -69,26 +69,26 @@ public class AndroidProtocolHandler {
return input.substring(0, lastDotIndex);
}
- private static Class<?> getClazz(Context context, String packageName, String assetType)
- throws ClassNotFoundException {
- return context.getClassLoader().loadClass(packageName + ".R$" + assetType);
+ private static Class<?> getClazz(String assetType) throws ClassNotFoundException {
+ return ContextUtils.getApplicationContext().getClassLoader().loadClass(
+ ContextUtils.getApplicationContext().getPackageName() + ".R$" + assetType);
}
- private static int getFieldId(Context context, String assetType, String assetName)
- throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
+ private static int getFieldId(String assetType, String assetName)
+ throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
Class<?> clazz = null;
try {
- clazz = getClazz(context, context.getPackageName(), assetType);
+ clazz = getClazz(assetType);
} catch (ClassNotFoundException e) {
// Strip out components from the end so gradle generated application suffix such as
// com.example.my.pkg.pro works. This is by no means bulletproof.
- String packageName = context.getPackageName();
+ String packageName = ContextUtils.getApplicationContext().getPackageName();
while (clazz == null) {
packageName = removeOneSuffix(packageName);
// Throw original exception which contains the entire package id.
if (packageName == null) throw e;
try {
- clazz = getClazz(context, packageName, assetType);
+ clazz = getClazz(assetType);
} catch (ClassNotFoundException ignored) {
// Strip and try again.
}
@@ -100,13 +100,13 @@ public class AndroidProtocolHandler {
return id;
}
- private static int getValueType(Context context, int fieldId) {
+ private static int getValueType(int fieldId) {
TypedValue value = new TypedValue();
- context.getResources().getValue(fieldId, value, true);
+ ContextUtils.getApplicationContext().getResources().getValue(fieldId, value, true);
return value.type;
}
- private static InputStream openResource(Context context, Uri uri) {
+ private static InputStream openResource(Uri uri) {
assert uri.getScheme().equals(FILE_SCHEME);
assert uri.getPath() != null;
assert uri.getPath().startsWith(nativeGetAndroidResourcePath());
@@ -127,17 +127,10 @@ public class AndroidProtocolHandler {
// Drop the file extension.
assetName = assetName.split("\\.")[0];
try {
- // Use the application context for resolving the resource package name so that we do
- // not use the browser's own resources. Note that if 'context' here belongs to the
- // test suite, it does not have a separate application context. In that case we use
- // the original context object directly.
- if (context.getApplicationContext() != null) {
- context = context.getApplicationContext();
- }
- int fieldId = getFieldId(context, assetType, assetName);
- int valueType = getValueType(context, fieldId);
+ int fieldId = getFieldId(assetType, assetName);
+ int valueType = getValueType(fieldId);
if (valueType == TypedValue.TYPE_STRING) {
- return context.getResources().openRawResource(fieldId);
+ return ContextUtils.getApplicationContext().getResources().openRawResource(fieldId);
} else {
Log.e(TAG, "Asset not of type string: " + uri);
return null;
@@ -154,13 +147,13 @@ public class AndroidProtocolHandler {
}
}
- private static InputStream openAsset(Context context, Uri uri) {
+ private static InputStream openAsset(Uri uri) {
assert uri.getScheme().equals(FILE_SCHEME);
assert uri.getPath() != null;
assert uri.getPath().startsWith(nativeGetAndroidAssetPath());
String path = uri.getPath().replaceFirst(nativeGetAndroidAssetPath(), "");
try {
- AssetManager assets = context.getAssets();
+ AssetManager assets = ContextUtils.getApplicationContext().getAssets();
return assets.open(path, AssetManager.ACCESS_STREAMING);
} catch (IOException e) {
Log.e(TAG, "Unable to open asset URL: " + uri);
@@ -168,10 +161,10 @@ public class AndroidProtocolHandler {
}
}
- private static InputStream openContent(Context context, Uri uri) {
+ private static InputStream openContent(Uri uri) {
assert uri.getScheme().equals(CONTENT_SCHEME);
try {
- return context.getContentResolver().openInputStream(uri);
+ return ContextUtils.getApplicationContext().getContentResolver().openInputStream(uri);
} catch (Exception e) {
Log.e(TAG, "Unable to open content URL: " + uri);
return null;
@@ -180,13 +173,13 @@ public class AndroidProtocolHandler {
/**
* Determine the mime type for an Android resource.
- * @param context The context manager.
- * @param stream The opened input stream which to examine.
- * @param url The url from which the stream was opened.
+ *
+ * @param stream The opened input stream which to examine.
+ * @param url The url from which the stream was opened.
* @return The mime type or null if the type is unknown.
*/
@CalledByNative
- public static String getMimeType(Context context, InputStream stream, String url) {
+ public static String getMimeType(InputStream stream, String url) {
Uri uri = verifyUrl(url);
if (uri == null) {
return null;
@@ -195,10 +188,10 @@ public class AndroidProtocolHandler {
String path = uri.getPath();
// The content URL type can be queried directly.
if (uri.getScheme().equals(CONTENT_SCHEME)) {
- return context.getContentResolver().getType(uri);
+ return ContextUtils.getApplicationContext().getContentResolver().getType(uri);
// Asset files may have a known extension.
} else if (uri.getScheme().equals(FILE_SCHEME)
- && path.startsWith(nativeGetAndroidAssetPath())) {
+ && path.startsWith(nativeGetAndroidAssetPath())) {
String mimeType = URLConnection.guessContentTypeFromName(path);
if (mimeType != null) {
return mimeType;
@@ -218,6 +211,7 @@ public class AndroidProtocolHandler {
/**
* Make sure the given string URL is correctly formed and parse it into a Uri.
+ *
* @return a Uri instance, or null if the URL was invalid.
*/
private static Uri verifyUrl(String url) {
@@ -237,16 +231,7 @@ public class AndroidProtocolHandler {
return uri;
}
- /**
- * Set the context to be used for resolving resource queries.
- * @param context Context to be used, or null for the default application
- * context.
- */
- public static void setResourceContextForTesting(Context context) {
- nativeSetResourceContextForTesting(context);
- }
-
- private static native void nativeSetResourceContextForTesting(Context context);
private static native String nativeGetAndroidAssetPath();
+
private static native String nativeGetAndroidResourcePath();
}

Powered by Google App Engine
This is Rietveld 408576698