web_view_permission_helper_delegate.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project// Copyright 2014 The Chromium Authors. All rights reserved.
2105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project// Use of this source code is governed by a BSD-style license that can be
3105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project// found in the LICENSE file.
4105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
5105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIWE_PERMISSION_HELPER_DELEGATE_H_
6105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project#define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIWE_PERMISSION_HELPER_DELEGATE_H_
7105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
8105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project#include "content/public/browser/web_contents.h"
9105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project#include "content/public/browser/web_contents_observer.h"
10105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project#include "content/public/common/media_stream_request.h"
11105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project#include "extensions/browser/guest_view/web_view/web_view_permission_helper.h"
12105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
13105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectnamespace extensions {
14105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
15105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project// A delegate class of WebViewPermissionHelper to request permissions that are
16105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project// not a part of extensions.
17105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectclass WebViewPermissionHelperDelegate : public content::WebContentsObserver {
18105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public:
19105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  explicit WebViewPermissionHelperDelegate(
20105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      WebViewPermissionHelper* web_view_permission_helper);
21105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  virtual ~WebViewPermissionHelperDelegate();
22105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
23105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  virtual void CanDownload(
24105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      content::RenderViewHost* render_view_host,
25105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      const GURL& url,
26105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      const std::string& request_method,
27105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      const base::Callback<void(bool)>& callback) {}
28105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
29105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  virtual void RequestPointerLockPermission(
30105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      bool user_gesture,
31105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      bool last_unlocked_by_target,
32105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      const base::Callback<void(bool)>& callback) {}
33105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
34105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // Requests Geolocation Permission from the embedder.
35105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  virtual void RequestGeolocationPermission(
36105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      int bridge_id,
37105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      const GURL& requesting_frame,
38105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      bool user_gesture,
39105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      const base::Callback<void(bool)>& callback) {}
40105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
41105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  virtual void CancelGeolocationPermissionRequest(int bridge_id) {}
42105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
43105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  virtual void RequestFileSystemPermission(
44105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      const GURL& url,
45105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      bool allowed_by_default,
46105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      const base::Callback<void(bool)>& callback) {}
47105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
48105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // Called when file system access is requested by the guest content using the
49105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // asynchronous HTML5 file system API. The request is plumbed through the
50105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // <webview> permission request API. The request will be:
51105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // - Allowed if the embedder explicitly allowed it.
52105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // - Denied if the embedder explicitly denied.
53105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // - Determined by the guest's content settings if the embedder does not
54105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // perform an explicit action.
55105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // If access was blocked due to the page's content settings,
56105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // |blocked_by_policy| should be true, and this function should invoke
57105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // OnContentBlocked.
58105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  virtual void FileSystemAccessedAsync(
59105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      int render_process_id,
60105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      int render_frame_id,
61105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      int request_id,
62105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      const GURL& url,
63105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      bool blocked_by_policy) {}
64105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
65105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // Called when file system access is requested by the guest content using the
66105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // synchronous HTML5 file system API in a worker thread or shared worker. The
67105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // request is plumbed through the <webview> permission request API. The
68105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // request will be:
69105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // - Allowed if the embedder explicitly allowed it.
70105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // - Denied if the embedder explicitly denied.
71105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // - Determined by the guest's content settings if the embedder does not
72105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // perform an explicit action.
73105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // If access was blocked due to the page's content settings,
74105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // |blocked_by_policy| should be true, and this function should invoke
75105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  // OnContentBlocked.
76105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  virtual void FileSystemAccessedSync(
77105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      int render_process_id,
78105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      int render_frame_id,
79806cdd82f0b5b1f720ee26ef3f20c8c1ec034f12Yu Shan Emily Lau      const GURL& url,
80105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      bool blocked_by_policy,
81105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project      IPC::Message* reply_msg) {}
82105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
83105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  WebViewPermissionHelper* web_view_permission_helper() const {
84105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    return web_view_permission_helper_;
85c8c7ca7bd769df9288575b322e10ebf1fb22e4a5Brett Chabot  }
86c8c7ca7bd769df9288575b322e10ebf1fb22e4a5Brett Chabot
87105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project private:
88806cdd82f0b5b1f720ee26ef3f20c8c1ec034f12Yu Shan Emily Lau  WebViewPermissionHelper* const web_view_permission_helper_;
89105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
90105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project  DISALLOW_COPY_AND_ASSIGN(WebViewPermissionHelperDelegate);
91105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project};
92105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
93105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project}  // namespace extensions
94105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
95105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project#endif  // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_WEB_VIWE_PERMISSION_HELPER_DELEGATE_H_
96105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project