16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#ifndef CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_CHROME_WEB_VIEW_PERMISSION_HELPER_DELEGATE_H_
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_CHROME_WEB_VIEW_PERMISSION_HELPER_DELEGATE_H_
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h"
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/guest_view/web_view/web_view_permission_helper_delegate.h"
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace extensions {
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class WebViewGuest;
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class ChromeWebViewPermissionHelperDelegate :
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  public extensions::WebViewPermissionHelperDelegate {
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public:
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  explicit ChromeWebViewPermissionHelperDelegate(
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      extensions::WebViewPermissionHelper* web_view_permission_helper);
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual ~ChromeWebViewPermissionHelperDelegate();
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // WebViewPermissionHelperDelegate implementation.
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void CanDownload(
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      content::RenderViewHost* render_view_host,
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const GURL& url,
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const std::string& request_method,
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const base::Callback<void(bool)>& callback) OVERRIDE;
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void RequestPointerLockPermission(
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      bool user_gesture,
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      bool last_unlocked_by_target,
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const base::Callback<void(bool)>& callback) OVERRIDE;
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void RequestGeolocationPermission(
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int bridge_id,
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const GURL& requesting_frame,
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      bool user_gesture,
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const base::Callback<void(bool)>& callback) OVERRIDE;
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void CancelGeolocationPermissionRequest(int bridge_id) OVERRIDE;
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void RequestFileSystemPermission(
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const GURL& url,
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      bool allowed_by_default,
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const base::Callback<void(bool)>& callback) OVERRIDE;
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void FileSystemAccessedAsync(
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int render_process_id,
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int render_frame_id,
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int request_id,
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const GURL& url,
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      bool blocked_by_policy) OVERRIDE;
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void FileSystemAccessedSync(
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int render_process_id,
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int render_frame_id,
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const GURL& url,
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      bool blocked_by_policy,
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      IPC::Message* reply_msg) OVERRIDE;
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_PLUGINS)
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // content::WebContentsObserver implementation.
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual bool OnMessageReceived(
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const IPC::Message& message,
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      content::RenderFrameHost* render_frame_host) OVERRIDE;
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif  // defined(ENABLE_PLUGINS)
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private:
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_PLUGINS)
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Message handlers:
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnBlockedUnauthorizedPlugin(const base::string16& name,
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                   const std::string& identifier);
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnCouldNotLoadPlugin(const base::FilePath& plugin_path);
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnBlockedOutdatedPlugin(int placeholder_id,
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                               const std::string& identifier);
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnNPAPINotSupported(const std::string& identifier);
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnOpenAboutPlugins();
726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(ENABLE_PLUGIN_INSTALLATION)
736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnFindMissingPlugin(int placeholder_id, const std::string& mime_type);
746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnRemovePluginPlaceholderHost(int placeholder_id);
766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif  // defined(ENABLE_PLUGIN_INSTALLATION)
776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnPermissionResponse(const std::string& identifier,
796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                            bool allow,
806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                            const std::string& user_input);
816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif  // defined(ENABLE_PLUGINS)
826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnGeolocationPermissionResponse(
846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int bridge_id,
856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      bool user_gesture,
866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const base::Callback<void(bool)>& callback,
876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      bool allow,
886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const std::string& user_input);
896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnFileSystemPermissionResponse(
916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const base::Callback<void(bool)>& callback,
926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      bool allow,
936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const std::string& user_input);
946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnDownloadPermissionResponse(
966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const base::Callback<void(bool)>& callback,
976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      bool allow,
986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const std::string& user_input);
996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnPointerLockPermissionResponse(
1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const base::Callback<void(bool)>& callback,
1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      bool allow,
1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const std::string& user_input);
1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Bridge IDs correspond to a geolocation request. This method will remove
1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // the bookkeeping for a particular geolocation request associated with the
1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // provided |bridge_id|. It returns the request ID of the geolocation request.
1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  int RemoveBridgeID(int bridge_id);
1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void FileSystemAccessedAsyncResponse(int render_process_id,
1116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                       int render_frame_id,
1126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                       int request_id,
1136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                       const GURL& url,
1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                       bool allowed);
1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void FileSystemAccessedSyncResponse(int render_process_id,
1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                      int render_frame_id,
1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                      const GURL& url,
1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                      IPC::Message* reply_msg,
1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                      bool allowed);
1216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  extensions::WebViewGuest* web_view_guest() {
12303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    return web_view_permission_helper()->web_view_guest();
12403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  std::map<int, int> bridge_id_to_request_id_map_;
1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::WeakPtrFactory<ChromeWebViewPermissionHelperDelegate> weak_factory_;
1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChromeWebViewPermissionHelperDelegate);
1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif  // CHROME_BROWSER_GUEST_VIEW_WEB_VIEW_CHROME_WEB_VIEW_PERMISSION_HELPER_DELEGATE_H_
1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)