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.
5 #ifndef ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_CLIENT_BRIDGE_H_
6 #define ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_CLIENT_BRIDGE_H_
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"
18 class X509Certificate
;
21 namespace android_webview
{
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
30 class AwContentsClientBridge
: public AwContentsClientBridgeBase
{
32 AwContentsClientBridge(JNIEnv
* env
, jobject obj
);
33 ~AwContentsClientBridge() override
;
35 // AwContentsClientBridgeBase implementation
36 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 void SelectClientCertificate(
42 net::SSLCertRequestInfo
* cert_request_info
,
43 scoped_ptr
<content::ClientCertificateDelegate
> delegate
) override
;
45 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
)
52 void RunBeforeUnloadDialog(
53 const GURL
& origin_url
,
54 const base::string16
& message_text
,
55 const content::JavaScriptDialogManager::DialogClosedCallback
& callback
)
57 bool ShouldOverrideUrlLoading(const base::string16
& url
) override
;
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
);
68 void HandleErrorInClientCertificateResponse(int id
);
70 JavaObjectWeakGlobalRef java_ref_
;
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 // |pending_client_cert_request_delegates_| owns its pointers, but IDMap
77 // doesn't provide Release, so ownership is managed manually.
78 IDMap
<content::ClientCertificateDelegate
>
79 pending_client_cert_request_delegates_
;
82 bool RegisterAwContentsClientBridge(JNIEnv
* env
);
84 } // namespace android_webview
86 #endif // ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_CLIENT_BRIDGE_H_