#include "content/browser/permissions/permission_service_impl.h"
#include <stddef.h>
#include <memory>
#include <set>
#include <utility>
#include "base/command_line.h"
#include "base/functional/bind.h"
#include "base/memory/ptr_util.h"
#include "base/ranges/algorithm.h"
#include "content/browser/bad_message.h"
#include "content/browser/permissions/embedded_permission_control_checker.h"
#include "content/browser/permissions/permission_controller_impl.h"
#include "content/browser/permissions/permission_util.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/permission_request_description.h"
#include "content/public/browser/permission_result.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_switches.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/features_generated.h"
#include "third_party/blink/public/common/permissions/permission_utils.h"
#include "third_party/blink/public/mojom/permissions/permission.mojom-shared.h"
#include "url/origin.h"
EmbeddedPermissionControlClient;
EmbeddedPermissionControlResult;
EmbeddedPermissionRequestDescriptorPtr;
PermissionDescriptorPtr;
PermissionName;
PermissionStatus;
namespace content {
namespace {
void PermissionRequestResponseCallbackWrapper(
base::OnceCallback<void(PermissionStatus)> callback,
const std::vector<PermissionStatus>& vector) { … }
EmbeddedPermissionControlResult
PermissionStatusToEmbeddedPermissionControlResult(PermissionStatus status) { … }
void EmbeddedPermissionRequestCallbackWrapper(
base::OnceCallback<void(EmbeddedPermissionControlResult)> callback,
const std::vector<PermissionStatus>& statuses) { … }
std::vector<blink::PermissionType> GetPermissionTypesAndCheckDuplicates(
const std::vector<PermissionDescriptorPtr>& permissions) { … }
}
class PermissionServiceImpl::PendingRequest { … };
PermissionServiceImpl::PermissionServiceImpl(PermissionServiceContext* context,
const url::Origin& origin)
: … { … }
PermissionServiceImpl::~PermissionServiceImpl() { … }
void PermissionServiceImpl::RegisterPageEmbeddedPermissionControl(
std::vector<PermissionDescriptorPtr> permissions,
mojo::PendingRemote<EmbeddedPermissionControlClient> observer) { … }
void PermissionServiceImpl::OnPageEmbeddedPermissionControlRegistered(
std::vector<PermissionDescriptorPtr> permissions,
bool allow,
const mojo::Remote<EmbeddedPermissionControlClient>& client) { … }
void PermissionServiceImpl::RequestPageEmbeddedPermission(
EmbeddedPermissionRequestDescriptorPtr descriptor,
RequestPageEmbeddedPermissionCallback callback) { … }
void PermissionServiceImpl::RequestPermission(
PermissionDescriptorPtr permission,
bool user_gesture,
PermissionStatusCallback callback) { … }
void PermissionServiceImpl::RequestPermissions(
std::vector<PermissionDescriptorPtr> permissions,
bool user_gesture,
RequestPermissionsCallback callback) { … }
void PermissionServiceImpl::RequestPermissionsInternal(
BrowserContext* browser_context,
const std::vector<PermissionDescriptorPtr>& permissions,
PermissionRequestDescription request_description,
RequestPermissionsCallback callback) { … }
void PermissionServiceImpl::OnRequestPermissionsResponse(
int pending_request_id,
const std::vector<PermissionStatus>& results) { … }
void PermissionServiceImpl::HasPermission(PermissionDescriptorPtr permission,
PermissionStatusCallback callback) { … }
void PermissionServiceImpl::RevokePermission(
PermissionDescriptorPtr permission,
PermissionStatusCallback callback) { … }
void PermissionServiceImpl::AddPermissionObserver(
PermissionDescriptorPtr permission,
PermissionStatus last_known_status,
mojo::PendingRemote<blink::mojom::PermissionObserver> observer) { … }
void PermissionServiceImpl::AddPageEmbeddedPermissionObserver(
PermissionDescriptorPtr permission,
PermissionStatus last_known_status,
mojo::PendingRemote<blink::mojom::PermissionObserver> observer) { … }
void PermissionServiceImpl::NotifyEventListener(
blink::mojom::PermissionDescriptorPtr permission,
const std::string& event_type,
bool is_added) { … }
PermissionStatus PermissionServiceImpl::GetPermissionStatus(
const PermissionDescriptorPtr& permission) { … }
PermissionStatus PermissionServiceImpl::GetPermissionStatusFromType(
blink::PermissionType type) { … }
PermissionStatus PermissionServiceImpl::GetCombinedPermissionAndDeviceStatus(
const PermissionDescriptorPtr& permission) { … }
void PermissionServiceImpl::ResetPermissionStatus(blink::PermissionType type) { … }
void PermissionServiceImpl::ReceivedBadMessage() { … }
}