| 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 fd47138691a3efcdcfd2923706d07aa8ef0f0955..a6912a8f074f0116f4738f631c4dd8b31cb67e57 100644
|
| --- a/android_webview/native/aw_contents_io_thread_client_impl.cc
|
| +++ b/android_webview/native/aw_contents_io_thread_client_impl.cc
|
| @@ -8,7 +8,8 @@
|
| #include <utility>
|
|
|
| #include "android_webview/common/devtools_instrumentation.h"
|
| -#include "android_webview/native/intercepted_request_data_impl.h"
|
| +#include "android_webview/native/aw_web_resource_response_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 {
|
|
|
| @@ -227,30 +232,57 @@ AwContentsIoThreadClientImpl::GetCacheMode() const {
|
| env, java_object_.obj()));
|
| }
|
|
|
| -scoped_ptr<InterceptedRequestData>
|
| +scoped_ptr<AwWebResourceResponse>
|
| AwContentsIoThreadClientImpl::ShouldInterceptRequest(
|
| const GURL& location,
|
| const net::URLRequest* request) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| if (java_object_.is_null())
|
| - return scoped_ptr<InterceptedRequestData>();
|
| + return scoped_ptr<AwWebResourceResponse>();
|
| const content::ResourceRequestInfo* info =
|
| 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>(
|
| - new InterceptedRequestDataImpl(ret));
|
| + return scoped_ptr<AwWebResourceResponse>();
|
| + return scoped_ptr<AwWebResourceResponse>(
|
| + new AwWebResourceResponseImpl(ret));
|
| }
|
|
|
| bool AwContentsIoThreadClientImpl::ShouldBlockContentUrls() const {
|
| @@ -295,9 +327,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())
|
| @@ -323,9 +355,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;
|
|
|