request_type.cc 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/permissions/request_type.h"
  5. #include "base/check.h"
  6. #include "base/notreached.h"
  7. #include "build/build_config.h"
  8. #include "components/content_settings/core/common/content_settings_types.h"
  9. #include "components/permissions/permissions_client.h"
  10. #if BUILDFLAG(IS_ANDROID)
  11. #include "components/resources/android/theme_resources.h"
  12. #else
  13. #include "components/permissions/vector_icons/vector_icons.h"
  14. #include "components/vector_icons/vector_icons.h"
  15. #include "ui/gfx/paint_vector_icon.h"
  16. #include "ui/gfx/vector_icon_types.h"
  17. #endif // BUILDFLAG(IS_ANDROID)
  18. namespace permissions {
  19. namespace {
  20. #if BUILDFLAG(IS_ANDROID)
  21. int GetIconIdAndroid(RequestType type) {
  22. switch (type) {
  23. case RequestType::kAccessibilityEvents:
  24. return IDR_ANDROID_INFOBAR_ACCESSIBILITY_EVENTS;
  25. case RequestType::kArSession:
  26. case RequestType::kVrSession:
  27. return IDR_ANDROID_INFOBAR_VR_HEADSET;
  28. case RequestType::kCameraStream:
  29. return IDR_ANDROID_INFOBAR_MEDIA_STREAM_CAMERA;
  30. case RequestType::kClipboard:
  31. return IDR_ANDROID_INFOBAR_CLIPBOARD;
  32. case RequestType::kDiskQuota:
  33. return IDR_ANDROID_INFOBAR_FOLDER;
  34. case RequestType::kGeolocation:
  35. return IDR_ANDROID_INFOBAR_GEOLOCATION;
  36. case RequestType::kIdleDetection:
  37. return IDR_ANDROID_INFOBAR_IDLE_DETECTION;
  38. case RequestType::kMicStream:
  39. return IDR_ANDROID_INFOBAR_MEDIA_STREAM_MIC;
  40. case RequestType::kMidiSysex:
  41. return IDR_ANDROID_INFOBAR_MIDI;
  42. case RequestType::kMultipleDownloads:
  43. return IDR_ANDROID_INFOBAR_MULTIPLE_DOWNLOADS;
  44. case RequestType::kNfcDevice:
  45. return IDR_ANDROID_INFOBAR_NFC;
  46. case RequestType::kNotifications:
  47. return IDR_ANDROID_INFOBAR_NOTIFICATIONS;
  48. case RequestType::kProtectedMediaIdentifier:
  49. return IDR_ANDROID_INFOBAR_PROTECTED_MEDIA_IDENTIFIER;
  50. case RequestType::kStorageAccess:
  51. return IDR_ANDROID_INFOBAR_PERMISSION_COOKIE;
  52. }
  53. NOTREACHED();
  54. return 0;
  55. }
  56. #endif // BUILDFLAG(IS_ANDROID)
  57. #if !BUILDFLAG(IS_ANDROID)
  58. const gfx::VectorIcon& GetIconIdDesktop(RequestType type) {
  59. switch (type) {
  60. case RequestType::kAccessibilityEvents:
  61. return kAccessibilityIcon;
  62. case RequestType::kArSession:
  63. case RequestType::kVrSession:
  64. return vector_icons::kVrHeadsetIcon;
  65. case RequestType::kCameraPanTiltZoom:
  66. case RequestType::kCameraStream:
  67. return vector_icons::kVideocamIcon;
  68. case RequestType::kClipboard:
  69. return vector_icons::kContentPasteIcon;
  70. case RequestType::kDiskQuota:
  71. return vector_icons::kFolderIcon;
  72. case RequestType::kGeolocation:
  73. return vector_icons::kLocationOnIcon;
  74. case RequestType::kIdleDetection:
  75. return vector_icons::kDevicesIcon;
  76. case RequestType::kLocalFonts:
  77. return vector_icons::kFontDownloadIcon;
  78. case RequestType::kMicStream:
  79. return vector_icons::kMicIcon;
  80. case RequestType::kMidiSysex:
  81. return vector_icons::kMidiIcon;
  82. case RequestType::kMultipleDownloads:
  83. return vector_icons::kFileDownloadIcon;
  84. case RequestType::kNotifications:
  85. return vector_icons::kNotificationsIcon;
  86. #if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN)
  87. case RequestType::kProtectedMediaIdentifier:
  88. // This icon is provided by ChromePermissionsClient::GetOverrideIconId.
  89. NOTREACHED();
  90. return gfx::kNoneIcon;
  91. #endif
  92. case RequestType::kRegisterProtocolHandler:
  93. return vector_icons::kProtocolHandlerIcon;
  94. case RequestType::kSecurityAttestation:
  95. return kUsbSecurityKeyIcon;
  96. case RequestType::kU2fApiRequest:
  97. return kUsbSecurityKeyIcon;
  98. case RequestType::kStorageAccess:
  99. return vector_icons::kCookieIcon;
  100. case RequestType::kWindowPlacement:
  101. return vector_icons::kSelectWindowIcon;
  102. }
  103. NOTREACHED();
  104. return gfx::kNoneIcon;
  105. }
  106. const gfx::VectorIcon& GetBlockedIconIdDesktop(RequestType type) {
  107. switch (type) {
  108. case RequestType::kGeolocation:
  109. return vector_icons::kLocationOffIcon;
  110. case RequestType::kNotifications:
  111. return vector_icons::kNotificationsOffIcon;
  112. case RequestType::kArSession:
  113. case RequestType::kVrSession:
  114. return vector_icons::kVrHeadsetOffIcon;
  115. case RequestType::kCameraStream:
  116. return vector_icons::kVideocamOffIcon;
  117. case RequestType::kClipboard:
  118. return vector_icons::kContentPasteOffIcon;
  119. case RequestType::kIdleDetection:
  120. return vector_icons::kDevicesOffIcon;
  121. case RequestType::kMicStream:
  122. return vector_icons::kMicOffIcon;
  123. case RequestType::kMidiSysex:
  124. return vector_icons::kMidiOffIcon;
  125. default:
  126. NOTREACHED();
  127. }
  128. NOTREACHED();
  129. return gfx::kNoneIcon;
  130. }
  131. #endif // !BUILDFLAG(IS_ANDROID)
  132. absl::optional<RequestType> ContentSettingsTypeToRequestTypeIfExists(
  133. ContentSettingsType content_settings_type) {
  134. switch (content_settings_type) {
  135. case ContentSettingsType::ACCESSIBILITY_EVENTS:
  136. return RequestType::kAccessibilityEvents;
  137. case ContentSettingsType::AR:
  138. return RequestType::kArSession;
  139. #if !BUILDFLAG(IS_ANDROID)
  140. case ContentSettingsType::CAMERA_PAN_TILT_ZOOM:
  141. return RequestType::kCameraPanTiltZoom;
  142. #endif
  143. case ContentSettingsType::MEDIASTREAM_CAMERA:
  144. return RequestType::kCameraStream;
  145. case ContentSettingsType::CLIPBOARD_READ_WRITE:
  146. return RequestType::kClipboard;
  147. #if !BUILDFLAG(IS_ANDROID)
  148. case ContentSettingsType::LOCAL_FONTS:
  149. return RequestType::kLocalFonts;
  150. #endif
  151. case ContentSettingsType::GEOLOCATION:
  152. return RequestType::kGeolocation;
  153. case ContentSettingsType::IDLE_DETECTION:
  154. return RequestType::kIdleDetection;
  155. case ContentSettingsType::MEDIASTREAM_MIC:
  156. return RequestType::kMicStream;
  157. case ContentSettingsType::MIDI_SYSEX:
  158. return RequestType::kMidiSysex;
  159. case ContentSettingsType::NOTIFICATIONS:
  160. return RequestType::kNotifications;
  161. #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN)
  162. case ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER:
  163. return RequestType::kProtectedMediaIdentifier;
  164. #endif
  165. #if BUILDFLAG(IS_ANDROID)
  166. case ContentSettingsType::NFC:
  167. return RequestType::kNfcDevice;
  168. #endif
  169. case ContentSettingsType::STORAGE_ACCESS:
  170. return RequestType::kStorageAccess;
  171. case ContentSettingsType::VR:
  172. return RequestType::kVrSession;
  173. #if !BUILDFLAG(IS_ANDROID)
  174. case ContentSettingsType::WINDOW_PLACEMENT:
  175. return RequestType::kWindowPlacement;
  176. #endif
  177. default:
  178. return absl::nullopt;
  179. }
  180. }
  181. } // namespace
  182. bool IsRequestablePermissionType(ContentSettingsType content_settings_type) {
  183. return !!ContentSettingsTypeToRequestTypeIfExists(content_settings_type);
  184. }
  185. RequestType ContentSettingsTypeToRequestType(
  186. ContentSettingsType content_settings_type) {
  187. absl::optional<RequestType> request_type =
  188. ContentSettingsTypeToRequestTypeIfExists(content_settings_type);
  189. CHECK(request_type);
  190. return *request_type;
  191. }
  192. absl::optional<ContentSettingsType> RequestTypeToContentSettingsType(
  193. RequestType request_type) {
  194. switch (request_type) {
  195. case RequestType::kAccessibilityEvents:
  196. return ContentSettingsType::ACCESSIBILITY_EVENTS;
  197. case RequestType::kArSession:
  198. return ContentSettingsType::AR;
  199. #if !BUILDFLAG(IS_ANDROID)
  200. case RequestType::kCameraPanTiltZoom:
  201. return ContentSettingsType::CAMERA_PAN_TILT_ZOOM;
  202. #endif
  203. case RequestType::kCameraStream:
  204. return ContentSettingsType::MEDIASTREAM_CAMERA;
  205. case RequestType::kClipboard:
  206. return ContentSettingsType::CLIPBOARD_READ_WRITE;
  207. #if !BUILDFLAG(IS_ANDROID)
  208. case RequestType::kLocalFonts:
  209. return ContentSettingsType::LOCAL_FONTS;
  210. #endif
  211. case RequestType::kGeolocation:
  212. return ContentSettingsType::GEOLOCATION;
  213. case RequestType::kIdleDetection:
  214. return ContentSettingsType::IDLE_DETECTION;
  215. case RequestType::kMicStream:
  216. return ContentSettingsType::MEDIASTREAM_MIC;
  217. case RequestType::kMidiSysex:
  218. return ContentSettingsType::MIDI_SYSEX;
  219. #if BUILDFLAG(IS_ANDROID)
  220. case RequestType::kNfcDevice:
  221. return ContentSettingsType::NFC;
  222. #endif
  223. case RequestType::kNotifications:
  224. return ContentSettingsType::NOTIFICATIONS;
  225. #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN)
  226. case RequestType::kProtectedMediaIdentifier:
  227. return ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER;
  228. #endif
  229. case RequestType::kStorageAccess:
  230. return ContentSettingsType::STORAGE_ACCESS;
  231. case RequestType::kVrSession:
  232. return ContentSettingsType::VR;
  233. #if !BUILDFLAG(IS_ANDROID)
  234. case RequestType::kWindowPlacement:
  235. return ContentSettingsType::WINDOW_PLACEMENT;
  236. #endif
  237. default:
  238. // Not associated with a ContentSettingsType.
  239. return absl::nullopt;
  240. }
  241. }
  242. IconId GetIconId(RequestType type) {
  243. IconId override_id = PermissionsClient::Get()->GetOverrideIconId(type);
  244. #if BUILDFLAG(IS_ANDROID)
  245. if (override_id)
  246. return override_id;
  247. return GetIconIdAndroid(type);
  248. #else
  249. if (!override_id.is_empty())
  250. return override_id;
  251. return GetIconIdDesktop(type);
  252. #endif
  253. }
  254. #if !BUILDFLAG(IS_ANDROID)
  255. IconId GetBlockedIconId(RequestType type) {
  256. return GetBlockedIconIdDesktop(type);
  257. }
  258. #endif
  259. const char* PermissionKeyForRequestType(permissions::RequestType request_type) {
  260. switch (request_type) {
  261. case permissions::RequestType::kAccessibilityEvents:
  262. return "accessibility_events";
  263. case permissions::RequestType::kArSession:
  264. return "ar_session";
  265. #if !BUILDFLAG(IS_ANDROID)
  266. case permissions::RequestType::kCameraPanTiltZoom:
  267. return "camera_pan_tilt_zoom";
  268. #endif
  269. case permissions::RequestType::kCameraStream:
  270. return "camera_stream";
  271. case permissions::RequestType::kClipboard:
  272. return "clipboard";
  273. case permissions::RequestType::kDiskQuota:
  274. return "disk_quota";
  275. #if !BUILDFLAG(IS_ANDROID)
  276. case permissions::RequestType::kLocalFonts:
  277. return "local_fonts";
  278. #endif
  279. case permissions::RequestType::kGeolocation:
  280. return "geolocation";
  281. case permissions::RequestType::kIdleDetection:
  282. return "idle_detection";
  283. case permissions::RequestType::kMicStream:
  284. return "mic_stream";
  285. case permissions::RequestType::kMidiSysex:
  286. return "midi_sysex";
  287. case permissions::RequestType::kMultipleDownloads:
  288. return "multiple_downloads";
  289. #if BUILDFLAG(IS_ANDROID)
  290. case permissions::RequestType::kNfcDevice:
  291. return "nfc_device";
  292. #endif
  293. case permissions::RequestType::kNotifications:
  294. return "notifications";
  295. #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN)
  296. case permissions::RequestType::kProtectedMediaIdentifier:
  297. return "protected_media_identifier";
  298. #endif
  299. #if !BUILDFLAG(IS_ANDROID)
  300. case permissions::RequestType::kRegisterProtocolHandler:
  301. return "register_protocol_handler";
  302. case permissions::RequestType::kSecurityAttestation:
  303. return "security_attestation";
  304. #endif
  305. case permissions::RequestType::kStorageAccess:
  306. return "storage_access";
  307. #if !BUILDFLAG(IS_ANDROID)
  308. case permissions::RequestType::kU2fApiRequest:
  309. return "u2f_api_request";
  310. #endif
  311. case permissions::RequestType::kVrSession:
  312. return "vr_session";
  313. #if !BUILDFLAG(IS_ANDROID)
  314. case permissions::RequestType::kWindowPlacement:
  315. return "window_placement";
  316. #endif
  317. }
  318. return nullptr;
  319. }
  320. } // namespace permissions