| // Copyright 2015 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/permission_util.h" |
| |
| #include "base/notreached.h" |
| #include "build/build_config.h" |
| #include "build/chromeos_buildflags.h" |
| #include "components/permissions/features.h" |
| #include "content/public/browser/permission_type.h" |
| #include "content/public/browser/web_contents.h" |
| #include "url/gurl.h" |
| |
| using content::PermissionType; |
| |
| namespace permissions { |
| |
| // The returned strings must match any Field Trial configs for the Permissions |
| // kill switch e.g. Permissions.Action.Geolocation etc.. |
| std::string PermissionUtil::GetPermissionString( |
| ContentSettingsType content_type) { |
| switch (content_type) { |
| case ContentSettingsType::GEOLOCATION: |
| return "Geolocation"; |
| case ContentSettingsType::NOTIFICATIONS: |
| return "Notifications"; |
| case ContentSettingsType::MIDI_SYSEX: |
| return "MidiSysEx"; |
| case ContentSettingsType::DURABLE_STORAGE: |
| return "DurableStorage"; |
| case ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER: |
| return "ProtectedMediaIdentifier"; |
| case ContentSettingsType::MEDIASTREAM_MIC: |
| return "AudioCapture"; |
| case ContentSettingsType::MEDIASTREAM_CAMERA: |
| return "VideoCapture"; |
| case ContentSettingsType::MIDI: |
| return "Midi"; |
| case ContentSettingsType::BACKGROUND_SYNC: |
| return "BackgroundSync"; |
| case ContentSettingsType::SENSORS: |
| return "Sensors"; |
| case ContentSettingsType::ACCESSIBILITY_EVENTS: |
| return "AccessibilityEvents"; |
| case ContentSettingsType::CLIPBOARD_READ_WRITE: |
| return "ClipboardReadWrite"; |
| case ContentSettingsType::CLIPBOARD_SANITIZED_WRITE: |
| return "ClipboardSanitizedWrite"; |
| case ContentSettingsType::PAYMENT_HANDLER: |
| return "PaymentHandler"; |
| case ContentSettingsType::BACKGROUND_FETCH: |
| return "BackgroundFetch"; |
| case ContentSettingsType::IDLE_DETECTION: |
| return "IdleDetection"; |
| case ContentSettingsType::PERIODIC_BACKGROUND_SYNC: |
| return "PeriodicBackgroundSync"; |
| case ContentSettingsType::WAKE_LOCK_SCREEN: |
| return "WakeLockScreen"; |
| case ContentSettingsType::WAKE_LOCK_SYSTEM: |
| return "WakeLockSystem"; |
| case ContentSettingsType::NFC: |
| return "NFC"; |
| case ContentSettingsType::VR: |
| return "VR"; |
| case ContentSettingsType::AR: |
| return "AR"; |
| case ContentSettingsType::STORAGE_ACCESS: |
| return "StorageAccess"; |
| case ContentSettingsType::CAMERA_PAN_TILT_ZOOM: |
| return "CameraPanTiltZoom"; |
| case ContentSettingsType::WINDOW_PLACEMENT: |
| return "WindowPlacement"; |
| case ContentSettingsType::FONT_ACCESS: |
| return "FontAccess"; |
| case ContentSettingsType::FILE_HANDLING: |
| return "FileHandling"; |
| case ContentSettingsType::DISPLAY_CAPTURE: |
| return "DisplayCapture"; |
| default: |
| break; |
| } |
| NOTREACHED(); |
| return std::string(); |
| } |
| |
| PermissionRequestGestureType PermissionUtil::GetGestureType(bool user_gesture) { |
| return user_gesture ? PermissionRequestGestureType::GESTURE |
| : PermissionRequestGestureType::NO_GESTURE; |
| } |
| |
| bool PermissionUtil::GetPermissionType(ContentSettingsType type, |
| PermissionType* out) { |
| if (type == ContentSettingsType::GEOLOCATION) { |
| *out = PermissionType::GEOLOCATION; |
| } else if (type == ContentSettingsType::NOTIFICATIONS) { |
| *out = PermissionType::NOTIFICATIONS; |
| } else if (type == ContentSettingsType::MIDI) { |
| *out = PermissionType::MIDI; |
| } else if (type == ContentSettingsType::MIDI_SYSEX) { |
| *out = PermissionType::MIDI_SYSEX; |
| } else if (type == ContentSettingsType::DURABLE_STORAGE) { |
| *out = PermissionType::DURABLE_STORAGE; |
| } else if (type == ContentSettingsType::MEDIASTREAM_CAMERA) { |
| *out = PermissionType::VIDEO_CAPTURE; |
| } else if (type == ContentSettingsType::MEDIASTREAM_MIC) { |
| *out = PermissionType::AUDIO_CAPTURE; |
| } else if (type == ContentSettingsType::BACKGROUND_SYNC) { |
| *out = PermissionType::BACKGROUND_SYNC; |
| #if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(OW_WIN) |
| } else if (type == ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER) { |
| *out = PermissionType::PROTECTED_MEDIA_IDENTIFIER; |
| #endif |
| } else if (type == ContentSettingsType::SENSORS) { |
| *out = PermissionType::SENSORS; |
| } else if (type == ContentSettingsType::ACCESSIBILITY_EVENTS) { |
| *out = PermissionType::ACCESSIBILITY_EVENTS; |
| } else if (type == ContentSettingsType::CLIPBOARD_READ_WRITE) { |
| *out = PermissionType::CLIPBOARD_READ_WRITE; |
| } else if (type == ContentSettingsType::PAYMENT_HANDLER) { |
| *out = PermissionType::PAYMENT_HANDLER; |
| } else if (type == ContentSettingsType::BACKGROUND_FETCH) { |
| *out = PermissionType::BACKGROUND_FETCH; |
| } else if (type == ContentSettingsType::PERIODIC_BACKGROUND_SYNC) { |
| *out = PermissionType::PERIODIC_BACKGROUND_SYNC; |
| } else if (type == ContentSettingsType::WAKE_LOCK_SCREEN) { |
| *out = PermissionType::WAKE_LOCK_SCREEN; |
| } else if (type == ContentSettingsType::WAKE_LOCK_SYSTEM) { |
| *out = PermissionType::WAKE_LOCK_SYSTEM; |
| } else if (type == ContentSettingsType::NFC) { |
| *out = PermissionType::NFC; |
| } else if (type == ContentSettingsType::VR) { |
| *out = PermissionType::VR; |
| } else if (type == ContentSettingsType::AR) { |
| *out = PermissionType::AR; |
| } else if (type == ContentSettingsType::STORAGE_ACCESS) { |
| *out = PermissionType::STORAGE_ACCESS_GRANT; |
| } else if (type == ContentSettingsType::CAMERA_PAN_TILT_ZOOM) { |
| *out = PermissionType::CAMERA_PAN_TILT_ZOOM; |
| } else if (type == ContentSettingsType::WINDOW_PLACEMENT) { |
| *out = PermissionType::WINDOW_PLACEMENT; |
| } else if (type == ContentSettingsType::FONT_ACCESS) { |
| *out = PermissionType::FONT_ACCESS; |
| } else if (type == ContentSettingsType::IDLE_DETECTION) { |
| *out = PermissionType::IDLE_DETECTION; |
| } else if (type == ContentSettingsType::DISPLAY_CAPTURE) { |
| *out = PermissionType::DISPLAY_CAPTURE; |
| } else if (type == ContentSettingsType::FILE_HANDLING) { |
| *out = PermissionType::FILE_HANDLING; |
| } else { |
| return false; |
| } |
| return true; |
| } |
| |
| bool PermissionUtil::IsPermission(ContentSettingsType type) { |
| switch (type) { |
| case ContentSettingsType::GEOLOCATION: |
| case ContentSettingsType::NOTIFICATIONS: |
| case ContentSettingsType::MIDI: |
| case ContentSettingsType::MIDI_SYSEX: |
| case ContentSettingsType::DURABLE_STORAGE: |
| case ContentSettingsType::MEDIASTREAM_CAMERA: |
| case ContentSettingsType::MEDIASTREAM_MIC: |
| case ContentSettingsType::BACKGROUND_SYNC: |
| #if defined(OS_ANDROID) || BUILDFLAG(IS_CHROMEOS_ASH) || defined(OW_WIN) |
| case ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER: |
| #endif |
| case ContentSettingsType::SENSORS: |
| case ContentSettingsType::ACCESSIBILITY_EVENTS: |
| case ContentSettingsType::CLIPBOARD_READ_WRITE: |
| case ContentSettingsType::PAYMENT_HANDLER: |
| case ContentSettingsType::BACKGROUND_FETCH: |
| case ContentSettingsType::PERIODIC_BACKGROUND_SYNC: |
| case ContentSettingsType::WAKE_LOCK_SCREEN: |
| case ContentSettingsType::WAKE_LOCK_SYSTEM: |
| case ContentSettingsType::NFC: |
| case ContentSettingsType::VR: |
| case ContentSettingsType::AR: |
| case ContentSettingsType::STORAGE_ACCESS: |
| case ContentSettingsType::CAMERA_PAN_TILT_ZOOM: |
| case ContentSettingsType::WINDOW_PLACEMENT: |
| case ContentSettingsType::FONT_ACCESS: |
| case ContentSettingsType::IDLE_DETECTION: |
| case ContentSettingsType::DISPLAY_CAPTURE: |
| case ContentSettingsType::FILE_HANDLING: |
| return true; |
| default: |
| return false; |
| } |
| } |
| |
| // Returns the last committed URL for `web_contents`. If the frame's URL is |
| // about:blank, returns GetLastCommittedOrigin. |
| // Due to dependency issues, this method is duplicated in |
| // content/shell/browser/shell_permission_manager.cc and |
| // content/browser/permissions/permission_util.cc. |
| // TODO(crbug.com/698985): Resolve GetLastCommitted[URL|Origin]() usage. |
| GURL PermissionUtil::GetLastCommittedOriginAsURL( |
| content::WebContents* web_contents) { |
| DCHECK(web_contents); |
| if (base::FeatureList::IsEnabled(features::kRevisedOriginHandling)) { |
| if (web_contents->GetLastCommittedURL().IsAboutBlank()) { |
| return web_contents->GetMainFrame()->GetLastCommittedOrigin().GetURL(); |
| } |
| } |
| |
| return web_contents->GetLastCommittedURL().GetOrigin(); |
| } |
| } // namespace permissions |