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)