| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| #ifndef EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_DATA_H_ |
| #define EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_DATA_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "extensions/common/permissions/api_permission.h" |
| |
| namespace base { |
| |
| class Value; |
| |
| } // namespace base |
| |
| namespace extensions { |
| |
| // A pattern that can be used to match a USB device permission. |
| // Should be of the format: vendorId:productId, where both vendorId and |
| // productId are decimal strings representing uint16_t values. |
| class UsbDevicePermissionData { |
| public: |
| enum SpecialValues { |
| // A special interface id for stating permissions for an entire USB device, |
| // no specific interface. This value must match value of Rule::ANY_INTERFACE |
| // from ChromeOS permission_broker project. |
| SPECIAL_VALUE_ANY = -1, |
| |
| // A special interface id for |Check| to indicate that interface field is |
| // not to be checked. Not used in manifest file. |
| SPECIAL_VALUE_UNSPECIFIED = -2 |
| }; |
| |
| UsbDevicePermissionData(); |
| UsbDevicePermissionData(int vendor_id, |
| int product_id, |
| int interface_id, |
| int interface_class); |
| |
| // Check if |param| (which must be a UsbDevicePermissionData::CheckParam) |
| // matches the vendor and product IDs associated with |this|. |
| bool Check(const APIPermission::CheckParam* param) const; |
| |
| // Convert |this| into a base::Value. |
| std::unique_ptr<base::Value> ToValue() const; |
| |
| // Populate |this| from a base::Value. |
| bool FromValue(const base::Value* value); |
| |
| bool operator<(const UsbDevicePermissionData& rhs) const; |
| bool operator==(const UsbDevicePermissionData& rhs) const; |
| |
| const int& vendor_id() const { return vendor_id_; } |
| const int& product_id() const { return product_id_; } |
| const int& interface_class() const { return interface_class_; } |
| |
| // These accessors are provided for IPC_STRUCT_TRAITS_MEMBER. Please |
| // think twice before using them for anything else. |
| int& vendor_id() { return vendor_id_; } |
| int& product_id() { return product_id_; } |
| int& interface_class() { return interface_class_; } |
| |
| private: |
| int vendor_id_{SPECIAL_VALUE_ANY}; |
| int product_id_{SPECIAL_VALUE_ANY}; |
| // Not useful anymore. Kept around not to trigger permission change warnings |
| // for existing apps. |
| int interface_id_{SPECIAL_VALUE_ANY}; |
| int interface_class_{SPECIAL_VALUE_ANY}; |
| }; |
| |
| } // namespace extensions |
| |
| #endif // EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_DATA_H_ |