OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "android_webview/native/aw_contents_io_thread_client_impl.h" | 5 #include "android_webview/native/aw_contents_io_thread_client_impl.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "android_webview/common/devtools_instrumentation.h" | 10 #include "android_webview/common/devtools_instrumentation.h" |
11 #include "android_webview/native/aw_web_resource_response_impl.h" | 11 #include "android_webview/native/aw_web_resource_response_impl.h" |
12 #include "base/android/jni_array.h" | 12 #include "base/android/jni_array.h" |
13 #include "base/android/jni_string.h" | 13 #include "base/android/jni_string.h" |
14 #include "base/android/jni_weak_ref.h" | 14 #include "base/android/jni_weak_ref.h" |
15 #include "base/lazy_instance.h" | 15 #include "base/lazy_instance.h" |
16 #include "base/memory/linked_ptr.h" | 16 #include "base/memory/linked_ptr.h" |
17 #include "base/memory/scoped_ptr.h" | 17 #include "base/memory/scoped_ptr.h" |
18 #include "base/synchronization/lock.h" | 18 #include "base/synchronization/lock.h" |
19 #include "content/public/browser/browser_thread.h" | 19 #include "content/public/browser/browser_thread.h" |
20 #include "content/public/browser/render_frame_host.h" | 20 #include "content/public/browser/render_frame_host.h" |
21 #include "content/public/browser/render_process_host.h" | 21 #include "content/public/browser/render_process_host.h" |
22 #include "content/public/browser/render_view_host.h" | 22 #include "content/public/browser/render_view_host.h" |
23 #include "content/public/browser/resource_request_info.h" | 23 #include "content/public/browser/resource_request_info.h" |
24 #include "content/public/browser/web_contents.h" | 24 #include "content/public/browser/web_contents.h" |
25 #include "content/public/browser/web_contents_observer.h" | 25 #include "content/public/browser/web_contents_observer.h" |
26 #include "jni/AwContentsIoThreadClient_jni.h" | 26 #include "jni/AwContentsIoThreadClient_jni.h" |
27 #include "net/http/http_request_headers.h" | 27 #include "net/http/http_request_headers.h" |
| 28 #include "net/http/http_response_headers.h" |
28 #include "net/url_request/url_request.h" | 29 #include "net/url_request/url_request.h" |
29 #include "url/gurl.h" | 30 #include "url/gurl.h" |
30 | 31 |
31 using base::android::AttachCurrentThread; | 32 using base::android::AttachCurrentThread; |
32 using base::android::ConvertUTF8ToJavaString; | 33 using base::android::ConvertUTF8ToJavaString; |
33 using base::android::JavaRef; | 34 using base::android::JavaRef; |
34 using base::android::ScopedJavaLocalRef; | 35 using base::android::ScopedJavaLocalRef; |
35 using base::android::ToJavaArrayOfStrings; | 36 using base::android::ToJavaArrayOfStrings; |
36 using base::LazyInstance; | 37 using base::LazyInstance; |
37 using content::BrowserThread; | 38 using content::BrowserThread; |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 ScopedJavaLocalRef<jstring> jargs = ConvertUTF8ToJavaString(env, args); | 369 ScopedJavaLocalRef<jstring> jargs = ConvertUTF8ToJavaString(env, args); |
369 | 370 |
370 ScopedJavaLocalRef<jstring> jaccount; | 371 ScopedJavaLocalRef<jstring> jaccount; |
371 if (!account.empty()) | 372 if (!account.empty()) |
372 jaccount = ConvertUTF8ToJavaString(env, account); | 373 jaccount = ConvertUTF8ToJavaString(env, account); |
373 | 374 |
374 Java_AwContentsIoThreadClient_newLoginRequest( | 375 Java_AwContentsIoThreadClient_newLoginRequest( |
375 env, java_object_.obj(), jrealm.obj(), jaccount.obj(), jargs.obj()); | 376 env, java_object_.obj(), jrealm.obj(), jaccount.obj(), jargs.obj()); |
376 } | 377 } |
377 | 378 |
| 379 void AwContentsIoThreadClientImpl::OnReceivedHttpError( |
| 380 const net::URLRequest* request, |
| 381 const net::HttpResponseHeaders* response_headers) { |
| 382 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 383 if (java_object_.is_null()) |
| 384 return; |
| 385 |
| 386 vector<string> request_header_names; |
| 387 vector<string> request_header_values; |
| 388 { |
| 389 net::HttpRequestHeaders headers; |
| 390 if (!request->GetFullRequestHeaders(&headers)) |
| 391 headers = request->extra_request_headers(); |
| 392 net::HttpRequestHeaders::Iterator headers_iterator(headers); |
| 393 while (headers_iterator.GetNext()) { |
| 394 request_header_names.push_back(headers_iterator.name()); |
| 395 request_header_values.push_back(headers_iterator.value()); |
| 396 } |
| 397 } |
| 398 |
| 399 vector<string> response_header_names; |
| 400 vector<string> response_header_values; |
| 401 { |
| 402 void* headers_iterator = NULL; |
| 403 string header_name, header_value; |
| 404 while (response_headers->EnumerateHeaderLines( |
| 405 &headers_iterator, &header_name, &header_value)) { |
| 406 response_header_names.push_back(header_name); |
| 407 response_header_values.push_back(header_value); |
| 408 } |
| 409 } |
| 410 |
| 411 JNIEnv* env = AttachCurrentThread(); |
| 412 ScopedJavaLocalRef<jstring> jstring_url = |
| 413 ConvertUTF8ToJavaString(env, request->url().spec()); |
| 414 ScopedJavaLocalRef<jstring> jstring_method = |
| 415 ConvertUTF8ToJavaString(env, request->method()); |
| 416 ScopedJavaLocalRef<jobjectArray> jstringArray_request_header_names = |
| 417 ToJavaArrayOfStrings(env, request_header_names); |
| 418 ScopedJavaLocalRef<jobjectArray> jstringArray_request_header_values = |
| 419 ToJavaArrayOfStrings(env, request_header_values); |
| 420 |
| 421 const content::ResourceRequestInfo* info = |
| 422 content::ResourceRequestInfo::ForRequest(request); |
| 423 bool is_main_frame = info && |
| 424 info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME; |
| 425 bool has_user_gesture = info && info->HasUserGesture(); |
| 426 |
| 427 string mime_type, encoding; |
| 428 response_headers->GetMimeTypeAndCharset(&mime_type, &encoding); |
| 429 ScopedJavaLocalRef<jstring> jstring_mime_type = |
| 430 ConvertUTF8ToJavaString(env, mime_type); |
| 431 ScopedJavaLocalRef<jstring> jstring_encoding = |
| 432 ConvertUTF8ToJavaString(env, encoding); |
| 433 int status_code = response_headers->response_code(); |
| 434 ScopedJavaLocalRef<jstring> jstring_reason = |
| 435 ConvertUTF8ToJavaString(env, response_headers->GetStatusText()); |
| 436 ScopedJavaLocalRef<jobjectArray> jstringArray_response_header_names = |
| 437 ToJavaArrayOfStrings(env, response_header_names); |
| 438 ScopedJavaLocalRef<jobjectArray> jstringArray_response_header_values = |
| 439 ToJavaArrayOfStrings(env, response_header_values); |
| 440 |
| 441 Java_AwContentsIoThreadClient_onReceivedHttpError( |
| 442 env, |
| 443 java_object_.obj(), |
| 444 jstring_url.obj(), |
| 445 is_main_frame, |
| 446 has_user_gesture, |
| 447 jstring_method.obj(), |
| 448 jstringArray_request_header_names.obj(), |
| 449 jstringArray_request_header_values.obj(), |
| 450 jstring_mime_type.obj(), |
| 451 jstring_encoding.obj(), |
| 452 status_code, |
| 453 jstring_reason.obj(), |
| 454 jstringArray_response_header_names.obj(), |
| 455 jstringArray_response_header_values.obj()); |
| 456 } |
| 457 |
378 bool RegisterAwContentsIoThreadClientImpl(JNIEnv* env) { | 458 bool RegisterAwContentsIoThreadClientImpl(JNIEnv* env) { |
379 return RegisterNativesImpl(env); | 459 return RegisterNativesImpl(env); |
380 } | 460 } |
381 | 461 |
382 } // namespace android_webview | 462 } // namespace android_webview |
OLD | NEW |