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 3 // found in the LICENSE file. 4 5 #ifndef ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_CLIENT_BRIDGE_H_ 6 #define ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_CLIENT_BRIDGE_H_ 7 8 #include <jni.h> 9 10 #include "android_webview/browser/aw_contents_client_bridge_base.h" 11 #include "base/android/jni_weak_ref.h" 12 #include "base/android/scoped_java_ref.h" 13 #include "base/callback.h" 14 #include "base/id_map.h" 15 #include "content/public/browser/javascript_dialog_manager.h" 16 17 namespace net { 18 class X509Certificate; 19 } 20 21 namespace android_webview { 22 23 // A class that handles the Java<->Native communication for the 24 // AwContentsClient. AwContentsClientBridge is created and owned by 25 // native AwContents class and it only has a weak reference to the 26 // its Java peer. Since the Java AwContentsClientBridge can have 27 // indirect refs from the Application (via callbacks) and so can outlive 28 // webview, this class notifies it before being destroyed and to nullify 29 // any references. 30 class AwContentsClientBridge : public AwContentsClientBridgeBase { 31 public: 32 AwContentsClientBridge(JNIEnv* env, jobject obj); 33 virtual ~AwContentsClientBridge(); 34 35 // AwContentsClientBridgeBase implementation 36 virtual void AllowCertificateError(int cert_error, 37 net::X509Certificate* cert, 38 const GURL& request_url, 39 const base::Callback<void(bool)>& callback, 40 bool* cancel_request) OVERRIDE; 41 virtual void SelectClientCertificate( 42 net::SSLCertRequestInfo* cert_request_info, 43 const SelectCertificateCallback& callback) OVERRIDE; 44 45 virtual void RunJavaScriptDialog( 46 content::JavaScriptMessageType message_type, 47 const GURL& origin_url, 48 const base::string16& message_text, 49 const base::string16& default_prompt_text, 50 const content::JavaScriptDialogManager::DialogClosedCallback& callback) 51 OVERRIDE; 52 virtual void RunBeforeUnloadDialog( 53 const GURL& origin_url, 54 const base::string16& message_text, 55 const content::JavaScriptDialogManager::DialogClosedCallback& callback) 56 OVERRIDE; 57 virtual bool ShouldOverrideUrlLoading(const base::string16& url) OVERRIDE; 58 59 // Methods called from Java. 60 void ProceedSslError(JNIEnv* env, jobject obj, jboolean proceed, jint id); 61 void ProvideClientCertificateResponse(JNIEnv* env, jobject object, 62 jint request_id, jobjectArray encoded_chain_ref, 63 jobject private_key_ref); 64 void ConfirmJsResult(JNIEnv*, jobject, int id, jstring prompt); 65 void CancelJsResult(JNIEnv*, jobject, int id); 66 67 private: 68 void HandleErrorInClientCertificateResponse(int id); 69 70 JavaObjectWeakGlobalRef java_ref_; 71 72 typedef const base::Callback<void(bool)> CertErrorCallback; 73 IDMap<CertErrorCallback, IDMapOwnPointer> pending_cert_error_callbacks_; 74 IDMap<content::JavaScriptDialogManager::DialogClosedCallback, IDMapOwnPointer> 75 pending_js_dialog_callbacks_; 76 IDMap<SelectCertificateCallback, IDMapOwnPointer> 77 pending_client_cert_request_callbacks_; 78 }; 79 80 bool RegisterAwContentsClientBridge(JNIEnv* env); 81 82 } // namespace android_webview 83 84 #endif // ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_CLIENT_BRIDGE_H_ 85