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 EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIWE_PERMISSION_HELPER_DELEGATE_H_ 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIWE_PERMISSION_HELPER_DELEGATE_H_ 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/public/browser/web_contents.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/public/common/media_stream_request.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace extensions { 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// A delegate class of WebViewPermissionHelper to request permissions that are 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// not a part of extensions. 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class WebViewPermissionHelperDelegate : public content::WebContentsObserver { 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci explicit WebViewPermissionHelperDelegate( 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebViewPermissionHelper* web_view_permission_helper); 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~WebViewPermissionHelperDelegate(); 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 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) {} 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void RequestPointerLockPermission( 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool user_gesture, 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool last_unlocked_by_target, 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const base::Callback<void(bool)>& callback) {} 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Requests Geolocation Permission from the embedder. 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void RequestGeolocationPermission( 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int bridge_id, 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const GURL& requesting_frame, 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool user_gesture, 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const base::Callback<void(bool)>& callback) {} 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void CancelGeolocationPermissionRequest(int bridge_id) {} 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void RequestFileSystemPermission( 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const GURL& url, 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool allowed_by_default, 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const base::Callback<void(bool)>& callback) {} 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Called when file system access is requested by the guest content using the 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // asynchronous HTML5 file system API. The request is plumbed through the 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // <webview> permission request API. The request will be: 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - Allowed if the embedder explicitly allowed it. 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - Denied if the embedder explicitly denied. 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - Determined by the guest's content settings if the embedder does not 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // perform an explicit action. 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // If access was blocked due to the page's content settings, 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // |blocked_by_policy| should be true, and this function should invoke 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // OnContentBlocked. 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void FileSystemAccessedAsync( 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int render_process_id, 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int render_frame_id, 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int request_id, 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const GURL& url, 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool blocked_by_policy) {} 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Called when file system access is requested by the guest content using the 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // synchronous HTML5 file system API in a worker thread or shared worker. The 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // request is plumbed through the <webview> permission request API. The 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // request will be: 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - Allowed if the embedder explicitly allowed it. 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - Denied if the embedder explicitly denied. 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // - Determined by the guest's content settings if the embedder does not 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // perform an explicit action. 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // If access was blocked due to the page's content settings, 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // |blocked_by_policy| should be true, and this function should invoke 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // OnContentBlocked. 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void FileSystemAccessedSync( 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int render_process_id, 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) int render_frame_id, 796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const GURL& url, 806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool blocked_by_policy, 816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) IPC::Message* reply_msg) {} 826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebViewPermissionHelper* web_view_permission_helper() const { 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return web_view_permission_helper_; 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private: 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebViewPermissionHelper* const web_view_permission_helper_; 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebViewPermissionHelperDelegate); 916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace extensions 946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIWE_PERMISSION_HELPER_DELEGATE_H_ 96