123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- // Copyright (c) 2016 GitHub, Inc.
- // Use of this source code is governed by the MIT license that can be
- // found in the LICENSE file.
- #ifndef SHELL_BROWSER_ATOM_PERMISSION_MANAGER_H_
- #define SHELL_BROWSER_ATOM_PERMISSION_MANAGER_H_
- #include <map>
- #include <memory>
- #include <vector>
- #include "base/callback.h"
- #include "base/containers/id_map.h"
- #include "base/values.h"
- #include "content/public/browser/permission_controller_delegate.h"
- namespace content {
- class WebContents;
- }
- namespace electron {
- class AtomPermissionManager : public content::PermissionControllerDelegate {
- public:
- AtomPermissionManager();
- ~AtomPermissionManager() override;
- using StatusCallback =
- base::OnceCallback<void(blink::mojom::PermissionStatus)>;
- using StatusesCallback = base::OnceCallback<void(
- const std::vector<blink::mojom::PermissionStatus>&)>;
- using RequestHandler = base::Callback<void(content::WebContents*,
- content::PermissionType,
- StatusCallback,
- const base::Value&)>;
- using CheckHandler = base::Callback<bool(content::WebContents*,
- content::PermissionType,
- const GURL& requesting_origin,
- const base::Value&)>;
- // Handler to dispatch permission requests in JS.
- void SetPermissionRequestHandler(const RequestHandler& handler);
- void SetPermissionCheckHandler(const CheckHandler& handler);
- // content::PermissionControllerDelegate:
- int RequestPermission(content::PermissionType permission,
- content::RenderFrameHost* render_frame_host,
- const GURL& requesting_origin,
- bool user_gesture,
- StatusCallback callback) override;
- int RequestPermissionWithDetails(content::PermissionType permission,
- content::RenderFrameHost* render_frame_host,
- const GURL& requesting_origin,
- bool user_gesture,
- const base::DictionaryValue* details,
- StatusCallback callback);
- int RequestPermissions(
- const std::vector<content::PermissionType>& permissions,
- content::RenderFrameHost* render_frame_host,
- const GURL& requesting_origin,
- bool user_gesture,
- StatusesCallback callback) override;
- int RequestPermissionsWithDetails(
- const std::vector<content::PermissionType>& permissions,
- content::RenderFrameHost* render_frame_host,
- const GURL& requesting_origin,
- bool user_gesture,
- const base::DictionaryValue* details,
- StatusesCallback callback);
- blink::mojom::PermissionStatus GetPermissionStatusForFrame(
- content::PermissionType permission,
- content::RenderFrameHost* render_frame_host,
- const GURL& requesting_origin) override;
- bool CheckPermissionWithDetails(content::PermissionType permission,
- content::RenderFrameHost* render_frame_host,
- const GURL& requesting_origin,
- const base::DictionaryValue* details) const;
- protected:
- void OnPermissionResponse(int request_id,
- int permission_id,
- blink::mojom::PermissionStatus status);
- // content::PermissionControllerDelegate:
- void ResetPermission(content::PermissionType permission,
- const GURL& requesting_origin,
- const GURL& embedding_origin) override;
- blink::mojom::PermissionStatus GetPermissionStatus(
- content::PermissionType permission,
- const GURL& requesting_origin,
- const GURL& embedding_origin) override;
- int SubscribePermissionStatusChange(
- content::PermissionType permission,
- content::RenderFrameHost* render_frame_host,
- const GURL& requesting_origin,
- base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback)
- override;
- void UnsubscribePermissionStatusChange(int subscription_id) override;
- private:
- class PendingRequest;
- using PendingRequestsMap = base::IDMap<std::unique_ptr<PendingRequest>>;
- RequestHandler request_handler_;
- CheckHandler check_handler_;
- PendingRequestsMap pending_requests_;
- DISALLOW_COPY_AND_ASSIGN(AtomPermissionManager);
- };
- } // namespace electron
- #endif // SHELL_BROWSER_ATOM_PERMISSION_MANAGER_H_
|