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 #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* extesnion, | |
|
meacer
2016/10/27 00:14:35
extesnion -> 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_ |
| OLD | NEW |