web_contents_permission_helper.h 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Copyright (c) 2016 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ELECTRON_SHELL_BROWSER_WEB_CONTENTS_PERMISSION_HELPER_H_
  5. #define ELECTRON_SHELL_BROWSER_WEB_CONTENTS_PERMISSION_HELPER_H_
  6. #include "base/memory/raw_ptr.h"
  7. #include "base/values.h"
  8. #include "content/public/browser/media_stream_request.h"
  9. #include "content/public/browser/web_contents_user_data.h"
  10. #include "third_party/blink/public/common/mediastream/media_stream_request.h"
  11. #include "third_party/blink/public/common/permissions/permission_utils.h"
  12. namespace electron {
  13. // Applies the permission requested for WebContents.
  14. class WebContentsPermissionHelper
  15. : public content::WebContentsUserData<WebContentsPermissionHelper> {
  16. public:
  17. ~WebContentsPermissionHelper() override;
  18. // disable copy
  19. WebContentsPermissionHelper(const WebContentsPermissionHelper&) = delete;
  20. WebContentsPermissionHelper& operator=(const WebContentsPermissionHelper&) =
  21. delete;
  22. enum class PermissionType {
  23. FULLSCREEN = static_cast<int>(blink::PermissionType::NUM) + 1,
  24. OPEN_EXTERNAL,
  25. SERIAL,
  26. HID,
  27. USB,
  28. KEYBOARD_LOCK,
  29. FILE_SYSTEM,
  30. };
  31. // Asynchronous Requests
  32. void RequestFullscreenPermission(content::RenderFrameHost* requesting_frame,
  33. base::OnceCallback<void(bool)> callback);
  34. void RequestMediaAccessPermission(const content::MediaStreamRequest& request,
  35. content::MediaResponseCallback callback);
  36. void RequestPointerLockPermission(
  37. bool user_gesture,
  38. bool last_unlocked_by_target,
  39. base::OnceCallback<void(content::WebContents*, bool, bool, bool)>
  40. callback);
  41. void RequestKeyboardLockPermission(
  42. bool esc_key_locked,
  43. base::OnceCallback<void(content::WebContents*, bool, bool)> callback);
  44. void RequestWebNotificationPermission(
  45. content::RenderFrameHost* requesting_frame,
  46. base::OnceCallback<void(bool)> callback);
  47. void RequestOpenExternalPermission(content::RenderFrameHost* requesting_frame,
  48. base::OnceCallback<void(bool)> callback,
  49. bool user_gesture,
  50. const GURL& url);
  51. // Synchronous Checks
  52. bool CheckMediaAccessPermission(const url::Origin& security_origin,
  53. blink::mojom::MediaStreamType type) const;
  54. bool CheckSerialAccessPermission(const url::Origin& embedding_origin) const;
  55. private:
  56. explicit WebContentsPermissionHelper(content::WebContents* web_contents);
  57. friend class content::WebContentsUserData<WebContentsPermissionHelper>;
  58. void RequestPermission(content::RenderFrameHost* requesting_frame,
  59. blink::PermissionType permission,
  60. base::OnceCallback<void(bool)> callback,
  61. bool user_gesture = false,
  62. base::Value::Dict details = {});
  63. bool CheckPermission(blink::PermissionType permission,
  64. base::Value::Dict details) const;
  65. // TODO(clavin): refactor to use the WebContents provided by the
  66. // WebContentsUserData base class instead of storing a duplicate ref
  67. raw_ptr<content::WebContents> web_contents_;
  68. WEB_CONTENTS_USER_DATA_KEY_DECL();
  69. };
  70. } // namespace electron
  71. #endif // ELECTRON_SHELL_BROWSER_WEB_CONTENTS_PERMISSION_HELPER_H_