aw_permission_manager.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // Copyright 2015 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef ANDROID_WEBVIEW_BROWSER_AW_PERMISSION_MANAGER_H_
  5. #define ANDROID_WEBVIEW_BROWSER_AW_PERMISSION_MANAGER_H_
  6. #include <memory>
  7. #include "base/callback_forward.h"
  8. #include "base/containers/id_map.h"
  9. #include "base/memory/weak_ptr.h"
  10. #include "content/public/browser/permission_controller_delegate.h"
  11. #include "content/public/browser/permission_result.h"
  12. namespace blink {
  13. enum class PermissionType;
  14. }
  15. namespace android_webview {
  16. class AwBrowserPermissionRequestDelegate;
  17. class LastRequestResultCache;
  18. class AwPermissionManager : public content::PermissionControllerDelegate {
  19. public:
  20. AwPermissionManager();
  21. AwPermissionManager(const AwPermissionManager&) = delete;
  22. AwPermissionManager& operator=(const AwPermissionManager&) = delete;
  23. ~AwPermissionManager() override;
  24. // PermissionControllerDelegate implementation.
  25. void RequestPermission(
  26. blink::PermissionType permission,
  27. content::RenderFrameHost* render_frame_host,
  28. const GURL& requesting_origin,
  29. bool user_gesture,
  30. base::OnceCallback<void(blink::mojom::PermissionStatus)> callback)
  31. override;
  32. void RequestPermissions(
  33. const std::vector<blink::PermissionType>& permissions,
  34. content::RenderFrameHost* render_frame_host,
  35. const GURL& requesting_origin,
  36. bool user_gesture,
  37. base::OnceCallback<
  38. void(const std::vector<blink::mojom::PermissionStatus>&)> callback)
  39. override;
  40. void ResetPermission(blink::PermissionType permission,
  41. const GURL& requesting_origin,
  42. const GURL& embedding_origin) override;
  43. void RequestPermissionsFromCurrentDocument(
  44. const std::vector<blink::PermissionType>& permissions,
  45. content::RenderFrameHost* render_frame_host,
  46. bool user_gesture,
  47. base::OnceCallback<
  48. void(const std::vector<blink::mojom::PermissionStatus>&)> callback)
  49. override;
  50. blink::mojom::PermissionStatus GetPermissionStatus(
  51. blink::PermissionType permission,
  52. const GURL& requesting_origin,
  53. const GURL& embedding_origin) override;
  54. content::PermissionResult GetPermissionResultForOriginWithoutContext(
  55. blink::PermissionType permission,
  56. const url::Origin& origin) override;
  57. blink::mojom::PermissionStatus GetPermissionStatusForCurrentDocument(
  58. blink::PermissionType permission,
  59. content::RenderFrameHost* render_frame_host) override;
  60. blink::mojom::PermissionStatus GetPermissionStatusForWorker(
  61. blink::PermissionType permission,
  62. content::RenderProcessHost* render_process_host,
  63. const GURL& worker_origin) override;
  64. SubscriptionId SubscribePermissionStatusChange(
  65. blink::PermissionType permission,
  66. content::RenderProcessHost* render_process_host,
  67. content::RenderFrameHost* render_frame_host,
  68. const GURL& requesting_origin,
  69. base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback)
  70. override;
  71. void UnsubscribePermissionStatusChange(
  72. SubscriptionId subscription_id) override;
  73. protected:
  74. void CancelPermissionRequest(int request_id);
  75. void CancelPermissionRequests();
  76. private:
  77. class PendingRequest;
  78. using PendingRequestsMap = base::IDMap<std::unique_ptr<PendingRequest>>;
  79. virtual int GetRenderProcessID(content::RenderFrameHost* render_frame_host);
  80. virtual int GetRenderFrameID(content::RenderFrameHost* render_frame_host);
  81. virtual GURL LastCommittedOrigin(content::RenderFrameHost* render_frame_host);
  82. virtual AwBrowserPermissionRequestDelegate* GetDelegate(int render_process_id,
  83. int render_frame_id);
  84. // The weak pointer to this is used to clean up any information which is
  85. // stored in the pending request or result cache maps. However, the callback
  86. // should be run regardless of whether the class is still alive so the method
  87. // is static.
  88. static void OnRequestResponse(
  89. const base::WeakPtr<AwPermissionManager>& manager,
  90. int request_id,
  91. blink::PermissionType permission,
  92. bool allowed);
  93. PendingRequestsMap pending_requests_;
  94. std::unique_ptr<LastRequestResultCache> result_cache_;
  95. base::WeakPtrFactory<AwPermissionManager> weak_ptr_factory_{this};
  96. };
  97. } // namespace android_webview
  98. #endif // ANDROID_WEBVIEW_BROWSER_AW_PERMISSION_MANAGER_H_