| // Copyright 2019 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 "content/public/browser/permission_type.h" |
| |
| #include "base/no_destructor.h" |
| #include "build/build_config.h" |
| #include "third_party/blink/public/mojom/permissions/permission.mojom.h" |
| |
| using blink::mojom::PermissionDescriptorPtr; |
| using blink::mojom::PermissionName; |
| using blink::mojom::PermissionStatus; |
| |
| namespace content { |
| |
| const std::vector<PermissionType>& GetAllPermissionTypes() { |
| static const base::NoDestructor<std::vector<PermissionType>> |
| kAllPermissionTypes([] { |
| const int NUM_TYPES = static_cast<int>(PermissionType::NUM); |
| std::vector<PermissionType> all_types; |
| // Note: Update this if the set of removed entries changes. |
| // This is 6 because it skips 0 as well as the 5 numbers explicitly |
| // mentioned below. |
| all_types.reserve(NUM_TYPES - 6); |
| for (int i = 1; i < NUM_TYPES; ++i) { |
| // Skip removed entries. |
| if (i == 2 || i == 11 || i == 14 || i == 15 || i == 32) |
| continue; |
| all_types.push_back(static_cast<PermissionType>(i)); |
| } |
| return all_types; |
| }()); |
| return *kAllPermissionTypes; |
| } |
| |
| absl::optional<PermissionType> PermissionDescriptorToPermissionType( |
| const PermissionDescriptorPtr& descriptor) { |
| switch (descriptor->name) { |
| case PermissionName::GEOLOCATION: |
| return PermissionType::GEOLOCATION; |
| case PermissionName::NOTIFICATIONS: |
| return PermissionType::NOTIFICATIONS; |
| case PermissionName::MIDI: { |
| if (descriptor->extension && descriptor->extension->is_midi() && |
| descriptor->extension->get_midi()->sysex) { |
| return PermissionType::MIDI_SYSEX; |
| } |
| return PermissionType::MIDI; |
| } |
| case PermissionName::PROTECTED_MEDIA_IDENTIFIER: |
| #if defined(ENABLE_PROTECTED_MEDIA_IDENTIFIER_PERMISSION) |
| return PermissionType::PROTECTED_MEDIA_IDENTIFIER; |
| #else |
| NOTIMPLEMENTED(); |
| return absl::nullopt; |
| #endif // defined(ENABLE_PROTECTED_MEDIA_IDENTIFIER_PERMISSION) |
| case PermissionName::DURABLE_STORAGE: |
| return PermissionType::DURABLE_STORAGE; |
| case PermissionName::AUDIO_CAPTURE: |
| return PermissionType::AUDIO_CAPTURE; |
| case PermissionName::VIDEO_CAPTURE: |
| if (descriptor->extension && descriptor->extension->is_camera_device() && |
| descriptor->extension->get_camera_device()->panTiltZoom) { |
| return PermissionType::CAMERA_PAN_TILT_ZOOM; |
| } else { |
| return PermissionType::VIDEO_CAPTURE; |
| } |
| case PermissionName::BACKGROUND_SYNC: |
| return PermissionType::BACKGROUND_SYNC; |
| case PermissionName::SENSORS: |
| return PermissionType::SENSORS; |
| case PermissionName::ACCESSIBILITY_EVENTS: |
| return PermissionType::ACCESSIBILITY_EVENTS; |
| case PermissionName::CLIPBOARD_READ: |
| return PermissionType::CLIPBOARD_READ_WRITE; |
| case PermissionName::CLIPBOARD_WRITE: { |
| if (descriptor->extension && descriptor->extension->is_clipboard() && |
| descriptor->extension->get_clipboard()->allowWithoutSanitization) { |
| return PermissionType::CLIPBOARD_READ_WRITE; |
| } else { |
| return PermissionType::CLIPBOARD_SANITIZED_WRITE; |
| } |
| } |
| case PermissionName::PAYMENT_HANDLER: |
| return PermissionType::PAYMENT_HANDLER; |
| case PermissionName::BACKGROUND_FETCH: |
| return PermissionType::BACKGROUND_FETCH; |
| case PermissionName::IDLE_DETECTION: |
| return PermissionType::IDLE_DETECTION; |
| case PermissionName::PERIODIC_BACKGROUND_SYNC: |
| return PermissionType::PERIODIC_BACKGROUND_SYNC; |
| case PermissionName::SCREEN_WAKE_LOCK: |
| return PermissionType::WAKE_LOCK_SCREEN; |
| case PermissionName::SYSTEM_WAKE_LOCK: |
| return PermissionType::WAKE_LOCK_SYSTEM; |
| case PermissionName::NFC: |
| return PermissionType::NFC; |
| case PermissionName::STORAGE_ACCESS: |
| return PermissionType::STORAGE_ACCESS_GRANT; |
| case PermissionName::WINDOW_PLACEMENT: |
| return PermissionType::WINDOW_PLACEMENT; |
| case PermissionName::LOCAL_FONTS: |
| return PermissionType::LOCAL_FONTS; |
| case PermissionName::DISPLAY_CAPTURE: |
| return PermissionType::DISPLAY_CAPTURE; |
| } |
| |
| NOTREACHED(); |
| return absl::nullopt; |
| } |
| |
| } // namespace content |