atom_permission_manager.h 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 ATOM_BROWSER_ATOM_PERMISSION_MANAGER_H_
  5. #define ATOM_BROWSER_ATOM_PERMISSION_MANAGER_H_
  6. #include <map>
  7. #include <vector>
  8. #include "base/callback.h"
  9. #include "content/public/browser/permission_manager.h"
  10. namespace content {
  11. class WebContents;
  12. }
  13. namespace atom {
  14. class AtomPermissionManager : public content::PermissionManager {
  15. public:
  16. AtomPermissionManager();
  17. ~AtomPermissionManager() override;
  18. using ResponseCallback =
  19. base::Callback<void(blink::mojom::PermissionStatus)>;
  20. using RequestHandler =
  21. base::Callback<void(content::WebContents*,
  22. content::PermissionType,
  23. const ResponseCallback&)>;
  24. // Handler to dispatch permission requests in JS.
  25. void SetPermissionRequestHandler(const RequestHandler& handler);
  26. // content::PermissionManager:
  27. int RequestPermission(
  28. content::PermissionType permission,
  29. content::RenderFrameHost* render_frame_host,
  30. const GURL& requesting_origin,
  31. const ResponseCallback& callback) override;
  32. int RequestPermissions(
  33. const std::vector<content::PermissionType>& permissions,
  34. content::RenderFrameHost* render_frame_host,
  35. const GURL& requesting_origin,
  36. const base::Callback<void(
  37. const std::vector<blink::mojom::PermissionStatus>&)>& callback) override;
  38. protected:
  39. void OnPermissionResponse(int request_id,
  40. const GURL& url,
  41. const ResponseCallback& callback,
  42. blink::mojom::PermissionStatus status);
  43. // content::PermissionManager:
  44. void CancelPermissionRequest(int request_id) override;
  45. void ResetPermission(content::PermissionType permission,
  46. const GURL& requesting_origin,
  47. const GURL& embedding_origin) override;
  48. blink::mojom::PermissionStatus GetPermissionStatus(
  49. content::PermissionType permission,
  50. const GURL& requesting_origin,
  51. const GURL& embedding_origin) override;
  52. void RegisterPermissionUsage(content::PermissionType permission,
  53. const GURL& requesting_origin,
  54. const GURL& embedding_origin) override;
  55. int SubscribePermissionStatusChange(
  56. content::PermissionType permission,
  57. const GURL& requesting_origin,
  58. const GURL& embedding_origin,
  59. const base::Callback<void(blink::mojom::PermissionStatus)>& callback)
  60. override;
  61. void UnsubscribePermissionStatusChange(int subscription_id) override;
  62. private:
  63. struct RequestInfo {
  64. int render_process_id;
  65. ResponseCallback callback;
  66. };
  67. RequestHandler request_handler_;
  68. std::map<int, RequestInfo> pending_requests_;
  69. int request_id_;
  70. DISALLOW_COPY_AND_ASSIGN(AtomPermissionManager);
  71. };
  72. } // namespace atom
  73. #endif // ATOM_BROWSER_ATOM_PERMISSION_MANAGER_H_