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 |