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" | |
27 #include "net/ssl/openssl_client_key_store.h" | 26 #include "net/ssl/openssl_client_key_store.h" |
28 #include "net/ssl/ssl_cert_request_info.h" | 27 #include "net/ssl/ssl_cert_request_info.h" |
29 #include "net/ssl/ssl_client_cert_type.h" | 28 #include "net/ssl/ssl_client_cert_type.h" |
30 #include "net/ssl/ssl_platform_key_android.h" | 29 #include "net/ssl/ssl_platform_key_android.h" |
31 #include "net/ssl/ssl_private_key.h" | 30 #include "net/ssl/ssl_private_key.h" |
32 #include "ui/base/l10n/l10n_util.h" | 31 #include "ui/base/l10n/l10n_util.h" |
33 #include "url/gurl.h" | 32 #include "url/gurl.h" |
34 | 33 |
35 using base::android::AttachCurrentThread; | 34 using base::android::AttachCurrentThread; |
36 using base::android::ConvertJavaStringToUTF16; | 35 using base::android::ConvertJavaStringToUTF16; |
37 using base::android::ConvertUTF8ToJavaString; | 36 using base::android::ConvertUTF8ToJavaString; |
38 using base::android::ConvertUTF16ToJavaString; | 37 using base::android::ConvertUTF16ToJavaString; |
39 using base::android::HasException; | 38 using base::android::HasException; |
40 using base::android::JavaRef; | 39 using base::android::JavaRef; |
41 using base::android::ScopedJavaLocalRef; | 40 using base::android::ScopedJavaLocalRef; |
42 using base::android::ToJavaArrayOfStrings; | |
43 using content::BrowserThread; | 41 using content::BrowserThread; |
44 using std::vector; | |
45 | 42 |
46 namespace android_webview { | 43 namespace android_webview { |
47 | 44 |
48 namespace { | 45 namespace { |
49 | 46 |
50 // Must be called on the I/O thread to record a client certificate | 47 // Must be called on the I/O thread to record a client certificate |
51 // and its private key in the OpenSSLClientKeyStore. | 48 // and its private key in the OpenSSLClientKeyStore. |
52 void RecordClientCertificateKey(net::X509Certificate* client_cert, | 49 void RecordClientCertificateKey(net::X509Certificate* client_cert, |
53 scoped_refptr<net::SSLPrivateKey> private_key) { | 50 scoped_refptr<net::SSLPrivateKey> private_key) { |
54 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 51 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 ScopedJavaLocalRef<jstring> jargs = ConvertUTF8ToJavaString(env, args); | 404 ScopedJavaLocalRef<jstring> jargs = ConvertUTF8ToJavaString(env, args); |
408 | 405 |
409 ScopedJavaLocalRef<jstring> jaccount; | 406 ScopedJavaLocalRef<jstring> jaccount; |
410 if (!account.empty()) | 407 if (!account.empty()) |
411 jaccount = ConvertUTF8ToJavaString(env, account); | 408 jaccount = ConvertUTF8ToJavaString(env, account); |
412 | 409 |
413 Java_AwContentsClientBridge_newLoginRequest(env, obj, jrealm, jaccount, | 410 Java_AwContentsClientBridge_newLoginRequest(env, obj, jrealm, jaccount, |
414 jargs); | 411 jargs); |
415 } | 412 } |
416 | 413 |
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 | |
488 void AwContentsClientBridge::ConfirmJsResult(JNIEnv* env, | 414 void AwContentsClientBridge::ConfirmJsResult(JNIEnv* env, |
489 const JavaRef<jobject>&, | 415 const JavaRef<jobject>&, |
490 int id, | 416 int id, |
491 const JavaRef<jstring>& prompt) { | 417 const JavaRef<jstring>& prompt) { |
492 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 418 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
493 content::JavaScriptDialogManager::DialogClosedCallback* callback = | 419 content::JavaScriptDialogManager::DialogClosedCallback* callback = |
494 pending_js_dialog_callbacks_.Lookup(id); | 420 pending_js_dialog_callbacks_.Lookup(id); |
495 if (!callback) { | 421 if (!callback) { |
496 LOG(WARNING) << "Unexpected JS dialog confirm. " << id; | 422 LOG(WARNING) << "Unexpected JS dialog confirm. " << id; |
497 return; | 423 return; |
(...skipping 28 matching lines...) Expand all Loading... |
526 pending_client_cert_request_delegates_.Remove(request_id); | 452 pending_client_cert_request_delegates_.Remove(request_id); |
527 | 453 |
528 delete delegate; | 454 delete delegate; |
529 } | 455 } |
530 | 456 |
531 bool RegisterAwContentsClientBridge(JNIEnv* env) { | 457 bool RegisterAwContentsClientBridge(JNIEnv* env) { |
532 return RegisterNativesImpl(env); | 458 return RegisterNativesImpl(env); |
533 } | 459 } |
534 | 460 |
535 } // namespace android_webview | 461 } // namespace android_webview |
OLD | NEW |