Chromium Code Reviews| 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 ScopedJavaLocalRef<jstring> jurl = ConvertUTF8ToJavaString(env, request.url); | |
| 430 ScopedJavaLocalRef<jstring> jmethod = | |
| 431 ConvertUTF8ToJavaString(env, request.method); | |
| 432 ScopedJavaLocalRef<jobjectArray> jheader_names = | |
| 433 ToJavaArrayOfStrings(env, request.header_names); | |
| 434 ScopedJavaLocalRef<jobjectArray> jheader_values = | |
| 435 ToJavaArrayOfStrings(env, request.header_values); | |
| 436 | |
| 437 Java_AwContentsClientBridge_onReceivedError( | |
| 438 env, obj, jurl, request.is_main_frame, request.has_user_gesture, jmethod, | |
| 439 jheader_names, jheader_values, error_code, jstring_description); | |
| 440 } | |
| 441 | |
| 442 void AwContentsClientBridge::OnReceivedHttpError( | |
| 443 const AwWebResourceRequest& request, | |
| 444 const scoped_refptr<const net::HttpResponseHeaders>& response_headers) { | |
| 445 DCHECK_CURRENTLY_ON(BrowserThread::UI); | |
| 446 JNIEnv* env = AttachCurrentThread(); | |
| 447 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | |
| 448 if (obj.is_null()) | |
| 449 return; | |
| 450 | |
| 451 ScopedJavaLocalRef<jstring> jurl = ConvertUTF8ToJavaString(env, request.url); | |
|
boliu
2016/12/08 05:48:38
this bunch of stuff is duplicated here and above..
sgurun-gerrit only
2016/12/08 21:56:46
used three times actually.
done.
| |
| 452 ScopedJavaLocalRef<jstring> jmethod = | |
| 453 ConvertUTF8ToJavaString(env, request.method); | |
| 454 ScopedJavaLocalRef<jobjectArray> jheader_names = | |
| 455 ToJavaArrayOfStrings(env, request.header_names); | |
| 456 ScopedJavaLocalRef<jobjectArray> jheader_values = | |
| 457 ToJavaArrayOfStrings(env, request.header_values); | |
| 458 | |
| 459 vector<std::string> response_header_names; | |
| 460 vector<std::string> response_header_values; | |
| 461 | |
| 462 { | |
| 463 size_t headers_iterator = 0; | |
| 464 std::string header_name, header_value; | |
| 465 while (response_headers->EnumerateHeaderLines( | |
| 466 &headers_iterator, &header_name, &header_value)) { | |
| 467 response_header_names.push_back(header_name); | |
| 468 response_header_values.push_back(header_value); | |
| 469 } | |
| 470 } | |
| 471 | |
| 472 std::string mime_type, encoding; | |
| 473 response_headers->GetMimeTypeAndCharset(&mime_type, &encoding); | |
| 474 ScopedJavaLocalRef<jstring> jstring_mime_type = | |
| 475 ConvertUTF8ToJavaString(env, mime_type); | |
| 476 ScopedJavaLocalRef<jstring> jstring_encoding = | |
| 477 ConvertUTF8ToJavaString(env, encoding); | |
| 478 int status_code = response_headers->response_code(); | |
| 479 ScopedJavaLocalRef<jstring> jstring_reason = | |
| 480 ConvertUTF8ToJavaString(env, response_headers->GetStatusText()); | |
| 481 ScopedJavaLocalRef<jobjectArray> jstringArray_response_header_names = | |
| 482 ToJavaArrayOfStrings(env, response_header_names); | |
| 483 ScopedJavaLocalRef<jobjectArray> jstringArray_response_header_values = | |
| 484 ToJavaArrayOfStrings(env, response_header_values); | |
| 485 | |
| 486 Java_AwContentsClientBridge_onReceivedHttpError( | |
| 487 env, obj, jurl, request.is_main_frame, request.has_user_gesture, jmethod, | |
| 488 jheader_names, jheader_values, jstring_mime_type, jstring_encoding, | |
| 489 status_code, jstring_reason, jstringArray_response_header_names, | |
| 490 jstringArray_response_header_values); | |
| 491 } | |
| 492 | |
| 414 void AwContentsClientBridge::ConfirmJsResult(JNIEnv* env, | 493 void AwContentsClientBridge::ConfirmJsResult(JNIEnv* env, |
| 415 const JavaRef<jobject>&, | 494 const JavaRef<jobject>&, |
| 416 int id, | 495 int id, |
| 417 const JavaRef<jstring>& prompt) { | 496 const JavaRef<jstring>& prompt) { |
| 418 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 497 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 419 content::JavaScriptDialogManager::DialogClosedCallback* callback = | 498 content::JavaScriptDialogManager::DialogClosedCallback* callback = |
| 420 pending_js_dialog_callbacks_.Lookup(id); | 499 pending_js_dialog_callbacks_.Lookup(id); |
| 421 if (!callback) { | 500 if (!callback) { |
| 422 LOG(WARNING) << "Unexpected JS dialog confirm. " << id; | 501 LOG(WARNING) << "Unexpected JS dialog confirm. " << id; |
| 423 return; | 502 return; |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 452 pending_client_cert_request_delegates_.Remove(request_id); | 531 pending_client_cert_request_delegates_.Remove(request_id); |
| 453 | 532 |
| 454 delete delegate; | 533 delete delegate; |
| 455 } | 534 } |
| 456 | 535 |
| 457 bool RegisterAwContentsClientBridge(JNIEnv* env) { | 536 bool RegisterAwContentsClientBridge(JNIEnv* env) { |
| 458 return RegisterNativesImpl(env); | 537 return RegisterNativesImpl(env); |
| 459 } | 538 } |
| 460 | 539 |
| 461 } // namespace android_webview | 540 } // namespace android_webview |
| OLD | NEW |