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