| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.android_webview; | 5 package org.chromium.android_webview; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.content.res.AssetManager; | 8 import android.content.res.AssetManager; |
| 9 import android.net.Uri; | 9 import android.net.Uri; |
| 10 import android.util.Log; | 10 import android.util.Log; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 } | 56 } |
| 57 } catch (Exception ex) { | 57 } catch (Exception ex) { |
| 58 Log.e(TAG, "Error opening inputstream: " + url); | 58 Log.e(TAG, "Error opening inputstream: " + url); |
| 59 } | 59 } |
| 60 return null; | 60 return null; |
| 61 } | 61 } |
| 62 | 62 |
| 63 private static int getFieldId(Context context, String assetType, String asse
tName) | 63 private static int getFieldId(Context context, String assetType, String asse
tName) |
| 64 throws ClassNotFoundException, NoSuchFieldException, IllegalAccessExcept
ion { | 64 throws ClassNotFoundException, NoSuchFieldException, IllegalAccessExcept
ion { |
| 65 Class<?> d = context.getClassLoader() | 65 Class<?> d = context.getClassLoader() |
| 66 .loadClass(context.getPackageName() + ".R$" + assetType); | 66 .loadClass(context.getPackageName() + ".R$" + assetType); |
| 67 java.lang.reflect.Field field = d.getField(assetName); | 67 java.lang.reflect.Field field = d.getField(assetName); |
| 68 int id = field.getInt(null); | 68 int id = field.getInt(null); |
| 69 return id; | 69 return id; |
| 70 } | 70 } |
| 71 | 71 |
| 72 private static int getValueType(Context context, int fieldId) { | 72 private static int getValueType(Context context, int fieldId) { |
| 73 TypedValue value = new TypedValue(); | 73 TypedValue value = new TypedValue(); |
| 74 context.getResources().getValue(fieldId, value, true); | 74 context.getResources().getValue(fieldId, value, true); |
| 75 return value.type; | 75 return value.type; |
| 76 } | 76 } |
| 77 | 77 |
| 78 private static InputStream openResource(Context context, Uri uri) { | 78 private static InputStream openResource(Context context, Uri uri) { |
| 79 assert uri.getScheme().equals(FILE_SCHEME); | 79 assert uri.getScheme().equals(FILE_SCHEME); |
| 80 assert uri.getPath() != null; | 80 assert uri.getPath() != null; |
| 81 assert uri.getPath().startsWith(nativeGetAndroidResourcePath()); | 81 assert uri.getPath().startsWith(nativeGetAndroidResourcePath()); |
| 82 // The path must be of the form "/android_res/asset_type/asset_name.ext"
. | 82 // The path must be of the form "/android_res/asset_type/asset_name.ext"
. |
| 83 List<String> pathSegments = uri.getPathSegments(); | 83 List<String> pathSegments = uri.getPathSegments(); |
| 84 if (pathSegments.size() != 3) { | 84 if (pathSegments.size() != 3) { |
| 85 Log.e(TAG, "Incorrect resource path: " + uri); | 85 Log.e(TAG, "Incorrect resource path: " + uri); |
| 86 return null; | 86 return null; |
| 87 } | 87 } |
| 88 String assetPath = pathSegments.get(0); | 88 String assetPath = pathSegments.get(0); |
| 89 String assetType = pathSegments.get(1); | 89 String assetType = pathSegments.get(1); |
| 90 String assetName = pathSegments.get(2); | 90 String assetName = pathSegments.get(2); |
| 91 if (!("/" + assetPath + "/").equals(nativeGetAndroidResourcePath())) { | 91 if (!("/" + assetPath + "/").equals(nativeGetAndroidResourcePath())) { |
| 92 Log.e(TAG, "Resource path does not start with " + nativeGetAndroidRe
sourcePath() + | 92 Log.e(TAG, "Resource path does not start with " + nativeGetAndroidRe
sourcePath() + |
| 93 ": " + uri); | 93 ": " + uri); |
| 94 return null; | 94 return null; |
| 95 } | 95 } |
| 96 // Drop the file extension. | 96 // Drop the file extension. |
| 97 assetName = assetName.split("\\.")[0]; | 97 assetName = assetName.split("\\.")[0]; |
| 98 try { | 98 try { |
| 99 // Use the application context for resolving the resource package na
me so that we do | 99 // Use the application context for resolving the resource package na
me so that we do |
| 100 // not use the browser's own resources. Note that if 'context' here
belongs to the | 100 // not use the browser's own resources. Note that if 'context' here
belongs to the |
| 101 // test suite, it does not have a separate application context. In t
hat case we use | 101 // test suite, it does not have a separate application context. In t
hat case we use |
| 102 // the original context object directly. | 102 // the original context object directly. |
| 103 if (context.getApplicationContext() != null) { | 103 if (context.getApplicationContext() != null) { |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 * context. | 212 * context. |
| 213 */ | 213 */ |
| 214 public static void setResourceContextForTesting(Context context) { | 214 public static void setResourceContextForTesting(Context context) { |
| 215 nativeSetResourceContextForTesting(context); | 215 nativeSetResourceContextForTesting(context); |
| 216 } | 216 } |
| 217 | 217 |
| 218 private static native void nativeSetResourceContextForTesting(Context contex
t); | 218 private static native void nativeSetResourceContextForTesting(Context contex
t); |
| 219 private static native String nativeGetAndroidAssetPath(); | 219 private static native String nativeGetAndroidAssetPath(); |
| 220 private static native String nativeGetAndroidResourcePath(); | 220 private static native String nativeGetAndroidResourcePath(); |
| 221 } | 221 } |
| OLD | NEW |