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, |