Chromium Code Reviews| Index: extensions/common/permissions/usb_device_permission.h |
| diff --git a/extensions/common/permissions/usb_device_permission.h b/extensions/common/permissions/usb_device_permission.h |
| index 2658011861d09082a6bd3d98cce80dfc55655aea..380cd96e86d556112c4e884a9836700f17ad5a36 100644 |
| --- a/extensions/common/permissions/usb_device_permission.h |
| +++ b/extensions/common/permissions/usb_device_permission.h |
| @@ -7,24 +7,66 @@ |
| #include <stdint.h> |
| +#include <memory> |
| +#include <set> |
| + |
| #include "extensions/common/permissions/api_permission.h" |
| #include "extensions/common/permissions/set_disjunction_permission.h" |
| #include "extensions/common/permissions/usb_device_permission_data.h" |
| namespace extensions { |
| +class Extension; |
| + |
| class UsbDevicePermission |
| : public SetDisjunctionPermission<UsbDevicePermissionData, |
| UsbDevicePermission> { |
| public: |
| struct CheckParam : public APIPermission::CheckParam { |
| - CheckParam(uint16_t vendor_id, uint16_t product_id, int interface_id) |
| - : vendor_id(vendor_id), |
| - product_id(product_id), |
| - interface_id(interface_id) {} |
| + static std::unique_ptr<CheckParam> ForUsbDevice( |
| + const Extension* extension, |
| + const device::UsbDevice* device); |
| + // Creates check param that only checks vendor, product and interface ID |
| + // permission properties. It will accept all interfaceClass properties. For |
| + // example, created param would always accept {"intefaceClass": 3} |
| + // permission, and it would accept {"vendorId": 2, "interfaceClass": 4} iff |
| + // |vendor_id| is 2. |
| + // Created check param failing means there are no permissions allowing |
| + // access to the USB device. On the other hand, created check param passing |
| + // does not necessarily mean there is a permission allowing access to the |
| + // USB device - one should recheck the permission when complete USB device |
| + // info is known. |
| + // This is useful when trying to discard devices that do not match any |
| + // usbDevice permission when complete USB device info is not known, without |
| + // having to fetch available USB devices. |
| + static std::unique_ptr<CheckParam> ForDeviceWithAnyInterfaceClass( |
| + const Extension* extension, |
| + uint16_t vendor_id, |
| + uint16_t product_id, |
| + int interface_id); |
| + static std::unique_ptr<CheckParam> ForUsbDeviceAndInterface( |
| + const Extension* extension, |
| + const device::UsbDevice* device, |
| + int interface_id); |
| + static std::unique_ptr<CheckParam> ForHidDevice(const Extension* extension, |
| + uint16_t vendor_id, |
| + uint16_t product_id); |
| + |
| + CheckParam(const Extension* extesnion, |
|
meacer
2016/10/27 00:14:35
extesnion -> extension
|
| + uint16_t vendor_id, |
| + uint16_t product_id, |
| + std::unique_ptr<std::set<int>> interface_classes, |
| + int interface_id); |
| + ~CheckParam(); |
| + |
| const uint16_t vendor_id; |
| const uint16_t product_id; |
| + const std::unique_ptr<std::set<int>> interface_classes; |
| const int interface_id; |
| + const bool interface_class_allowed; |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(CheckParam); |
| }; |
| explicit UsbDevicePermission(const APIPermissionInfo* info); |