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_BROWSER_AW_CONTENTS_CLIENT_BRIDGE_BASE_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ANDROID_WEBVIEW_BROWSER_AW_CONTENTS_CLIENT_BRIDGE_BASE_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback_forward.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/supports_user_data.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/javascript_dialog_manager.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class GURL;
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content {
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebContents;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace net {
190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass SSLCertRequestInfo;
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class X509Certificate;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android_webview {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// browser/ layer interface for AwContensClientBridge, as DEPS prevents this
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// layer from depending on native/ where the implementation lives. The
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// implementor of the base class plumbs the request to the Java side and
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// eventually to the webviewclient. This layering hides the details of
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// native/ from browser/ layer.
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AwContentsClientBridgeBase {
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  typedef base::Callback<void(net::X509Certificate*)> SelectCertificateCallback;
330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Adds the handler to the UserData registry.
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static void Associate(content::WebContents* web_contents,
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        AwContentsClientBridgeBase* handler);
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  static void Disassociate(content::WebContents* web_contents);
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static AwContentsClientBridgeBase* FromWebContents(
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::WebContents* web_contents);
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static AwContentsClientBridgeBase* FromID(int render_process_id,
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                            int render_frame_id);
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~AwContentsClientBridgeBase();
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void AllowCertificateError(int cert_error,
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     net::X509Certificate* cert,
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     const GURL& request_url,
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     const base::Callback<void(bool)>& callback,
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     bool* cancel_request) = 0;
500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void SelectClientCertificate(
510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      net::SSLCertRequestInfo* cert_request_info,
520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      const SelectCertificateCallback& callback) = 0;
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void RunJavaScriptDialog(
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      content::JavaScriptMessageType message_type,
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const GURL& origin_url,
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const base::string16& message_text,
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const base::string16& default_prompt_text,
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const content::JavaScriptDialogManager::DialogClosedCallback& callback)
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      = 0;
61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void RunBeforeUnloadDialog(
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const GURL& origin_url,
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const base::string16& message_text,
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const content::JavaScriptDialogManager::DialogClosedCallback& callback)
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      = 0;
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual bool ShouldOverrideUrlLoading(const base::string16& url) = 0;
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace android_webview
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // ANDROID_WEBVIEW_BROWSER_AW_CONTENTS_CLIENT_BRIDGE_BASE_H_
74