1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#ifndef EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_DATA_H_ 5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_DATA_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "extensions/common/permissions/api_permission.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Value; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace base 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A pattern that can be used to match a USB device permission. 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Should be of the format: vendorId:productId, where both vendorId and 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// productId are decimal strings representing uint16 values. 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class UsbDevicePermissionData { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) enum SpecialInterfaces { 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // A special interface id for stating permissions for an entire USB device, 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // no specific interface. This value must match value of Rule::ANY_INTERFACE 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // from ChromeOS permission_broker project. 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ANY_INTERFACE = -1, 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // A special interface id for |Check| to indicate that interface field is 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // not to be checked. Not used in manifest file. 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) UNSPECIFIED_INTERFACE = -2 35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UsbDevicePermissionData(); 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) UsbDevicePermissionData(uint16 vendor_id, 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) uint16 product_id, 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int interface_id); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check if |param| (which must be a UsbDevicePermissionData::CheckParam) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // matches the vendor and product IDs associated with |this|. 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool Check(const APIPermission::CheckParam* param) const; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Convert |this| into a base::Value. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value> ToValue() const; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Populate |this| from a base::Value. 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool FromValue(const base::Value* value); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator<(const UsbDevicePermissionData& rhs) const; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator==(const UsbDevicePermissionData& rhs) const; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const uint16& vendor_id() const { return vendor_id_; } 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const uint16& product_id() const { return product_id_; } 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These accessors are provided for IPC_STRUCT_TRAITS_MEMBER. Please 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // think twice before using them for anything else. 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint16& vendor_id() { return vendor_id_; } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint16& product_id() { return product_id_; } 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint16 vendor_id_; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint16 product_id_; 66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int interface_id_; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif // EXTENSIONS_COMMON_PERMISSIONS_USB_DEVICE_PERMISSION_DATA_H_ 72