Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/common/extensions/permissions/chrome_permission_message_rules.h " | 5 #include "chrome/common/extensions/permissions/chrome_permission_message_rules.h " |
| 6 | 6 |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "chrome/grit/generated_resources.h" | 10 #include "chrome/grit/generated_resources.h" |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 171 } | 171 } |
| 172 | 172 |
| 173 int message_id_for_one_host_; | 173 int message_id_for_one_host_; |
| 174 int message_id_for_two_hosts_; | 174 int message_id_for_two_hosts_; |
| 175 int message_id_for_three_hosts_; | 175 int message_id_for_three_hosts_; |
| 176 int message_id_for_many_hosts_; | 176 int message_id_for_many_hosts_; |
| 177 | 177 |
| 178 DISALLOW_COPY_AND_ASSIGN(CommaSeparatedListFormatter); | 178 DISALLOW_COPY_AND_ASSIGN(CommaSeparatedListFormatter); |
| 179 }; | 179 }; |
| 180 | 180 |
| 181 class USBDevicesFormatter : public ChromePermissionMessageFormatter { | |
| 182 public: | |
| 183 USBDevicesFormatter() {} | |
| 184 ~USBDevicesFormatter() override {} | |
| 185 | |
| 186 CoalescedPermissionMessage GetPermissionMessage( | |
| 187 const PermissionIDSet& permissions) const override { | |
| 188 DCHECK(permissions.size() > 0); | |
| 189 | |
| 190 // Single-item case: Put it directly into the top-level message. | |
| 191 if (permissions.size() == 1) { | |
|
Devlin
2015/08/20 16:33:07
nit: I think these would be more readable in helpe
Marc Treib
2015/08/21 08:00:48
Done, mostly - I still have to pass the Permission
| |
| 192 const PermissionID& permission = *permissions.begin(); | |
| 193 base::string16 msg; | |
| 194 switch (permission.id()) { | |
| 195 case APIPermission::kUsbDevice: | |
| 196 msg = l10n_util::GetStringFUTF16( | |
| 197 IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE, permission.parameter()); | |
| 198 break; | |
| 199 case APIPermission::kUsbDeviceUnknownProduct: | |
| 200 msg = l10n_util::GetStringFUTF16( | |
| 201 IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_UNKNOWN_PRODUCT, | |
| 202 permission.parameter()); | |
| 203 break; | |
| 204 case APIPermission::kUsbDeviceUnknownVendor: | |
| 205 msg = l10n_util::GetStringUTF16( | |
| 206 IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_UNKNOWN_VENDOR); | |
| 207 break; | |
| 208 default: | |
| 209 NOTREACHED(); | |
| 210 } | |
| 211 return CoalescedPermissionMessage(msg, permissions); | |
| 212 } | |
| 213 | |
| 214 // Multi-item case: Put all the items into submessages. | |
| 215 std::vector<base::string16> submessages; | |
| 216 std::vector<base::string16> devices = | |
| 217 permissions.GetAllPermissionsWithID(APIPermission::kUsbDevice) | |
| 218 .GetAllPermissionParameters(); | |
| 219 for (const base::string16& device : devices) { | |
| 220 submessages.push_back(l10n_util::GetStringFUTF16( | |
| 221 IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_LIST_ITEM, device)); | |
| 222 } | |
| 223 std::vector<base::string16> vendors = | |
| 224 permissions.GetAllPermissionsWithID( | |
| 225 APIPermission::kUsbDeviceUnknownProduct) | |
| 226 .GetAllPermissionParameters(); | |
| 227 for (const base::string16& vendor : vendors) { | |
| 228 submessages.push_back(l10n_util::GetStringFUTF16( | |
| 229 IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_LIST_ITEM_UNKNOWN_PRODUCT, | |
| 230 vendor)); | |
| 231 } | |
| 232 if (permissions.ContainsID(APIPermission::kUsbDeviceUnknownVendor)) { | |
| 233 submessages.push_back(l10n_util::GetStringUTF16( | |
| 234 IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_LIST_ITEM_UNKNOWN_VENDOR)); | |
| 235 } | |
| 236 | |
| 237 return CoalescedPermissionMessage( | |
| 238 l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_LIST), | |
| 239 permissions, submessages); | |
| 240 } | |
| 241 | |
| 242 private: | |
| 243 DISALLOW_COPY_AND_ASSIGN(USBDevicesFormatter); | |
| 244 }; | |
| 245 | |
| 181 } // namespace | 246 } // namespace |
| 182 | 247 |
| 183 ChromePermissionMessageRule::ChromePermissionMessageRule( | 248 ChromePermissionMessageRule::ChromePermissionMessageRule( |
| 184 int message_id, | 249 int message_id, |
| 185 PermissionIDSetInitializer required, | 250 PermissionIDSetInitializer required, |
| 186 PermissionIDSetInitializer optional) | 251 PermissionIDSetInitializer optional) |
| 187 : required_permissions_(required), | 252 : required_permissions_(required), |
| 188 optional_permissions_(optional), | 253 optional_permissions_(optional), |
| 189 formatter_(new DefaultPermissionMessageFormatter(message_id)) { | 254 formatter_(new DefaultPermissionMessageFormatter(message_id)) { |
| 190 } | 255 } |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 251 // yet powerful enough to encapsulate all the messages we want to display. | 316 // yet powerful enough to encapsulate all the messages we want to display. |
| 252 // | 317 // |
| 253 // TODO(sashab): Once existing message sites are deprecated, reorder this list | 318 // TODO(sashab): Once existing message sites are deprecated, reorder this list |
| 254 // to better describe the rules generated, rather than the callsites they are | 319 // to better describe the rules generated, rather than the callsites they are |
| 255 // migrated from. | 320 // migrated from. |
| 256 ChromePermissionMessageRule rules_arr[] = { | 321 ChromePermissionMessageRule rules_arr[] = { |
| 257 // Full url access permission messages. | 322 // Full url access permission messages. |
| 258 {IDS_EXTENSION_PROMPT_WARNING_DEBUGGER, {APIPermission::kDebugger}, {}}, | 323 {IDS_EXTENSION_PROMPT_WARNING_DEBUGGER, {APIPermission::kDebugger}, {}}, |
| 259 {IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS, | 324 {IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS, |
| 260 {APIPermission::kPlugin}, | 325 {APIPermission::kPlugin}, |
| 261 {APIPermission::kFullAccess, | 326 {APIPermission::kFullAccess, APIPermission::kHostsAll, |
| 262 APIPermission::kHostsAll, | 327 APIPermission::kHostsAllReadOnly, APIPermission::kDeclarativeWebRequest, |
| 263 APIPermission::kHostsAllReadOnly, | 328 APIPermission::kTopSites, APIPermission::kTab}}, |
| 264 APIPermission::kDeclarativeWebRequest, | |
| 265 APIPermission::kTopSites, | |
| 266 APIPermission::kTab}}, | |
| 267 {IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS, | 329 {IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS, |
| 268 {APIPermission::kFullAccess}, | 330 {APIPermission::kFullAccess}, |
| 269 {APIPermission::kHostsAll, | 331 {APIPermission::kHostsAll, APIPermission::kHostsAllReadOnly, |
| 270 APIPermission::kHostsAllReadOnly, | 332 APIPermission::kDeclarativeWebRequest, APIPermission::kTopSites, |
| 271 APIPermission::kDeclarativeWebRequest, | |
| 272 APIPermission::kTopSites, | |
| 273 APIPermission::kTab}}, | 333 APIPermission::kTab}}, |
| 274 | 334 |
| 275 // Parameterized permission messages: | 335 // Parameterized permission messages: |
| 276 // Messages generated by the sockets permission. | 336 // Messages generated by the sockets permission. |
| 277 {new SpaceSeparatedListFormatter( | 337 {new SpaceSeparatedListFormatter( |
| 278 IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAIN, | 338 IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAIN, |
| 279 IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAINS), | 339 IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAINS), |
| 280 {APIPermission::kSocketDomainHosts}, | 340 {APIPermission::kSocketDomainHosts}, |
| 281 {}}, | 341 {}}, |
| 282 {new SpaceSeparatedListFormatter( | 342 {new SpaceSeparatedListFormatter( |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 294 {APIPermission::kHostReadOnly}, | 354 {APIPermission::kHostReadOnly}, |
| 295 {}}, | 355 {}}, |
| 296 {new CommaSeparatedListFormatter(IDS_EXTENSION_PROMPT_WARNING_1_HOST, | 356 {new CommaSeparatedListFormatter(IDS_EXTENSION_PROMPT_WARNING_1_HOST, |
| 297 IDS_EXTENSION_PROMPT_WARNING_2_HOSTS, | 357 IDS_EXTENSION_PROMPT_WARNING_2_HOSTS, |
| 298 IDS_EXTENSION_PROMPT_WARNING_3_HOSTS, | 358 IDS_EXTENSION_PROMPT_WARNING_3_HOSTS, |
| 299 IDS_EXTENSION_PROMPT_WARNING_HOSTS_LIST), | 359 IDS_EXTENSION_PROMPT_WARNING_HOSTS_LIST), |
| 300 {APIPermission::kHostReadWrite}, | 360 {APIPermission::kHostReadWrite}, |
| 301 {}}, | 361 {}}, |
| 302 | 362 |
| 303 // USB Device Permission rules: | 363 // USB Device Permission rules: |
| 304 // TODO(sashab, reillyg): Rework the permission message logic for USB | 364 {new USBDevicesFormatter, |
| 305 // devices to generate more meaningful messages and better fit the current | 365 {}, |
| 306 // rules system. Maybe model it similarly to host or socket permissions | 366 {APIPermission::kUsbDevice, APIPermission::kUsbDeviceUnknownProduct, |
| 307 // above. crbug.com/522842 | 367 APIPermission::kUsbDeviceUnknownVendor}}, |
| 308 {new SingleParameterFormatter(IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE), | |
| 309 {APIPermission::kUsbDevice}, | |
| 310 {}}, | |
| 311 {new SingleParameterFormatter( | |
| 312 IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_UNKNOWN_PRODUCT), | |
| 313 {APIPermission::kUsbDeviceUnknownProduct}, | |
| 314 {}}, | |
| 315 {IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_UNKNOWN_VENDOR, | |
| 316 {APIPermission::kUsbDeviceUnknownVendor}, | |
| 317 {}}, | |
| 318 {new SimpleListFormatter(IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_LIST), | |
| 319 {APIPermission::kUsbDeviceList}, | |
| 320 {}}, | |
| 321 | 368 |
| 322 // Coalesced message rules taken from | 369 // Coalesced message rules taken from |
| 323 // ChromePermissionMessageProvider::GetWarningMessages(): | 370 // ChromePermissionMessageProvider::GetWarningMessages(): |
| 324 | 371 |
| 325 // Access to users' devices should provide a single warning message | 372 // Access to users' devices should provide a single warning message |
| 326 // specifying the transport method used; serial and/or Bluetooth. | 373 // specifying the transport method used; serial and/or Bluetooth. |
| 327 {IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_SERIAL, | 374 {IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_SERIAL, |
| 328 {APIPermission::kBluetooth, APIPermission::kSerial}, | 375 {APIPermission::kBluetooth, APIPermission::kSerial}, |
| 329 {APIPermission::kBluetoothDevices}}, | 376 {APIPermission::kBluetoothDevices}}, |
| 330 | 377 |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 347 {IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_DELETE, | 394 {IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_DELETE, |
| 348 {APIPermission::kMediaGalleriesAllGalleriesDelete, | 395 {APIPermission::kMediaGalleriesAllGalleriesDelete, |
| 349 APIPermission::kMediaGalleriesAllGalleriesRead}, | 396 APIPermission::kMediaGalleriesAllGalleriesRead}, |
| 350 {}}, | 397 {}}, |
| 351 {IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ, | 398 {IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ, |
| 352 {APIPermission::kMediaGalleriesAllGalleriesRead}, | 399 {APIPermission::kMediaGalleriesAllGalleriesRead}, |
| 353 {}}, | 400 {}}, |
| 354 | 401 |
| 355 {IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE_AND_SESSIONS, | 402 {IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE_AND_SESSIONS, |
| 356 {APIPermission::kSessions, APIPermission::kHistory}, | 403 {APIPermission::kSessions, APIPermission::kHistory}, |
| 357 {APIPermission::kFavicon, | 404 {APIPermission::kFavicon, APIPermission::kProcesses, APIPermission::kTab, |
| 358 APIPermission::kProcesses, | 405 APIPermission::kTopSites, APIPermission::kWebNavigation}}, |
| 359 APIPermission::kTab, | |
| 360 APIPermission::kTopSites, | |
| 361 APIPermission::kWebNavigation}}, | |
| 362 {IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS, | 406 {IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS, |
| 363 {APIPermission::kSessions, APIPermission::kTab}, | 407 {APIPermission::kSessions, APIPermission::kTab}, |
| 364 {APIPermission::kFavicon, | 408 {APIPermission::kFavicon, APIPermission::kProcesses, |
| 365 APIPermission::kProcesses, | 409 APIPermission::kTopSites, APIPermission::kWebNavigation}}, |
| 366 APIPermission::kTopSites, | |
| 367 APIPermission::kWebNavigation}}, | |
| 368 | 410 |
| 369 // Suppression list taken from | 411 // Suppression list taken from |
| 370 // ChromePermissionMessageProvider::GetPermissionMessages(): | 412 // ChromePermissionMessageProvider::GetPermissionMessages(): |
| 371 // Some warnings are more generic and/or powerful and supercede other | 413 // Some warnings are more generic and/or powerful and supercede other |
| 372 // warnings. In that case, the first message suppresses the second one. | 414 // warnings. In that case, the first message suppresses the second one. |
| 373 {IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH, | 415 {IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH, |
| 374 {APIPermission::kBluetooth}, | 416 {APIPermission::kBluetooth}, |
| 375 {APIPermission::kBluetoothDevices}}, | 417 {APIPermission::kBluetoothDevices}}, |
| 376 {IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS, | 418 {IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS, |
| 377 {APIPermission::kBookmark}, | 419 {APIPermission::kBookmark}, |
| 378 {APIPermission::kOverrideBookmarksUI}}, | 420 {APIPermission::kOverrideBookmarksUI}}, |
| 379 // History already allows reading favicons, tab access and accessing the | 421 // History already allows reading favicons, tab access and accessing the |
| 380 // list of most frequently visited sites. | 422 // list of most frequently visited sites. |
| 381 {IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE, | 423 {IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE, |
| 382 {APIPermission::kHistory}, | 424 {APIPermission::kHistory}, |
| 383 {APIPermission::kFavicon, | 425 {APIPermission::kFavicon, APIPermission::kProcesses, APIPermission::kTab, |
| 384 APIPermission::kProcesses, | 426 APIPermission::kTopSites, APIPermission::kWebNavigation}}, |
| 385 APIPermission::kTab, | |
| 386 APIPermission::kTopSites, | |
| 387 APIPermission::kWebNavigation}}, | |
| 388 // A special hack: If kFileSystemWriteDirectory would be displayed, hide | 427 // A special hack: If kFileSystemWriteDirectory would be displayed, hide |
| 389 // kFileSystemDirectory as the write directory message implies it. | 428 // kFileSystemDirectory as the write directory message implies it. |
| 390 // TODO(sashab): Remove kFileSystemWriteDirectory; it's no longer needed | 429 // TODO(sashab): Remove kFileSystemWriteDirectory; it's no longer needed |
| 391 // since this rules system can represent the rule. See crbug.com/284849. | 430 // since this rules system can represent the rule. See crbug.com/284849. |
| 392 {IDS_EXTENSION_PROMPT_WARNING_FILE_SYSTEM_WRITE_DIRECTORY, | 431 {IDS_EXTENSION_PROMPT_WARNING_FILE_SYSTEM_WRITE_DIRECTORY, |
| 393 {APIPermission::kFileSystemWrite, APIPermission::kFileSystemDirectory}, | 432 {APIPermission::kFileSystemWrite, APIPermission::kFileSystemDirectory}, |
| 394 {APIPermission::kFileSystemWriteDirectory}}, | 433 {APIPermission::kFileSystemWriteDirectory}}, |
| 395 // Full access already allows DeclarativeWebRequest, reading the list of | 434 // Full access already allows DeclarativeWebRequest, reading the list of |
| 396 // most frequently visited sites, and tab access. | 435 // most frequently visited sites, and tab access. |
| 397 // The warning message for declarativeWebRequest | 436 // The warning message for declarativeWebRequest |
| 398 // permissions speaks about blocking parts of pages, which is a | 437 // permissions speaks about blocking parts of pages, which is a |
| 399 // subset of what the "<all_urls>" access allows. Therefore we | 438 // subset of what the "<all_urls>" access allows. Therefore we |
| 400 // display only the "<all_urls>" warning message if both permissions | 439 // display only the "<all_urls>" warning message if both permissions |
| 401 // are required. | 440 // are required. |
| 402 {IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS, | 441 {IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS, |
| 403 {APIPermission::kHostsAll}, | 442 {APIPermission::kHostsAll}, |
| 404 {APIPermission::kDeclarativeWebRequest, | 443 {APIPermission::kDeclarativeWebRequest, APIPermission::kTopSites, |
| 405 APIPermission::kTopSites, | 444 APIPermission::kTab, APIPermission::kFavicon, APIPermission::kTopSites, |
| 406 APIPermission::kTab, | |
| 407 APIPermission::kFavicon, | |
| 408 APIPermission::kTopSites, | |
| 409 APIPermission::kHostsAllReadOnly}}, | 445 APIPermission::kHostsAllReadOnly}}, |
| 410 // AutomationManifestPermission: | 446 // AutomationManifestPermission: |
| 411 {IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS_READ_ONLY, | 447 {IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS_READ_ONLY, |
| 412 {APIPermission::kHostsAllReadOnly}, | 448 {APIPermission::kHostsAllReadOnly}, |
| 413 {}}, // TODO(treib): This should probably include kTab? | 449 {}}, // TODO(treib): This should probably include kTab? |
| 414 // Tabs already allows reading favicons and reading the list of most | 450 // Tabs already allows reading favicons and reading the list of most |
| 415 // frequently visited sites. | 451 // frequently visited sites. |
| 416 {IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ, | 452 {IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ, |
| 417 {APIPermission::kTab}, | 453 {APIPermission::kTab}, |
| 418 {APIPermission::kFavicon, | 454 {APIPermission::kFavicon, APIPermission::kProcesses, |
| 419 APIPermission::kProcesses, | 455 APIPermission::kTopSites, APIPermission::kWebNavigation}}, |
| 420 APIPermission::kTopSites, | |
| 421 APIPermission::kWebNavigation}}, | |
| 422 | 456 |
| 423 // Individual message rules taken from | 457 // Individual message rules taken from |
| 424 // ChromeAPIPermissions::GetAllPermissions(): | 458 // ChromeAPIPermissions::GetAllPermissions(): |
| 425 // Permission messages for all extension types: | 459 // Permission messages for all extension types: |
| 426 | 460 |
| 427 {IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD, | 461 {IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD, |
| 428 {APIPermission::kClipboardRead}, | 462 {APIPermission::kClipboardRead}, |
| 429 {}}, | 463 {}}, |
| 430 {IDS_EXTENSION_PROMPT_WARNING_DESKTOP_CAPTURE, | 464 {IDS_EXTENSION_PROMPT_WARNING_DESKTOP_CAPTURE, |
| 431 {APIPermission::kDesktopCapture}, | 465 {APIPermission::kDesktopCapture}, |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 680 insert(permission_four); | 714 insert(permission_four); |
| 681 insert(permission_five); | 715 insert(permission_five); |
| 682 insert(permission_six); | 716 insert(permission_six); |
| 683 } | 717 } |
| 684 | 718 |
| 685 ChromePermissionMessageRule::PermissionIDSetInitializer:: | 719 ChromePermissionMessageRule::PermissionIDSetInitializer:: |
| 686 ~PermissionIDSetInitializer() { | 720 ~PermissionIDSetInitializer() { |
| 687 } | 721 } |
| 688 | 722 |
| 689 } // namespace extensions | 723 } // namespace extensions |
| OLD | NEW |