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 3 // found in the LICENSE file. 4 #ifndef EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_DATA_H_ 5 #define EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_DATA_H_ 6 7 #include <string> 8 9 #include "base/basictypes.h" 10 #include "base/memory/scoped_ptr.h" 11 #include "extensions/common/permissions/api_permission.h" 12 13 namespace base { 14 15 class Value; 16 17 } // namespace base 18 19 namespace extensions { 20 21 // A pattern that can be used to match a USB device permission. 22 // Should be of the format: vendorId:productId, where both vendorId and 23 // productId are decimal strings representing uint16 values. 24 class UsbDevicePermissionData { 25 public: 26 enum SpecialInterfaces { 27 // A special interface id for stating permissions for an entire USB device, 28 // no specific interface. This value must match value of Rule::ANY_INTERFACE 29 // from ChromeOS permission_broker project. 30 ANY_INTERFACE = -1, 31 32 // A special interface id for |Check| to indicate that interface field is 33 // not to be checked. Not used in manifest file. 34 UNSPECIFIED_INTERFACE = -2 35 }; 36 37 UsbDevicePermissionData(); 38 UsbDevicePermissionData(uint16 vendor_id, 39 uint16 product_id, 40 int interface_id); 41 42 // Check if |param| (which must be a UsbDevicePermissionData::CheckParam) 43 // matches the vendor and product IDs associated with |this|. 44 bool Check(const APIPermission::CheckParam* param) const; 45 46 // Convert |this| into a base::Value. 47 scoped_ptr<base::Value> ToValue() const; 48 49 // Populate |this| from a base::Value. 50 bool FromValue(const base::Value* value); 51 52 bool operator<(const UsbDevicePermissionData& rhs) const; 53 bool operator==(const UsbDevicePermissionData& rhs) const; 54 vendor_id()55 const uint16& vendor_id() const { return vendor_id_; } product_id()56 const uint16& product_id() const { return product_id_; } 57 58 // These accessors are provided for IPC_STRUCT_TRAITS_MEMBER. Please 59 // think twice before using them for anything else. vendor_id()60 uint16& vendor_id() { return vendor_id_; } product_id()61 uint16& product_id() { return product_id_; } 62 63 private: 64 uint16 vendor_id_; 65 uint16 product_id_; 66 int interface_id_; 67 }; 68 69 } // namespace extensions 70 71 #endif // EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_DATA_H_ 72