Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(518)

Side by Side Diff: chrome/common/extensions/permissions/chrome_permission_message_rules.cc

Issue 1300353002: Make USB permissions work in the new permission message system (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@kill_permissionmessage
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698