| 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 63965db2074f4dfdf8844bde3d4ea9f9f660d1a1..225de649f77d85aade8155835593a97ad0a914e2 100644
|
| --- a/android_webview/native/aw_contents_io_thread_client_impl.cc
|
| +++ b/android_webview/native/aw_contents_io_thread_client_impl.cc
|
| @@ -8,6 +8,7 @@
|
| #include <memory>
|
| #include <utility>
|
|
|
| +#include "android_webview/browser/net/aw_web_resource_request.h"
|
| #include "android_webview/common/devtools_instrumentation.h"
|
| #include "android_webview/native/aw_contents_background_thread_client.h"
|
| #include "android_webview/native/aw_web_resource_response_impl.h"
|
| @@ -24,11 +25,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"
|
| -#include "url/gurl.h"
|
|
|
| using base::android::AttachCurrentThread;
|
| using base::android::ConvertUTF8ToJavaString;
|
| @@ -43,7 +40,6 @@ using content::WebContents;
|
| using std::map;
|
| using std::pair;
|
| using std::string;
|
| -using std::vector;
|
|
|
| namespace android_webview {
|
|
|
| @@ -158,51 +154,6 @@ void ClientMapEntryUpdater::WebContentsDestroyed() {
|
| delete this;
|
| }
|
|
|
| -struct WebResourceRequest {
|
| - std::string url;
|
| - std::string method;
|
| - bool is_main_frame;
|
| - bool has_user_gesture;
|
| - vector<string> header_names;
|
| - vector<string> header_values;
|
| -
|
| - ScopedJavaLocalRef<jstring> jstring_url;
|
| - ScopedJavaLocalRef<jstring> jstring_method;
|
| - ScopedJavaLocalRef<jobjectArray> jstringArray_header_names;
|
| - ScopedJavaLocalRef<jobjectArray> jstringArray_header_values;
|
| -
|
| - WebResourceRequest(const net::URLRequest* request)
|
| - : url(request->url().spec()),
|
| - method(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();
|
| -
|
| - 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());
|
| - }
|
| - }
|
| -
|
| - WebResourceRequest(JNIEnv* env, const net::URLRequest* request)
|
| - : WebResourceRequest(request) {
|
| - ConvertToJava(env);
|
| - }
|
| -
|
| - void ConvertToJava(JNIEnv* env) {
|
| - jstring_url = ConvertUTF8ToJavaString(env, url);
|
| - jstring_method = ConvertUTF8ToJavaString(env, method);
|
| - jstringArray_header_names = ToJavaArrayOfStrings(env, header_names);
|
| - jstringArray_header_values = ToJavaArrayOfStrings(env, header_values);
|
| - }
|
| -};
|
| -
|
| } // namespace
|
|
|
| // AwContentsIoThreadClientImpl -----------------------------------------------
|
| @@ -313,7 +264,7 @@ AwContentsIoThreadClientImpl::GetCacheMode() const {
|
| namespace {
|
|
|
| std::unique_ptr<AwWebResourceResponse> RunShouldInterceptRequest(
|
| - WebResourceRequest web_request,
|
| + const AwWebResourceRequest& request,
|
| JavaObjectWeakGlobalRef ref) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| JNIEnv* env = AttachCurrentThread();
|
| @@ -321,16 +272,17 @@ std::unique_ptr<AwWebResourceResponse> RunShouldInterceptRequest(
|
| if (obj.is_null())
|
| return nullptr;
|
|
|
| - web_request.ConvertToJava(env);
|
| + AwWebResourceRequest::AwJavaWebResourceRequest java_web_resource_request;
|
| + AwWebResourceRequest::ConvertToJava(env, request, &java_web_resource_request);
|
|
|
| devtools_instrumentation::ScopedEmbedderCallbackTask embedder_callback(
|
| "shouldInterceptRequest");
|
| ScopedJavaLocalRef<jobject> ret =
|
| AwContentsBackgroundThreadClient::shouldInterceptRequest(
|
| - env, obj, web_request.jstring_url, web_request.is_main_frame,
|
| - web_request.has_user_gesture, web_request.jstring_method,
|
| - web_request.jstringArray_header_names,
|
| - web_request.jstringArray_header_values);
|
| + env, obj, java_web_resource_request.jurl, request.is_main_frame,
|
| + request.has_user_gesture, java_web_resource_request.jmethod,
|
| + java_web_resource_request.jheader_names,
|
| + java_web_resource_request.jheader_values);
|
| return std::unique_ptr<AwWebResourceResponse>(
|
| ret.is_null() ? nullptr : new AwWebResourceResponseImpl(ret));
|
| }
|
| @@ -355,7 +307,7 @@ void AwContentsIoThreadClientImpl::ShouldInterceptRequestAsync(
|
| }
|
| if (!bg_thread_client_object_.is_null()) {
|
| get_response = base::Bind(
|
| - &RunShouldInterceptRequest, WebResourceRequest(request),
|
| + &RunShouldInterceptRequest, AwWebResourceRequest(*request),
|
| JavaObjectWeakGlobalRef(env, bg_thread_client_object_.obj()));
|
| }
|
| BrowserThread::PostTaskAndReplyWithResult(BrowserThread::FILE, FROM_HERE,
|
| @@ -401,69 +353,4 @@ bool AwContentsIoThreadClientImpl::ShouldBlockNetworkLoads() const {
|
| java_object_);
|
| }
|
|
|
| -void AwContentsIoThreadClientImpl::OnReceivedError(
|
| - const net::URLRequest* request) {
|
| - DCHECK_CURRENTLY_ON(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_, web_request.jstring_url, web_request.is_main_frame,
|
| - web_request.has_user_gesture, web_request.jstring_method,
|
| - web_request.jstringArray_header_names,
|
| - web_request.jstringArray_header_values, error_code, jstring_description);
|
| -}
|
| -
|
| -void AwContentsIoThreadClientImpl::OnReceivedHttpError(
|
| - const net::URLRequest* request,
|
| - const net::HttpResponseHeaders* response_headers) {
|
| - DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| - if (java_object_.is_null())
|
| - return;
|
| -
|
| - JNIEnv* env = AttachCurrentThread();
|
| - WebResourceRequest web_request(env, request);
|
| -
|
| - vector<string> response_header_names;
|
| - vector<string> response_header_values;
|
| - {
|
| - size_t headers_iterator = 0;
|
| - 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);
|
| - }
|
| - }
|
| -
|
| - 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_onReceivedHttpError(
|
| - env, java_object_, web_request.jstring_url, web_request.is_main_frame,
|
| - web_request.has_user_gesture, web_request.jstring_method,
|
| - web_request.jstringArray_header_names,
|
| - web_request.jstringArray_header_values, jstring_mime_type,
|
| - jstring_encoding, status_code, jstring_reason,
|
| - jstringArray_response_header_names, jstringArray_response_header_values);
|
| -}
|
| -
|
| } // namespace android_webview
|
|
|