blob: 6c36ada80f6f225b84a8f3832405128f8ba83224 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/public/browser/permission_descriptor_util.h"
namespace {
static blink::mojom::PermissionDescriptorPtr CreatePermissionDescriptor(
blink::mojom::PermissionName name) {
auto descriptor = blink::mojom::PermissionDescriptor::New();
descriptor->name = name;
return descriptor;
}
static blink::mojom::PermissionDescriptorPtr CreateMidiPermissionDescriptor(
bool sysex) {
auto descriptor =
CreatePermissionDescriptor(blink::mojom::PermissionName::MIDI);
auto midi_extension = blink::mojom::MidiPermissionDescriptor::New();
midi_extension->sysex = sysex;
descriptor->extension = blink::mojom::PermissionDescriptorExtension::NewMidi(
std::move(midi_extension));
return descriptor;
}
static blink::mojom::PermissionDescriptorPtr
CreateClipboardPermissionDescriptor(blink::mojom::PermissionName name,
bool has_user_gesture,
bool will_be_sanitized) {
auto descriptor = CreatePermissionDescriptor(name);
auto clipboard_extension = blink::mojom::ClipboardPermissionDescriptor::New(
has_user_gesture, will_be_sanitized);
descriptor->extension =
blink::mojom::PermissionDescriptorExtension::NewClipboard(
std::move(clipboard_extension));
return descriptor;
}
static blink::mojom::PermissionDescriptorPtr
CreateVideoCapturePermissionDescriptor(bool pan_tilt_zoom) {
auto descriptor =
CreatePermissionDescriptor(blink::mojom::PermissionName::VIDEO_CAPTURE);
auto camera_device_extension =
blink::mojom::CameraDevicePermissionDescriptor::New(pan_tilt_zoom);
descriptor->extension =
blink::mojom::PermissionDescriptorExtension::NewCameraDevice(
std::move(camera_device_extension));
return descriptor;
}
static blink::mojom::PermissionDescriptorPtr
CreateFullscreenPermissionDescriptor(bool allow_without_user_gesture) {
auto descriptor =
CreatePermissionDescriptor(blink::mojom::PermissionName::FULLSCREEN);
auto fullscreen_extension = blink::mojom::FullscreenPermissionDescriptor::New(
allow_without_user_gesture);
descriptor->extension =
blink::mojom::PermissionDescriptorExtension::NewFullscreen(
std::move(fullscreen_extension));
return descriptor;
}
} // namespace
namespace content {
// static
blink::mojom::PermissionDescriptorPtr
content::PermissionDescriptorUtil::CreatePermissionDescriptorForPermissionType(
blink::PermissionType permission_type) {
switch (permission_type) {
case blink::PermissionType::MIDI_SYSEX:
return CreateMidiPermissionDescriptor(/*sysex=*/true);
case blink::PermissionType::NOTIFICATIONS:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::NOTIFICATIONS);
case blink::PermissionType::GEOLOCATION:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::GEOLOCATION);
case blink::PermissionType::PROTECTED_MEDIA_IDENTIFIER:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::PROTECTED_MEDIA_IDENTIFIER);
case blink::PermissionType::MIDI:
return CreateMidiPermissionDescriptor(false);
case blink::PermissionType::DURABLE_STORAGE:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::DURABLE_STORAGE);
case blink::PermissionType::AUDIO_CAPTURE:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::AUDIO_CAPTURE);
case blink::PermissionType::VIDEO_CAPTURE:
return CreateVideoCapturePermissionDescriptor(/*pan_tilt_zoom=*/false);
case blink::PermissionType::BACKGROUND_SYNC:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::BACKGROUND_SYNC);
case blink::PermissionType::SENSORS:
return CreatePermissionDescriptor(blink::mojom::PermissionName::SENSORS);
case blink::PermissionType::PAYMENT_HANDLER:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::PAYMENT_HANDLER);
case blink::PermissionType::BACKGROUND_FETCH:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::BACKGROUND_FETCH);
case blink::PermissionType::IDLE_DETECTION:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::IDLE_DETECTION);
case blink::PermissionType::PERIODIC_BACKGROUND_SYNC:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::PERIODIC_BACKGROUND_SYNC);
case blink::PermissionType::WAKE_LOCK_SCREEN:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::SCREEN_WAKE_LOCK);
case blink::PermissionType::WAKE_LOCK_SYSTEM:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::SYSTEM_WAKE_LOCK);
case blink::PermissionType::NFC:
return CreatePermissionDescriptor(blink::mojom::PermissionName::NFC);
case blink::PermissionType::CLIPBOARD_READ_WRITE:
return CreateClipboardPermissionDescriptor(
blink::mojom::PermissionName::CLIPBOARD_WRITE, false, false);
case blink::PermissionType::CLIPBOARD_SANITIZED_WRITE:
return CreateClipboardPermissionDescriptor(
blink::mojom::PermissionName::CLIPBOARD_WRITE, true, true);
case blink::PermissionType::VR:
return CreatePermissionDescriptor(blink::mojom::PermissionName::VR);
case blink::PermissionType::AR:
return CreatePermissionDescriptor(blink::mojom::PermissionName::AR);
case blink::PermissionType::STORAGE_ACCESS_GRANT:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::STORAGE_ACCESS);
case blink::PermissionType::CAMERA_PAN_TILT_ZOOM:
return CreateVideoCapturePermissionDescriptor(true);
case blink::PermissionType::WINDOW_MANAGEMENT:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::WINDOW_MANAGEMENT);
case blink::PermissionType::LOCAL_FONTS:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::LOCAL_FONTS);
case blink::PermissionType::DISPLAY_CAPTURE:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::DISPLAY_CAPTURE);
case blink::PermissionType::TOP_LEVEL_STORAGE_ACCESS:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::TOP_LEVEL_STORAGE_ACCESS);
case blink::PermissionType::CAPTURED_SURFACE_CONTROL:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::CAPTURED_SURFACE_CONTROL);
case blink::PermissionType::SMART_CARD:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::SMART_CARD);
case blink::PermissionType::WEB_PRINTING:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::WEB_PRINTING);
case blink::PermissionType::SPEAKER_SELECTION:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::SPEAKER_SELECTION);
case blink::PermissionType::KEYBOARD_LOCK:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::KEYBOARD_LOCK);
case blink::PermissionType::POINTER_LOCK:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::POINTER_LOCK);
case blink::PermissionType::AUTOMATIC_FULLSCREEN:
return CreateFullscreenPermissionDescriptor(
/*allow_without_user_gesture=*/true);
case blink::PermissionType::HAND_TRACKING:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::HAND_TRACKING);
case blink::PermissionType::WEB_APP_INSTALLATION:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::WEB_APP_INSTALLATION);
case blink::PermissionType::LOCAL_NETWORK_ACCESS:
return CreatePermissionDescriptor(
blink::mojom::PermissionName::LOCAL_NETWORK_ACCESS);
case blink::PermissionType::NUM:
NOTREACHED();
}
NOTREACHED();
}
// static
std::vector<blink::mojom::PermissionDescriptorPtr>
PermissionDescriptorUtil::CreatePermissionDescriptorForPermissionTypes(
const std::vector<blink::PermissionType>& permission_types) {
std::vector<blink::mojom::PermissionDescriptorPtr> descriptors;
descriptors.reserve(permission_types.size());
for (const auto& permission_type : permission_types) {
descriptors.emplace_back(
CreatePermissionDescriptorForPermissionType(permission_type));
}
return descriptors;
}
} // namespace content