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

Side by Side Diff: extensions/common/permissions/usb_device_permission.h

Issue 2418353002: Allow interfaceClass USB device permissions (Closed)
Patch Set: . Created 4 years, 1 month 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 #ifndef EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_H_ 5 #ifndef EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_H_
6 #define EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_H_ 6 #define EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory>
11 #include <set>
12
10 #include "extensions/common/permissions/api_permission.h" 13 #include "extensions/common/permissions/api_permission.h"
11 #include "extensions/common/permissions/set_disjunction_permission.h" 14 #include "extensions/common/permissions/set_disjunction_permission.h"
12 #include "extensions/common/permissions/usb_device_permission_data.h" 15 #include "extensions/common/permissions/usb_device_permission_data.h"
13 16
14 namespace extensions { 17 namespace extensions {
15 18
19 class Extension;
20
16 class UsbDevicePermission 21 class UsbDevicePermission
17 : public SetDisjunctionPermission<UsbDevicePermissionData, 22 : public SetDisjunctionPermission<UsbDevicePermissionData,
18 UsbDevicePermission> { 23 UsbDevicePermission> {
19 public: 24 public:
20 struct CheckParam : public APIPermission::CheckParam { 25 struct CheckParam : public APIPermission::CheckParam {
21 CheckParam(uint16_t vendor_id, uint16_t product_id, int interface_id) 26 static std::unique_ptr<CheckParam> ForUsbDevice(
22 : vendor_id(vendor_id), 27 const Extension* extension,
23 product_id(product_id), 28 const device::UsbDevice* device);
24 interface_id(interface_id) {} 29 // Creates check param that only checks vendor, product and interface ID
30 // permission properties. It will accept all interfaceClass properties. For
31 // example, created param would always accept {"intefaceClass": 3}
32 // permission, and it would accept {"vendorId": 2, "interfaceClass": 4} iff
33 // |vendor_id| is 2.
34 // Created check param failing means there are no permissions allowing
35 // access to the USB device. On the other hand, created check param passing
36 // does not necessarily mean there is a permission allowing access to the
37 // USB device - one should recheck the permission when complete USB device
38 // info is known.
39 // This is useful when trying to discard devices that do not match any
40 // usbDevice permission when complete USB device info is not known, without
41 // having to fetch available USB devices.
42 static std::unique_ptr<CheckParam> ForDeviceWithAnyInterfaceClass(
43 const Extension* extension,
44 uint16_t vendor_id,
45 uint16_t product_id,
46 int interface_id);
47 static std::unique_ptr<CheckParam> ForUsbDeviceAndInterface(
48 const Extension* extension,
49 const device::UsbDevice* device,
50 int interface_id);
51 static std::unique_ptr<CheckParam> ForHidDevice(const Extension* extension,
52 uint16_t vendor_id,
53 uint16_t product_id);
54
55 CheckParam(const Extension* extension,
56 uint16_t vendor_id,
57 uint16_t product_id,
58 std::unique_ptr<std::set<int>> interface_classes,
59 int interface_id);
60 ~CheckParam();
61
25 const uint16_t vendor_id; 62 const uint16_t vendor_id;
26 const uint16_t product_id; 63 const uint16_t product_id;
64 const std::unique_ptr<std::set<int>> interface_classes;
27 const int interface_id; 65 const int interface_id;
66 const bool interface_class_allowed;
67
68 private:
69 DISALLOW_COPY_AND_ASSIGN(CheckParam);
28 }; 70 };
29 71
30 explicit UsbDevicePermission(const APIPermissionInfo* info); 72 explicit UsbDevicePermission(const APIPermissionInfo* info);
31 ~UsbDevicePermission() override; 73 ~UsbDevicePermission() override;
32 74
33 // SetDisjunctionPermission overrides. 75 // SetDisjunctionPermission overrides.
34 bool FromValue(const base::Value* value, 76 bool FromValue(const base::Value* value,
35 std::string* error, 77 std::string* error,
36 std::vector<std::string>* unhandled_permissions) override; 78 std::vector<std::string>* unhandled_permissions) override;
37 79
38 // APIPermission overrides 80 // APIPermission overrides
39 PermissionIDSet GetPermissions() const override; 81 PermissionIDSet GetPermissions() const override;
40 }; 82 };
41 83
42 } // namespace extensions 84 } // namespace extensions
43 85
44 #endif // EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_H_ 86 #endif // EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_H_
OLDNEW
« no previous file with comments | « extensions/common/features/behavior_feature.cc ('k') | extensions/common/permissions/usb_device_permission.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698