Chromium Code Reviews| Index: android_webview/java/src/org/chromium/android_webview/AwContents.java |
| diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java |
| index ae5aad9aebcb620a52a0a4613e64354905056b0a..d7e2a910ea3ae252b9b04328392707d2ed3c7af8 100644 |
| --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java |
| +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java |
| @@ -19,6 +19,7 @@ import android.os.Build; |
| import android.os.Bundle; |
| import android.os.Message; |
| import android.text.TextUtils; |
| +import android.util.Base64; |
|
joth
2013/12/02 23:21:38
not needed
|
| import android.util.Log; |
| import android.view.KeyEvent; |
| import android.view.MotionEvent; |
| @@ -867,6 +868,47 @@ public class AwContents { |
| mContentsClient.getVisitedHistory(callback); |
| } |
| + private static String fixupMimeType(String mimeType) { |
| + return TextUtils.isEmpty(mimeType) ? "text/html" : mimeType; |
| + } |
| + |
| + private static String fixupData(String data) { |
| + return TextUtils.isEmpty(data) ? "" : data; |
| + } |
| + |
| + private static String fixupBase(String url) { |
| + return TextUtils.isEmpty(url) ? "about:blank" : url; |
| + } |
| + |
| + private static boolean isBase64Encoded(String encoding) { |
| + return "base64".equals(encoding); |
| + } |
| + |
| + public static LoadUrlParams createLoadUrlParamsForLoadData(String data, String mimeType, |
| + String encoding) { |
| + return LoadUrlParams.createLoadDataParams( |
| + fixupData(data), fixupMimeType(mimeType), isBase64Encoded(encoding)); |
| + } |
| + |
| + public static LoadUrlParams createLoadUrlParamsForLoadDataWithBaseURL(String baseUrl, |
| + String data, String mimeType, String encoding, String historyUrl) { |
| + data = fixupData(data); |
| + mimeType = fixupMimeType(mimeType); |
| + baseUrl = fixupBase(baseUrl); |
| + historyUrl = fixupBase(historyUrl); |
| + boolean isBase64 = isBase64Encoded(encoding); |
| + |
| + // Check if the baseUrl starts with "data:", ignoring case. |
| + if (baseUrl.regionMatches(true, 0, "data:", 0, 5)) { |
| + // For backwards compatibility with WebViewClassic, we use the value of |encoding| |
| + // as the charset, as long as it's not "base64". |
| + return LoadUrlParams.createLoadDataParams(data, mimeType, isBase64, |
| + isBase64 ? null : encoding); |
| + } |
| + return LoadUrlParams.createLoadDataParamsWithBaseUrl( |
| + data, mimeType, isBase64, baseUrl, historyUrl, encoding); |
| + } |
| + |
| /** |
| * Load url without fixing up the url string. Consumers of ContentView are responsible for |
| * ensuring the URL passed in is properly formatted (i.e. the scheme has been added if left |
| @@ -876,11 +918,15 @@ public class AwContents { |
| */ |
| public void loadUrl(LoadUrlParams params) { |
| if (params.getLoadUrlType() == LoadUrlParams.LOAD_TYPE_DATA && |
| - !params.isBaseUrlDataScheme()) { |
| + params.getBaseUrl() != null) { |
| // This allows data URLs with a non-data base URL access to file:///android_asset/ and |
| // file:///android_res/ URLs. If AwSettings.getAllowFileAccess permits, it will also |
| // allow access to file:// URLs (subject to OS level permission checks). |
| params.setCanLoadLocalResources(true); |
| + |
| + // Data url's with a base url will be resolved in Blink, and not cause an onPageStarted |
| + // event to be sent. Sending the callback directly from here. |
| + mContentsClient.getCallbackHelper().postOnPageStarted(params.getBaseUrl()); |
| } |
| // If we are reloading the same url, then set transition type as reload. |