| 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 555cd83cb08e0545e879318b4c03670516f74aef..3b038adaa55c944117279babec31cdc454e87337 100644
|
| --- a/android_webview/native/aw_contents_io_thread_client_impl.cc
|
| +++ b/android_webview/native/aw_contents_io_thread_client_impl.cc
|
| @@ -9,6 +9,7 @@
|
|
|
| #include "android_webview/common/devtools_instrumentation.h"
|
| #include "android_webview/native/intercepted_request_data_impl.h"
|
| +#include "base/android/jni_array.h"
|
| #include "base/android/jni_string.h"
|
| #include "base/android/jni_weak_ref.h"
|
| #include "base/lazy_instance.h"
|
| @@ -23,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/http/http_request_headers.h"
|
| #include "net/url_request/url_request.h"
|
| #include "url/gurl.h"
|
|
|
| @@ -30,12 +32,15 @@ using base::android::AttachCurrentThread;
|
| using base::android::ConvertUTF8ToJavaString;
|
| using base::android::JavaRef;
|
| using base::android::ScopedJavaLocalRef;
|
| +using base::android::ToJavaArrayOfStrings;
|
| using base::LazyInstance;
|
| using content::BrowserThread;
|
| using content::RenderFrameHost;
|
| using content::WebContents;
|
| using std::map;
|
| using std::pair;
|
| +using std::string;
|
| +using std::vector;
|
|
|
| namespace android_webview {
|
|
|
| @@ -238,15 +243,42 @@ AwContentsIoThreadClientImpl::ShouldInterceptRequest(
|
| content::ResourceRequestInfo::ForRequest(request);
|
| bool is_main_frame = info &&
|
| info->GetResourceType() == ResourceType::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);
|
| devtools_instrumentation::ScopedEmbedderCallbackTask embedder_callback(
|
| "shouldInterceptRequest");
|
| ScopedJavaLocalRef<jobject> ret =
|
| Java_AwContentsIoThreadClient_shouldInterceptRequest(
|
| - env, java_object_.obj(), jstring_url.obj(), is_main_frame);
|
| + env,
|
| + java_object_.obj(),
|
| + jstring_url.obj(),
|
| + is_main_frame,
|
| + has_user_gesture,
|
| + jstring_method.obj(),
|
| + jstringArray_headers_names.obj(),
|
| + jstringArray_headers_values.obj());
|
| if (ret.is_null())
|
| return scoped_ptr<InterceptedRequestData>();
|
| return scoped_ptr<InterceptedRequestData>(
|
| @@ -285,9 +317,9 @@ bool AwContentsIoThreadClientImpl::ShouldBlockNetworkLoads() const {
|
|
|
| void AwContentsIoThreadClientImpl::NewDownload(
|
| const GURL& url,
|
| - const std::string& user_agent,
|
| - const std::string& content_disposition,
|
| - const std::string& mime_type,
|
| + const string& user_agent,
|
| + const string& content_disposition,
|
| + const string& mime_type,
|
| int64 content_length) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| if (java_object_.is_null())
|
| @@ -313,9 +345,9 @@ void AwContentsIoThreadClientImpl::NewDownload(
|
| content_length);
|
| }
|
|
|
| -void AwContentsIoThreadClientImpl::NewLoginRequest(const std::string& realm,
|
| - const std::string& account,
|
| - const std::string& args) {
|
| +void AwContentsIoThreadClientImpl::NewLoginRequest(const string& realm,
|
| + const string& account,
|
| + const string& args) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| if (java_object_.is_null())
|
| return;
|
|
|