93 lines
		
	
	
	
		
			3.1 KiB
			
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
	
		
			3.1 KiB
			
		
	
	
	
		
			C++
		
	
	
	
	
	
// 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 ATOM_BROWSER_ATOM_PERMISSION_MANAGER_H_
 | 
						|
#define ATOM_BROWSER_ATOM_PERMISSION_MANAGER_H_
 | 
						|
 | 
						|
#include <map>
 | 
						|
#include <vector>
 | 
						|
 | 
						|
#include "base/callback.h"
 | 
						|
#include "base/id_map.h"
 | 
						|
#include "content/public/browser/permission_manager.h"
 | 
						|
 | 
						|
namespace content {
 | 
						|
class WebContents;
 | 
						|
}
 | 
						|
 | 
						|
namespace atom {
 | 
						|
 | 
						|
class AtomPermissionManager : public content::PermissionManager {
 | 
						|
 public:
 | 
						|
  AtomPermissionManager();
 | 
						|
  ~AtomPermissionManager() override;
 | 
						|
 | 
						|
  using StatusCallback =
 | 
						|
      base::Callback<void(blink::mojom::PermissionStatus)>;
 | 
						|
  using StatusesCallback =
 | 
						|
      base::Callback<void(const std::vector<blink::mojom::PermissionStatus>&)>;
 | 
						|
  using RequestHandler =
 | 
						|
      base::Callback<void(content::WebContents*,
 | 
						|
                          content::PermissionType,
 | 
						|
                          const StatusCallback&)>;
 | 
						|
 | 
						|
  // Handler to dispatch permission requests in JS.
 | 
						|
  void SetPermissionRequestHandler(const RequestHandler& handler);
 | 
						|
 | 
						|
  // content::PermissionManager:
 | 
						|
  int RequestPermission(
 | 
						|
      content::PermissionType permission,
 | 
						|
      content::RenderFrameHost* render_frame_host,
 | 
						|
      const GURL& requesting_origin,
 | 
						|
      bool user_gesture,
 | 
						|
      const base::Callback<void(blink::mojom::PermissionStatus)>& callback)
 | 
						|
      override;
 | 
						|
  int RequestPermissions(
 | 
						|
      const std::vector<content::PermissionType>& permissions,
 | 
						|
      content::RenderFrameHost* render_frame_host,
 | 
						|
      const GURL& requesting_origin,
 | 
						|
      bool user_gesture,
 | 
						|
      const base::Callback<void(
 | 
						|
          const std::vector<blink::mojom::PermissionStatus>&)>& callback)
 | 
						|
      override;
 | 
						|
 | 
						|
 protected:
 | 
						|
  void OnPermissionResponse(int request_id,
 | 
						|
                            int permission_id,
 | 
						|
                            blink::mojom::PermissionStatus status);
 | 
						|
 | 
						|
  // content::PermissionManager:
 | 
						|
  void CancelPermissionRequest(int request_id) override;
 | 
						|
  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;
 | 
						|
  void RegisterPermissionUsage(content::PermissionType permission,
 | 
						|
                               const GURL& requesting_origin,
 | 
						|
                               const GURL& embedding_origin) override;
 | 
						|
  int SubscribePermissionStatusChange(
 | 
						|
      content::PermissionType permission,
 | 
						|
      const GURL& requesting_origin,
 | 
						|
      const GURL& embedding_origin,
 | 
						|
      const base::Callback<void(blink::mojom::PermissionStatus)>& callback)
 | 
						|
      override;
 | 
						|
  void UnsubscribePermissionStatusChange(int subscription_id) override;
 | 
						|
 | 
						|
 private:
 | 
						|
  class PendingRequest;
 | 
						|
  using PendingRequestsMap = IDMap<PendingRequest, IDMapOwnPointer>;
 | 
						|
 | 
						|
  RequestHandler request_handler_;
 | 
						|
 | 
						|
  PendingRequestsMap pending_requests_;
 | 
						|
 | 
						|
  DISALLOW_COPY_AND_ASSIGN(AtomPermissionManager);
 | 
						|
};
 | 
						|
 | 
						|
}  // namespace atom
 | 
						|
 | 
						|
#endif  // ATOM_BROWSER_ATOM_PERMISSION_MANAGER_H_
 |