#ifndef CONTENT_PUBLIC_BROWSER_PERMISSION_CONTROLLER_H_
#define CONTENT_PUBLIC_BROWSER_PERMISSION_CONTROLLER_H_
#include "base/supports_user_data.h"
#include "base/types/id_type.h"
#include "content/common/content_export.h"
#include "content/public/browser/permission_result.h"
#include "third_party/blink/public/mojom/permissions/permission_status.mojom.h"
class GURL;
namespace blink {
enum class PermissionType;
}
namespace url {
class Origin;
}
namespace content {
class RenderFrameHost;
class RenderProcessHost;
class CONTENT_EXPORT PermissionController
: public base::SupportsUserData::Data {
public:
using SubscriptionId = base::IdType64<PermissionController>;
~PermissionController() override {}
virtual blink::mojom::PermissionStatus GetPermissionStatusForWorker(
blink::PermissionType permission,
RenderProcessHost* render_process_host,
const url::Origin& worker_origin) = 0;
virtual blink::mojom::PermissionStatus GetPermissionStatusForCurrentDocument(
blink::PermissionType permission,
RenderFrameHost* render_frame_host) = 0;
virtual PermissionResult GetPermissionResultForCurrentDocument(
blink::PermissionType permission,
RenderFrameHost* render_frame_host) = 0;
virtual PermissionResult GetPermissionResultForOriginWithoutContext(
blink::PermissionType permission,
const url::Origin& origin) = 0;
virtual blink::mojom::PermissionStatus
GetPermissionStatusForOriginWithoutContext(
blink::PermissionType permission,
const url::Origin& requesting_origin,
const url::Origin& embedding_origin) = 0;
virtual void RequestPermissionFromCurrentDocument(
blink::PermissionType permission,
RenderFrameHost* render_frame_host,
bool user_gesture,
base::OnceCallback<void(blink::mojom::PermissionStatus)> callback) = 0;
virtual void RequestPermissionsFromCurrentDocument(
const std::vector<blink::PermissionType>& permission,
RenderFrameHost* render_frame_host,
bool user_gesture,
base::OnceCallback<void(
const std::vector<blink::mojom::PermissionStatus>&)> callback) = 0;
virtual void ResetPermission(blink::PermissionType permission,
const url::Origin& origin) = 0;
virtual SubscriptionId SubscribePermissionStatusChange(
blink::PermissionType permission,
RenderProcessHost* render_process_host,
const url::Origin& requesting_origin,
const base::RepeatingCallback<void(blink::mojom::PermissionStatus)>&
callback) = 0;
virtual void UnsubscribePermissionStatusChange(
SubscriptionId subscription_id) = 0;
virtual bool IsSubscribedToPermissionChangeEvent(
blink::PermissionType permission,
RenderFrameHost* render_frame_host) = 0;
#ifdef OHOS_NOTIFICATION
virtual void GetPermissionStatusAsync(
blink::PermissionType permission,
bool isFromDocument,
void* render_host,
const url::Origin& origin,
base::OnceCallback<void(blink::mojom::PermissionStatus)> callback) {}
#endif
};
}
namespace std {
template <>
struct hash<content::PermissionController::SubscriptionId> {
std::size_t operator()(
const content::PermissionController::SubscriptionId& v) const {
content::PermissionController::SubscriptionId::Hasher hasher;
return hasher(v);
}
};
}
#endif