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

Unified Diff: android_webview/native/aw_contents_io_thread_client_impl.cc

Issue 1001003004: [Android WebView] Implement a better OnReceivedError callback (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Restored empty line Created 5 years, 9 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 0cadc9491f02355c4224bd89d9a232d3471f86cd..7c246dd9e5e33549d2c0cf658f77f0fe0fc34826 100644
--- a/android_webview/native/aw_contents_io_thread_client_impl.cc
+++ b/android_webview/native/aw_contents_io_thread_client_impl.cc
@@ -24,6 +24,7 @@
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_observer.h"
#include "jni/AwContentsIoThreadClient_jni.h"
+#include "net/base/net_errors.h"
#include "net/http/http_request_headers.h"
#include "net/http/http_response_headers.h"
#include "net/url_request/url_request.h"
@@ -153,6 +154,38 @@ void ClientMapEntryUpdater::WebContentsDestroyed() {
delete this;
}
+struct WebResourceRequest {
+ ScopedJavaLocalRef<jstring> jstring_url;
+ bool is_main_frame;
+ bool has_user_gesture;
+ ScopedJavaLocalRef<jstring> jstring_method;
+ ScopedJavaLocalRef<jobjectArray> jstringArray_header_names;
+ ScopedJavaLocalRef<jobjectArray> jstringArray_header_values;
+
+ WebResourceRequest(JNIEnv* env, const net::URLRequest* request)
+ : jstring_url(ConvertUTF8ToJavaString(env, request->url().spec())),
+ jstring_method(ConvertUTF8ToJavaString(env, request->method())) {
+ const content::ResourceRequestInfo* info =
+ content::ResourceRequestInfo::ForRequest(request);
+ is_main_frame =
+ info && info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME;
+ has_user_gesture = info && info->HasUserGesture();
+
+ vector<string> header_names;
+ vector<string> header_values;
+ net::HttpRequestHeaders headers;
+ if (!request->GetFullRequestHeaders(&headers))
+ headers = request->extra_request_headers();
+ net::HttpRequestHeaders::Iterator headers_iterator(headers);
+ while (headers_iterator.GetNext()) {
+ header_names.push_back(headers_iterator.name());
+ header_values.push_back(headers_iterator.value());
+ }
+ jstringArray_header_names = ToJavaArrayOfStrings(env, header_names);
+ jstringArray_header_values = ToJavaArrayOfStrings(env, header_values);
+ }
+};
+
} // namespace
// AwContentsIoThreadClientImpl -----------------------------------------------
@@ -241,46 +274,23 @@ AwContentsIoThreadClientImpl::ShouldInterceptRequest(
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
if (java_object_.is_null())
return scoped_ptr<AwWebResourceResponse>();
- 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();
-
- vector<string> headers_names;
- vector<string> headers_values;
- {
- net::HttpRequestHeaders headers;
- if (!request->GetFullRequestHeaders(&headers))
- headers = request->extra_request_headers();
- net::HttpRequestHeaders::Iterator headers_iterator(headers);
- while (headers_iterator.GetNext()) {
- headers_names.push_back(headers_iterator.name());
- headers_values.push_back(headers_iterator.value());
- }
- }
JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jstring> jstring_url =
- ConvertUTF8ToJavaString(env, location.spec());
- ScopedJavaLocalRef<jstring> jstring_method =
- ConvertUTF8ToJavaString(env, request->method());
- ScopedJavaLocalRef<jobjectArray> jstringArray_headers_names =
- ToJavaArrayOfStrings(env, headers_names);
- ScopedJavaLocalRef<jobjectArray> jstringArray_headers_values =
- ToJavaArrayOfStrings(env, headers_values);
+ WebResourceRequest web_request(env, request);
+ web_request.jstring_url = ConvertUTF8ToJavaString(env, location.spec());
sgurun-gerrit only 2015/03/17 00:30:04 question: do you really need to overwrite this? wh
mnaganov (inactive) 2015/03/17 15:29:09 Great question! I've looked up where we are gettin
+
devtools_instrumentation::ScopedEmbedderCallbackTask embedder_callback(
"shouldInterceptRequest");
ScopedJavaLocalRef<jobject> ret =
Java_AwContentsIoThreadClient_shouldInterceptRequest(
env,
java_object_.obj(),
- jstring_url.obj(),
- is_main_frame,
- has_user_gesture,
- jstring_method.obj(),
- jstringArray_headers_names.obj(),
- jstringArray_headers_values.obj());
+ web_request.jstring_url.obj(),
+ web_request.is_main_frame,
+ web_request.has_user_gesture,
+ web_request.jstring_method.obj(),
+ web_request.jstringArray_header_names.obj(),
+ web_request.jstringArray_header_values.obj());
if (ret.is_null())
return scoped_ptr<AwWebResourceResponse>();
return scoped_ptr<AwWebResourceResponse>(
@@ -376,6 +386,32 @@ void AwContentsIoThreadClientImpl::NewLoginRequest(const string& realm,
env, java_object_.obj(), jrealm.obj(), jaccount.obj(), jargs.obj());
}
+void AwContentsIoThreadClientImpl::OnReceivedError(
+ const net::URLRequest* request) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ if (java_object_.is_null())
+ return;
+
+ JNIEnv* env = AttachCurrentThread();
+ WebResourceRequest web_request(env, request);
+
+ int error_code = request->status().error();
+ ScopedJavaLocalRef<jstring> jstring_description = ConvertUTF8ToJavaString(
+ env, net::ErrorToString(request->status().error()));
+
+ Java_AwContentsIoThreadClient_onReceivedError(
+ env,
+ java_object_.obj(),
+ web_request.jstring_url.obj(),
+ web_request.is_main_frame,
+ web_request.has_user_gesture,
+ web_request.jstring_method.obj(),
+ web_request.jstringArray_header_names.obj(),
+ web_request.jstringArray_header_values.obj(),
+ error_code,
+ jstring_description.obj());
+}
+
void AwContentsIoThreadClientImpl::OnReceivedHttpError(
const net::URLRequest* request,
const net::HttpResponseHeaders* response_headers) {
@@ -383,18 +419,8 @@ void AwContentsIoThreadClientImpl::OnReceivedHttpError(
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());
- }
- }
+ JNIEnv* env = AttachCurrentThread();
+ WebResourceRequest web_request(env, request);
vector<string> response_header_names;
vector<string> response_header_values;
@@ -408,22 +434,6 @@ void AwContentsIoThreadClientImpl::OnReceivedHttpError(
}
}
- 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 =
@@ -441,12 +451,12 @@ void AwContentsIoThreadClientImpl::OnReceivedHttpError(
Java_AwContentsIoThreadClient_onReceivedHttpError(
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(),
+ web_request.jstring_url.obj(),
+ web_request.is_main_frame,
+ web_request.has_user_gesture,
+ web_request.jstring_method.obj(),
+ web_request.jstringArray_header_names.obj(),
+ web_request.jstringArray_header_values.obj(),
jstring_mime_type.obj(),
jstring_encoding.obj(),
status_code,

Powered by Google App Engine
This is Rietveld 408576698