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

Side by Side Diff: extensions/common/permissions/usb_device_permission.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: review 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 "extensions/common/permissions/usb_device_permission.h" 5 #include "extensions/common/permissions/usb_device_permission.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/strings/string16.h" 11 #include "base/strings/string16.h"
12 #include "base/strings/string_util.h" 12 #include "base/strings/string_util.h"
13 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
14 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
15 #include "device/usb/usb_ids.h" 15 #include "device/usb/usb_ids.h"
16 #include "extensions/common/permissions/permissions_info.h" 16 #include "extensions/common/permissions/permissions_info.h"
17 #include "grit/extensions_strings.h" 17 #include "grit/extensions_strings.h"
18 #include "ui/base/l10n/l10n_util.h" 18 #include "ui/base/l10n/l10n_util.h"
19 19
20 namespace extensions { 20 namespace extensions {
21 21
22 namespace { 22 UsbDevicePermission::UsbDevicePermission(const APIPermissionInfo* info)
23 : SetDisjunctionPermission<UsbDevicePermissionData, UsbDevicePermission>(
24 info) {}
23 25
24 // Adds the permissions from the |data_set| to |ids|. 26 UsbDevicePermission::~UsbDevicePermission() {}
25 void AddPermissionsToLists(const std::set<UsbDevicePermissionData>& data_set,
26 PermissionIDSet* ids) {
27 // TODO(sashab): Once GetMessages() is deprecated, move this logic back into
28 // GetPermissions().
29 // TODO(sashab, reillyg): Once GetMessages() is deprecated, rework the
30 // permission message logic for USB devices to generate more meaningful
31 // messages and better fit the current rules system.
32 if (data_set.size() == 1) {
33 const UsbDevicePermissionData& data = *data_set.begin();
34 27
28 PermissionIDSet UsbDevicePermission::GetPermissions() const {
29 PermissionIDSet ids;
30
31 std::set<uint16> unknown_product_vendors;
32 bool found_unknown_vendor = false;
33
34 for (const UsbDevicePermissionData& data : data_set_) {
35 const char* vendor = device::UsbIds::GetVendorName(data.vendor_id()); 35 const char* vendor = device::UsbIds::GetVendorName(data.vendor_id());
36 if (vendor) { 36 if (vendor) {
37 const char* product = 37 const char* product =
38 device::UsbIds::GetProductName(data.vendor_id(), data.product_id()); 38 device::UsbIds::GetProductName(data.vendor_id(), data.product_id());
39 if (product) { 39 if (product) {
40 base::string16 product_name_and_vendor = l10n_util::GetStringFUTF16( 40 base::string16 product_name_and_vendor = l10n_util::GetStringFUTF16(
41 IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_PRODUCT_NAME_AND_VENDOR, 41 IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_PRODUCT_NAME_AND_VENDOR,
42 base::UTF8ToUTF16(product), base::UTF8ToUTF16(vendor)); 42 base::UTF8ToUTF16(product), base::UTF8ToUTF16(vendor));
43 43 ids.insert(APIPermission::kUsbDevice, product_name_and_vendor);
44 ids->insert(APIPermission::kUsbDevice, product_name_and_vendor);
45 } else { 44 } else {
46 ids->insert(APIPermission::kUsbDeviceUnknownProduct, 45 unknown_product_vendors.insert(data.vendor_id());
47 base::UTF8ToUTF16(vendor));
48 } 46 }
49 } else { 47 } else {
50 ids->insert(APIPermission::kUsbDeviceUnknownVendor); 48 found_unknown_vendor = true;
51 } 49 }
52 } else if (data_set.size() > 1) { 50 }
53 std::vector<base::string16> details;
54 std::set<uint16> unknown_product_vendors;
55 bool found_unknown_vendor = false;
56 51
57 for (const UsbDevicePermissionData& data : data_set) { 52 for (uint16 vendor_id : unknown_product_vendors) {
58 const char* vendor = device::UsbIds::GetVendorName(data.vendor_id()); 53 const char* vendor = device::UsbIds::GetVendorName(vendor_id);
59 if (vendor) { 54 DCHECK(vendor);
60 const char* product = 55 ids.insert(APIPermission::kUsbDeviceUnknownProduct,
61 device::UsbIds::GetProductName(data.vendor_id(), data.product_id()); 56 base::UTF8ToUTF16(vendor));
62 if (product) { 57 }
63 base::string16 product_name_and_vendor = l10n_util::GetStringFUTF16(
64 IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_PRODUCT_NAME_AND_VENDOR,
65 base::UTF8ToUTF16(product), base::UTF8ToUTF16(vendor));
66 details.push_back(l10n_util::GetStringFUTF16(
67 IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_LIST_ITEM,
68 product_name_and_vendor));
69 } else {
70 unknown_product_vendors.insert(data.vendor_id());
71 }
72 } else {
73 found_unknown_vendor = true;
74 }
75 }
76 58
77 // List generic "devices from this vendor" entries after specific devices. 59 if (found_unknown_vendor)
78 for (const uint16& vendor_id : unknown_product_vendors) { 60 ids.insert(APIPermission::kUsbDeviceUnknownVendor);
79 const char* vendor = device::UsbIds::GetVendorName(vendor_id);
80 DCHECK(vendor);
81 details.push_back(l10n_util::GetStringFUTF16(
82 IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_LIST_ITEM_UNKNOWN_PRODUCT,
83 base::UTF8ToUTF16(vendor)));
84 }
85 61
86 // Display the catch all "device from an unknown vendor" last.
87 if (found_unknown_vendor) {
88 details.push_back(l10n_util::GetStringUTF16(
89 IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_LIST_ITEM_UNKNOWN_VENDOR));
90 }
91
92 for (const auto& detail : details)
93 ids->insert(APIPermission::kUsbDeviceList, detail);
94 }
95 }
96
97 } // namespace
98
99 UsbDevicePermission::UsbDevicePermission(const APIPermissionInfo* info)
100 : SetDisjunctionPermission<UsbDevicePermissionData, UsbDevicePermission>(
101 info) {
102 }
103
104 UsbDevicePermission::~UsbDevicePermission() {
105 }
106
107 PermissionIDSet UsbDevicePermission::GetPermissions() const {
108 PermissionIDSet ids;
109 AddPermissionsToLists(data_set_, &ids);
110 return ids; 62 return ids;
111 } 63 }
112 64
113 } // namespace extensions 65 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/common/permissions/api_permission_set.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698