OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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_client_bridge.h" | 5 #include "android_webview/native/aw_contents_client_bridge.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
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_contents.h" | 11 #include "android_webview/native/aw_contents.h" |
12 #include "base/android/jni_android.h" | 12 #include "base/android/jni_android.h" |
13 #include "base/android/jni_array.h" | 13 #include "base/android/jni_array.h" |
14 #include "base/android/jni_string.h" | 14 #include "base/android/jni_string.h" |
15 #include "base/callback_helpers.h" | 15 #include "base/callback_helpers.h" |
16 #include "base/macros.h" | 16 #include "base/macros.h" |
17 #include "base/memory/ref_counted.h" | 17 #include "base/memory/ref_counted.h" |
18 #include "content/public/browser/browser_thread.h" | 18 #include "content/public/browser/browser_thread.h" |
19 #include "content/public/browser/client_certificate_delegate.h" | 19 #include "content/public/browser/client_certificate_delegate.h" |
20 #include "content/public/browser/render_process_host.h" | 20 #include "content/public/browser/render_process_host.h" |
21 #include "content/public/browser/render_view_host.h" | 21 #include "content/public/browser/render_view_host.h" |
22 #include "content/public/browser/web_contents.h" | 22 #include "content/public/browser/web_contents.h" |
23 #include "grit/components_strings.h" | 23 #include "grit/components_strings.h" |
24 #include "jni/AwContentsClientBridge_jni.h" | 24 #include "jni/AwContentsClientBridge_jni.h" |
25 #include "net/cert/x509_certificate.h" | 25 #include "net/cert/x509_certificate.h" |
| 26 #include "net/http/http_response_headers.h" |
26 #include "net/ssl/openssl_client_key_store.h" | 27 #include "net/ssl/openssl_client_key_store.h" |
27 #include "net/ssl/ssl_cert_request_info.h" | 28 #include "net/ssl/ssl_cert_request_info.h" |
28 #include "net/ssl/ssl_client_cert_type.h" | 29 #include "net/ssl/ssl_client_cert_type.h" |
29 #include "net/ssl/ssl_platform_key_android.h" | 30 #include "net/ssl/ssl_platform_key_android.h" |
30 #include "net/ssl/ssl_private_key.h" | 31 #include "net/ssl/ssl_private_key.h" |
31 #include "ui/base/l10n/l10n_util.h" | 32 #include "ui/base/l10n/l10n_util.h" |
32 #include "url/gurl.h" | 33 #include "url/gurl.h" |
33 | 34 |
34 using base::android::AttachCurrentThread; | 35 using base::android::AttachCurrentThread; |
35 using base::android::ConvertJavaStringToUTF16; | 36 using base::android::ConvertJavaStringToUTF16; |
36 using base::android::ConvertUTF8ToJavaString; | 37 using base::android::ConvertUTF8ToJavaString; |
37 using base::android::ConvertUTF16ToJavaString; | 38 using base::android::ConvertUTF16ToJavaString; |
38 using base::android::HasException; | 39 using base::android::HasException; |
39 using base::android::JavaRef; | 40 using base::android::JavaRef; |
40 using base::android::ScopedJavaLocalRef; | 41 using base::android::ScopedJavaLocalRef; |
| 42 using base::android::ToJavaArrayOfStrings; |
41 using content::BrowserThread; | 43 using content::BrowserThread; |
| 44 using std::vector; |
42 | 45 |
43 namespace android_webview { | 46 namespace android_webview { |
44 | 47 |
45 namespace { | 48 namespace { |
46 | 49 |
47 // Must be called on the I/O thread to record a client certificate | 50 // Must be called on the I/O thread to record a client certificate |
48 // and its private key in the OpenSSLClientKeyStore. | 51 // and its private key in the OpenSSLClientKeyStore. |
49 void RecordClientCertificateKey(net::X509Certificate* client_cert, | 52 void RecordClientCertificateKey(net::X509Certificate* client_cert, |
50 scoped_refptr<net::SSLPrivateKey> private_key) { | 53 scoped_refptr<net::SSLPrivateKey> private_key) { |
51 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 54 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 ScopedJavaLocalRef<jstring> jargs = ConvertUTF8ToJavaString(env, args); | 407 ScopedJavaLocalRef<jstring> jargs = ConvertUTF8ToJavaString(env, args); |
405 | 408 |
406 ScopedJavaLocalRef<jstring> jaccount; | 409 ScopedJavaLocalRef<jstring> jaccount; |
407 if (!account.empty()) | 410 if (!account.empty()) |
408 jaccount = ConvertUTF8ToJavaString(env, account); | 411 jaccount = ConvertUTF8ToJavaString(env, account); |
409 | 412 |
410 Java_AwContentsClientBridge_newLoginRequest(env, obj, jrealm, jaccount, | 413 Java_AwContentsClientBridge_newLoginRequest(env, obj, jrealm, jaccount, |
411 jargs); | 414 jargs); |
412 } | 415 } |
413 | 416 |
| 417 void AwContentsClientBridge::OnReceivedError( |
| 418 const AwWebResourceRequest& request, |
| 419 int error_code) { |
| 420 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 421 JNIEnv* env = AttachCurrentThread(); |
| 422 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 423 if (obj.is_null()) |
| 424 return; |
| 425 |
| 426 ScopedJavaLocalRef<jstring> jstring_description = |
| 427 ConvertUTF8ToJavaString(env, net::ErrorToString(error_code)); |
| 428 |
| 429 AwWebResourceRequest::AwJavaWebResourceRequest java_web_resource_request; |
| 430 AwWebResourceRequest::ConvertToJava(env, request, &java_web_resource_request); |
| 431 |
| 432 Java_AwContentsClientBridge_onReceivedError( |
| 433 env, obj, java_web_resource_request.jurl, request.is_main_frame, |
| 434 request.has_user_gesture, java_web_resource_request.jmethod, |
| 435 java_web_resource_request.jheader_names, |
| 436 java_web_resource_request.jheader_values, error_code, |
| 437 jstring_description); |
| 438 } |
| 439 |
| 440 void AwContentsClientBridge::OnReceivedHttpError( |
| 441 const AwWebResourceRequest& request, |
| 442 const scoped_refptr<const net::HttpResponseHeaders>& response_headers) { |
| 443 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 444 JNIEnv* env = AttachCurrentThread(); |
| 445 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 446 if (obj.is_null()) |
| 447 return; |
| 448 |
| 449 AwWebResourceRequest::AwJavaWebResourceRequest java_web_resource_request; |
| 450 AwWebResourceRequest::ConvertToJava(env, request, &java_web_resource_request); |
| 451 |
| 452 vector<std::string> response_header_names; |
| 453 vector<std::string> response_header_values; |
| 454 |
| 455 { |
| 456 size_t headers_iterator = 0; |
| 457 std::string header_name, header_value; |
| 458 while (response_headers->EnumerateHeaderLines( |
| 459 &headers_iterator, &header_name, &header_value)) { |
| 460 response_header_names.push_back(header_name); |
| 461 response_header_values.push_back(header_value); |
| 462 } |
| 463 } |
| 464 |
| 465 std::string mime_type, encoding; |
| 466 response_headers->GetMimeTypeAndCharset(&mime_type, &encoding); |
| 467 ScopedJavaLocalRef<jstring> jstring_mime_type = |
| 468 ConvertUTF8ToJavaString(env, mime_type); |
| 469 ScopedJavaLocalRef<jstring> jstring_encoding = |
| 470 ConvertUTF8ToJavaString(env, encoding); |
| 471 int status_code = response_headers->response_code(); |
| 472 ScopedJavaLocalRef<jstring> jstring_reason = |
| 473 ConvertUTF8ToJavaString(env, response_headers->GetStatusText()); |
| 474 ScopedJavaLocalRef<jobjectArray> jstringArray_response_header_names = |
| 475 ToJavaArrayOfStrings(env, response_header_names); |
| 476 ScopedJavaLocalRef<jobjectArray> jstringArray_response_header_values = |
| 477 ToJavaArrayOfStrings(env, response_header_values); |
| 478 |
| 479 Java_AwContentsClientBridge_onReceivedHttpError( |
| 480 env, obj, java_web_resource_request.jurl, request.is_main_frame, |
| 481 request.has_user_gesture, java_web_resource_request.jmethod, |
| 482 java_web_resource_request.jheader_names, |
| 483 java_web_resource_request.jheader_values, jstring_mime_type, |
| 484 jstring_encoding, status_code, jstring_reason, |
| 485 jstringArray_response_header_names, jstringArray_response_header_values); |
| 486 } |
| 487 |
414 void AwContentsClientBridge::ConfirmJsResult(JNIEnv* env, | 488 void AwContentsClientBridge::ConfirmJsResult(JNIEnv* env, |
415 const JavaRef<jobject>&, | 489 const JavaRef<jobject>&, |
416 int id, | 490 int id, |
417 const JavaRef<jstring>& prompt) { | 491 const JavaRef<jstring>& prompt) { |
418 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 492 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
419 content::JavaScriptDialogManager::DialogClosedCallback* callback = | 493 content::JavaScriptDialogManager::DialogClosedCallback* callback = |
420 pending_js_dialog_callbacks_.Lookup(id); | 494 pending_js_dialog_callbacks_.Lookup(id); |
421 if (!callback) { | 495 if (!callback) { |
422 LOG(WARNING) << "Unexpected JS dialog confirm. " << id; | 496 LOG(WARNING) << "Unexpected JS dialog confirm. " << id; |
423 return; | 497 return; |
(...skipping 28 matching lines...) Expand all Loading... |
452 pending_client_cert_request_delegates_.Remove(request_id); | 526 pending_client_cert_request_delegates_.Remove(request_id); |
453 | 527 |
454 delete delegate; | 528 delete delegate; |
455 } | 529 } |
456 | 530 |
457 bool RegisterAwContentsClientBridge(JNIEnv* env) { | 531 bool RegisterAwContentsClientBridge(JNIEnv* env) { |
458 return RegisterNativesImpl(env); | 532 return RegisterNativesImpl(env); |
459 } | 533 } |
460 | 534 |
461 } // namespace android_webview | 535 } // namespace android_webview |
OLD | NEW |