blob: 4292d967014ece488505ddefbc89d42d89554eb7 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/permissions/request_type.h"
#include "base/check.h"
#include "base/notreached.h"
#include "build/build_config.h"
#include "components/content_settings/core/common/content_settings_types.h"
#include "components/permissions/permissions_client.h"
#if BUILDFLAG(IS_ANDROID)
#include "components/resources/android/theme_resources.h"
#else
#include "components/permissions/vector_icons/vector_icons.h"
#include "components/vector_icons/vector_icons.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/gfx/vector_icon_types.h"
#endif // BUILDFLAG(IS_ANDROID)
namespace permissions {
namespace {
#if BUILDFLAG(IS_ANDROID)
int GetIconIdAndroid(RequestType type) {
switch (type) {
case RequestType::kAccessibilityEvents:
return IDR_ANDROID_INFOBAR_ACCESSIBILITY_EVENTS;
case RequestType::kArSession:
case RequestType::kVrSession:
return IDR_ANDROID_INFOBAR_VR_HEADSET;
case RequestType::kCameraStream:
return IDR_ANDROID_INFOBAR_MEDIA_STREAM_CAMERA;
case RequestType::kClipboard:
return IDR_ANDROID_INFOBAR_CLIPBOARD;
case RequestType::kDiskQuota:
return IDR_ANDROID_INFOBAR_FOLDER;
case RequestType::kGeolocation:
return IDR_ANDROID_INFOBAR_GEOLOCATION;
case RequestType::kIdleDetection:
return IDR_ANDROID_INFOBAR_IDLE_DETECTION;
case RequestType::kMicStream:
return IDR_ANDROID_INFOBAR_MEDIA_STREAM_MIC;
case RequestType::kMidiSysex:
return IDR_ANDROID_INFOBAR_MIDI;
case RequestType::kMultipleDownloads:
return IDR_ANDROID_INFOBAR_MULTIPLE_DOWNLOADS;
case RequestType::kNfcDevice:
return IDR_ANDROID_INFOBAR_NFC;
case RequestType::kNotifications:
return IDR_ANDROID_INFOBAR_NOTIFICATIONS;
case RequestType::kProtectedMediaIdentifier:
return IDR_ANDROID_INFOBAR_PROTECTED_MEDIA_IDENTIFIER;
case RequestType::kStorageAccess:
return IDR_ANDROID_INFOBAR_PERMISSION_COOKIE;
}
NOTREACHED();
return 0;
}
#endif // BUILDFLAG(IS_ANDROID)
#if !BUILDFLAG(IS_ANDROID)
const gfx::VectorIcon& GetIconIdDesktop(RequestType type) {
switch (type) {
case RequestType::kAccessibilityEvents:
return kAccessibilityIcon;
case RequestType::kArSession:
case RequestType::kVrSession:
return vector_icons::kVrHeadsetIcon;
case RequestType::kCameraPanTiltZoom:
case RequestType::kCameraStream:
return vector_icons::kVideocamIcon;
case RequestType::kClipboard:
return vector_icons::kContentPasteIcon;
case RequestType::kDiskQuota:
return vector_icons::kFolderIcon;
case RequestType::kGeolocation:
return vector_icons::kLocationOnIcon;
case RequestType::kIdleDetection:
return vector_icons::kDevicesIcon;
case RequestType::kLocalFonts:
return vector_icons::kFontDownloadIcon;
case RequestType::kMicStream:
return vector_icons::kMicIcon;
case RequestType::kMidiSysex:
return vector_icons::kMidiIcon;
case RequestType::kMultipleDownloads:
return vector_icons::kFileDownloadIcon;
case RequestType::kNotifications:
return vector_icons::kNotificationsIcon;
#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN)
case RequestType::kProtectedMediaIdentifier:
// This icon is provided by ChromePermissionsClient::GetOverrideIconId.
NOTREACHED();
return gfx::kNoneIcon;
#endif
case RequestType::kRegisterProtocolHandler:
return vector_icons::kProtocolHandlerIcon;
case RequestType::kSecurityAttestation:
return kUsbSecurityKeyIcon;
case RequestType::kU2fApiRequest:
return kUsbSecurityKeyIcon;
case RequestType::kStorageAccess:
return vector_icons::kCookieIcon;
case RequestType::kWindowPlacement:
return vector_icons::kSelectWindowIcon;
}
NOTREACHED();
return gfx::kNoneIcon;
}
const gfx::VectorIcon& GetBlockedIconIdDesktop(RequestType type) {
switch (type) {
case RequestType::kGeolocation:
return vector_icons::kLocationOffIcon;
case RequestType::kNotifications:
return vector_icons::kNotificationsOffIcon;
case RequestType::kArSession:
case RequestType::kVrSession:
return vector_icons::kVrHeadsetOffIcon;
case RequestType::kCameraStream:
return vector_icons::kVideocamOffIcon;
case RequestType::kClipboard:
return vector_icons::kContentPasteOffIcon;
case RequestType::kIdleDetection:
return vector_icons::kDevicesOffIcon;
case RequestType::kMicStream:
return vector_icons::kMicOffIcon;
case RequestType::kMidiSysex:
return vector_icons::kMidiOffIcon;
default:
NOTREACHED();
}
NOTREACHED();
return gfx::kNoneIcon;
}
#endif // !BUILDFLAG(IS_ANDROID)
absl::optional<RequestType> ContentSettingsTypeToRequestTypeIfExists(
ContentSettingsType content_settings_type) {
switch (content_settings_type) {
case ContentSettingsType::ACCESSIBILITY_EVENTS:
return RequestType::kAccessibilityEvents;
case ContentSettingsType::AR:
return RequestType::kArSession;
#if !BUILDFLAG(IS_ANDROID)
case ContentSettingsType::CAMERA_PAN_TILT_ZOOM:
return RequestType::kCameraPanTiltZoom;
#endif
case ContentSettingsType::MEDIASTREAM_CAMERA:
return RequestType::kCameraStream;
case ContentSettingsType::CLIPBOARD_READ_WRITE:
return RequestType::kClipboard;
#if !BUILDFLAG(IS_ANDROID)
case ContentSettingsType::LOCAL_FONTS:
return RequestType::kLocalFonts;
#endif
case ContentSettingsType::GEOLOCATION:
return RequestType::kGeolocation;
case ContentSettingsType::IDLE_DETECTION:
return RequestType::kIdleDetection;
case ContentSettingsType::MEDIASTREAM_MIC:
return RequestType::kMicStream;
case ContentSettingsType::MIDI_SYSEX:
return RequestType::kMidiSysex;
case ContentSettingsType::NOTIFICATIONS:
return RequestType::kNotifications;
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN)
case ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER:
return RequestType::kProtectedMediaIdentifier;
#endif
#if BUILDFLAG(IS_ANDROID)
case ContentSettingsType::NFC:
return RequestType::kNfcDevice;
#endif
case ContentSettingsType::STORAGE_ACCESS:
return RequestType::kStorageAccess;
case ContentSettingsType::VR:
return RequestType::kVrSession;
#if !BUILDFLAG(IS_ANDROID)
case ContentSettingsType::WINDOW_PLACEMENT:
return RequestType::kWindowPlacement;
#endif
default:
return absl::nullopt;
}
}
} // namespace
bool IsRequestablePermissionType(ContentSettingsType content_settings_type) {
return !!ContentSettingsTypeToRequestTypeIfExists(content_settings_type);
}
RequestType ContentSettingsTypeToRequestType(
ContentSettingsType content_settings_type) {
absl::optional<RequestType> request_type =
ContentSettingsTypeToRequestTypeIfExists(content_settings_type);
CHECK(request_type);
return *request_type;
}
absl::optional<ContentSettingsType> RequestTypeToContentSettingsType(
RequestType request_type) {
switch (request_type) {
case RequestType::kAccessibilityEvents:
return ContentSettingsType::ACCESSIBILITY_EVENTS;
case RequestType::kArSession:
return ContentSettingsType::AR;
#if !BUILDFLAG(IS_ANDROID)
case RequestType::kCameraPanTiltZoom:
return ContentSettingsType::CAMERA_PAN_TILT_ZOOM;
#endif
case RequestType::kCameraStream:
return ContentSettingsType::MEDIASTREAM_CAMERA;
case RequestType::kClipboard:
return ContentSettingsType::CLIPBOARD_READ_WRITE;
#if !BUILDFLAG(IS_ANDROID)
case RequestType::kLocalFonts:
return ContentSettingsType::LOCAL_FONTS;
#endif
case RequestType::kGeolocation:
return ContentSettingsType::GEOLOCATION;
case RequestType::kIdleDetection:
return ContentSettingsType::IDLE_DETECTION;
case RequestType::kMicStream:
return ContentSettingsType::MEDIASTREAM_MIC;
case RequestType::kMidiSysex:
return ContentSettingsType::MIDI_SYSEX;
#if BUILDFLAG(IS_ANDROID)
case RequestType::kNfcDevice:
return ContentSettingsType::NFC;
#endif
case RequestType::kNotifications:
return ContentSettingsType::NOTIFICATIONS;
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN)
case RequestType::kProtectedMediaIdentifier:
return ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER;
#endif
case RequestType::kStorageAccess:
return ContentSettingsType::STORAGE_ACCESS;
case RequestType::kVrSession:
return ContentSettingsType::VR;
#if !BUILDFLAG(IS_ANDROID)
case RequestType::kWindowPlacement:
return ContentSettingsType::WINDOW_PLACEMENT;
#endif
default:
// Not associated with a ContentSettingsType.
return absl::nullopt;
}
}
IconId GetIconId(RequestType type) {
IconId override_id = PermissionsClient::Get()->GetOverrideIconId(type);
#if BUILDFLAG(IS_ANDROID)
if (override_id)
return override_id;
return GetIconIdAndroid(type);
#else
if (!override_id.is_empty())
return override_id;
return GetIconIdDesktop(type);
#endif
}
#if !BUILDFLAG(IS_ANDROID)
IconId GetBlockedIconId(RequestType type) {
return GetBlockedIconIdDesktop(type);
}
#endif
const char* PermissionKeyForRequestType(permissions::RequestType request_type) {
switch (request_type) {
case permissions::RequestType::kAccessibilityEvents:
return "accessibility_events";
case permissions::RequestType::kArSession:
return "ar_session";
#if !BUILDFLAG(IS_ANDROID)
case permissions::RequestType::kCameraPanTiltZoom:
return "camera_pan_tilt_zoom";
#endif
case permissions::RequestType::kCameraStream:
return "camera_stream";
case permissions::RequestType::kClipboard:
return "clipboard";
case permissions::RequestType::kDiskQuota:
return "disk_quota";
#if !BUILDFLAG(IS_ANDROID)
case permissions::RequestType::kLocalFonts:
return "local_fonts";
#endif
case permissions::RequestType::kGeolocation:
return "geolocation";
case permissions::RequestType::kIdleDetection:
return "idle_detection";
case permissions::RequestType::kMicStream:
return "mic_stream";
case permissions::RequestType::kMidiSysex:
return "midi_sysex";
case permissions::RequestType::kMultipleDownloads:
return "multiple_downloads";
#if BUILDFLAG(IS_ANDROID)
case permissions::RequestType::kNfcDevice:
return "nfc_device";
#endif
case permissions::RequestType::kNotifications:
return "notifications";
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN)
case permissions::RequestType::kProtectedMediaIdentifier:
return "protected_media_identifier";
#endif
#if !BUILDFLAG(IS_ANDROID)
case permissions::RequestType::kRegisterProtocolHandler:
return "register_protocol_handler";
case permissions::RequestType::kSecurityAttestation:
return "security_attestation";
#endif
case permissions::RequestType::kStorageAccess:
return "storage_access";
#if !BUILDFLAG(IS_ANDROID)
case permissions::RequestType::kU2fApiRequest:
return "u2f_api_request";
#endif
case permissions::RequestType::kVrSession:
return "vr_session";
#if !BUILDFLAG(IS_ANDROID)
case permissions::RequestType::kWindowPlacement:
return "window_placement";
#endif
}
return nullptr;
}
} // namespace permissions