12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_CLIENT_BRIDGE_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_CLIENT_BRIDGE_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <jni.h>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "android_webview/browser/aw_contents_client_bridge_base.h"
110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/android/jni_weak_ref.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/android/scoped_java_ref.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/id_map.h"
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/javascript_dialog_manager.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace net {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class X509Certificate;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android_webview {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A class that handles the Java<->Native communication for the
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// AwContentsClient. AwContentsClientBridge is created and owned by
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// native AwContents class and it only has a weak reference to the
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// its Java peer. Since the Java AwContentsClientBridge can have
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// indirect refs from the Application (via callbacks) and so can outlive
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// webview, this class notifies it before being destroyed and to nullify
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// any references.
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AwContentsClientBridge : public AwContentsClientBridgeBase {
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AwContentsClientBridge(JNIEnv* env, jobject obj);
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~AwContentsClientBridge();
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // AwContentsClientBridgeBase implementation
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void AllowCertificateError(int cert_error,
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     net::X509Certificate* cert,
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     const GURL& request_url,
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     const base::Callback<void(bool)>& callback,
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     bool* cancel_request) OVERRIDE;
410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void SelectClientCertificate(
420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      net::SSLCertRequestInfo* cert_request_info,
430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      const SelectCertificateCallback& callback) OVERRIDE;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void RunJavaScriptDialog(
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      content::JavaScriptMessageType message_type,
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const GURL& origin_url,
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const base::string16& message_text,
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const base::string16& default_prompt_text,
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const content::JavaScriptDialogManager::DialogClosedCallback& callback)
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OVERRIDE;
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void RunBeforeUnloadDialog(
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const GURL& origin_url,
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const base::string16& message_text,
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const content::JavaScriptDialogManager::DialogClosedCallback& callback)
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OVERRIDE;
57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual bool ShouldOverrideUrlLoading(const base::string16& url) OVERRIDE;
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Methods called from Java.
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ProceedSslError(JNIEnv* env, jobject obj, jboolean proceed, jint id);
610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void ProvideClientCertificateResponse(JNIEnv* env, jobject object,
620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      jint request_id, jobjectArray encoded_chain_ref,
630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      jobject private_key_ref);
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void ConfirmJsResult(JNIEnv*, jobject, int id, jstring prompt);
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void CancelJsResult(JNIEnv*, jobject, int id);
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void HandleErrorInClientCertificateResponse(int id);
690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  JavaObjectWeakGlobalRef java_ref_;
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef const base::Callback<void(bool)> CertErrorCallback;
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  IDMap<CertErrorCallback, IDMapOwnPointer> pending_cert_error_callbacks_;
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  IDMap<content::JavaScriptDialogManager::DialogClosedCallback, IDMapOwnPointer>
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      pending_js_dialog_callbacks_;
760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  IDMap<SelectCertificateCallback, IDMapOwnPointer>
770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      pending_client_cert_request_callbacks_;
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RegisterAwContentsClientBridge(JNIEnv* env);
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace android_webview
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_CLIENT_BRIDGE_H_
85