Chromium Code Reviews| Index: android_webview/native/aw_contents_client_bridge.cc |
| diff --git a/android_webview/native/aw_contents_client_bridge.cc b/android_webview/native/aw_contents_client_bridge.cc |
| index c3c2c0bf2c9b23766ac01528055ddf4626748769..40e701a6ae950807e59a33b48b89afef01fb12e3 100644 |
| --- a/android_webview/native/aw_contents_client_bridge.cc |
| +++ b/android_webview/native/aw_contents_client_bridge.cc |
| @@ -23,6 +23,7 @@ |
| #include "grit/components_strings.h" |
| #include "jni/AwContentsClientBridge_jni.h" |
| #include "net/cert/x509_certificate.h" |
| +#include "net/http/http_response_headers.h" |
| #include "net/ssl/openssl_client_key_store.h" |
| #include "net/ssl/ssl_cert_request_info.h" |
| #include "net/ssl/ssl_client_cert_type.h" |
| @@ -38,7 +39,9 @@ using base::android::ConvertUTF16ToJavaString; |
| using base::android::HasException; |
| using base::android::JavaRef; |
| using base::android::ScopedJavaLocalRef; |
| +using base::android::ToJavaArrayOfStrings; |
| using content::BrowserThread; |
| +using std::vector; |
| namespace android_webview { |
| @@ -411,6 +414,82 @@ void AwContentsClientBridge::NewLoginRequest(const std::string& realm, |
| jargs); |
| } |
| +void AwContentsClientBridge::OnReceivedError( |
| + const AwWebResourceRequest& request, |
| + int error_code) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + JNIEnv* env = AttachCurrentThread(); |
| + ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| + if (obj.is_null()) |
| + return; |
| + |
| + ScopedJavaLocalRef<jstring> jstring_description = |
| + ConvertUTF8ToJavaString(env, net::ErrorToString(error_code)); |
| + |
| + ScopedJavaLocalRef<jstring> jurl = ConvertUTF8ToJavaString(env, request.url); |
| + ScopedJavaLocalRef<jstring> jmethod = |
| + ConvertUTF8ToJavaString(env, request.method); |
| + ScopedJavaLocalRef<jobjectArray> jheader_names = |
| + ToJavaArrayOfStrings(env, request.header_names); |
| + ScopedJavaLocalRef<jobjectArray> jheader_values = |
| + ToJavaArrayOfStrings(env, request.header_values); |
| + |
| + Java_AwContentsClientBridge_onReceivedError( |
| + env, obj, jurl, request.is_main_frame, request.has_user_gesture, jmethod, |
| + jheader_names, jheader_values, error_code, jstring_description); |
| +} |
| + |
| +void AwContentsClientBridge::OnReceivedHttpError( |
| + const AwWebResourceRequest& request, |
| + const scoped_refptr<const net::HttpResponseHeaders>& response_headers) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + JNIEnv* env = AttachCurrentThread(); |
| + ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| + if (obj.is_null()) |
| + return; |
| + |
| + ScopedJavaLocalRef<jstring> jurl = ConvertUTF8ToJavaString(env, request.url); |
|
boliu
2016/12/08 05:48:38
this bunch of stuff is duplicated here and above..
sgurun-gerrit only
2016/12/08 21:56:46
used three times actually.
done.
|
| + ScopedJavaLocalRef<jstring> jmethod = |
| + ConvertUTF8ToJavaString(env, request.method); |
| + ScopedJavaLocalRef<jobjectArray> jheader_names = |
| + ToJavaArrayOfStrings(env, request.header_names); |
| + ScopedJavaLocalRef<jobjectArray> jheader_values = |
| + ToJavaArrayOfStrings(env, request.header_values); |
| + |
| + vector<std::string> response_header_names; |
| + vector<std::string> response_header_values; |
| + |
| + { |
| + size_t headers_iterator = 0; |
| + std::string header_name, header_value; |
| + while (response_headers->EnumerateHeaderLines( |
| + &headers_iterator, &header_name, &header_value)) { |
| + response_header_names.push_back(header_name); |
| + response_header_values.push_back(header_value); |
| + } |
| + } |
| + |
| + std::string mime_type, encoding; |
| + response_headers->GetMimeTypeAndCharset(&mime_type, &encoding); |
| + ScopedJavaLocalRef<jstring> jstring_mime_type = |
| + ConvertUTF8ToJavaString(env, mime_type); |
| + ScopedJavaLocalRef<jstring> jstring_encoding = |
| + ConvertUTF8ToJavaString(env, encoding); |
| + int status_code = response_headers->response_code(); |
| + ScopedJavaLocalRef<jstring> jstring_reason = |
| + ConvertUTF8ToJavaString(env, response_headers->GetStatusText()); |
| + ScopedJavaLocalRef<jobjectArray> jstringArray_response_header_names = |
| + ToJavaArrayOfStrings(env, response_header_names); |
| + ScopedJavaLocalRef<jobjectArray> jstringArray_response_header_values = |
| + ToJavaArrayOfStrings(env, response_header_values); |
| + |
| + Java_AwContentsClientBridge_onReceivedHttpError( |
| + env, obj, jurl, request.is_main_frame, request.has_user_gesture, jmethod, |
| + jheader_names, jheader_values, jstring_mime_type, jstring_encoding, |
| + status_code, jstring_reason, jstringArray_response_header_names, |
| + jstringArray_response_header_values); |
| +} |
| + |
| void AwContentsClientBridge::ConfirmJsResult(JNIEnv* env, |
| const JavaRef<jobject>&, |
| int id, |