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

Unified Diff: android_webview/native/aw_contents_io_thread_client_impl.cc

Issue 976393002: [Android WebView] Implement OnReceivedHttpError callback (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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/native/aw_contents_io_thread_client_impl.cc
diff --git a/android_webview/native/aw_contents_io_thread_client_impl.cc b/android_webview/native/aw_contents_io_thread_client_impl.cc
index 69003ae3a1a186766f5172987bbc52d5879b7dd7..25f046553c98c0f55a41ee1561bf91f67bcbc029 100644
--- a/android_webview/native/aw_contents_io_thread_client_impl.cc
+++ b/android_webview/native/aw_contents_io_thread_client_impl.cc
@@ -25,6 +25,7 @@
#include "content/public/browser/web_contents_observer.h"
#include "jni/AwContentsIoThreadClient_jni.h"
#include "net/http/http_request_headers.h"
+#include "net/http/http_response_headers.h"
#include "net/url_request/url_request.h"
#include "url/gurl.h"
@@ -375,6 +376,85 @@ void AwContentsIoThreadClientImpl::NewLoginRequest(const string& realm,
env, java_object_.obj(), jrealm.obj(), jaccount.obj(), jargs.obj());
}
+void AwContentsIoThreadClientImpl::OnHeadersReceived(
+ const net::URLRequest* request,
+ const net::HttpResponseHeaders* response_headers) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ if (java_object_.is_null())
+ return;
+
+ vector<string> request_header_names;
+ vector<string> request_header_values;
+ {
+ net::HttpRequestHeaders headers;
+ if (!request->GetFullRequestHeaders(&headers))
+ headers = request->extra_request_headers();
+ net::HttpRequestHeaders::Iterator headers_iterator(headers);
+ while (headers_iterator.GetNext()) {
+ request_header_names.push_back(headers_iterator.name());
+ request_header_values.push_back(headers_iterator.value());
+ }
+ }
+
+ vector<string> response_header_names;
+ vector<string> response_header_values;
+ {
+ void* headers_iterator = NULL;
+ 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);
+ }
+ }
+
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jstring> jstring_url =
+ ConvertUTF8ToJavaString(env, request->url().spec());
+ ScopedJavaLocalRef<jstring> jstring_method =
+ ConvertUTF8ToJavaString(env, request->method());
+ ScopedJavaLocalRef<jobjectArray> jstringArray_request_header_names =
+ ToJavaArrayOfStrings(env, request_header_names);
+ ScopedJavaLocalRef<jobjectArray> jstringArray_request_header_values =
+ ToJavaArrayOfStrings(env, request_header_values);
+
+ const content::ResourceRequestInfo* info =
+ content::ResourceRequestInfo::ForRequest(request);
+ bool is_main_frame = info &&
+ info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME;
+ bool has_user_gesture = info && info->HasUserGesture();
+
+ 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_AwContentsIoThreadClient_onHeadersReceived(
+ env,
+ java_object_.obj(),
+ jstring_url.obj(),
+ is_main_frame,
+ has_user_gesture,
+ jstring_method.obj(),
+ jstringArray_request_header_names.obj(),
+ jstringArray_request_header_values.obj(),
+ jstring_mime_type.obj(),
+ jstring_encoding.obj(),
+ status_code,
+ jstring_reason.obj(),
+ jstringArray_response_header_names.obj(),
+ jstringArray_response_header_values.obj());
+}
+
bool RegisterAwContentsIoThreadClientImpl(JNIEnv* env) {
return RegisterNativesImpl(env);
}

Powered by Google App Engine
This is Rietveld 408576698