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 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_HID_HID_DEVICE_MANAGER_H_ 6 #define CHROME_BROWSER_EXTENSIONS_API_HID_HID_DEVICE_MANAGER_H_ 7 8 #include <stdint.h> 9 10 #include <map> 11 12 #include "base/basictypes.h" 13 #include "base/memory/scoped_ptr.h" 14 #include "base/threading/thread_checker.h" 15 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/common/extensions/api/hid.h" 17 #include "device/hid/hid_device_info.h" 18 #include "extensions/browser/browser_context_keyed_api_factory.h" 19 20 namespace extensions { 21 22 class HidDeviceManager : public BrowserContextKeyedAPI { 23 public: 24 explicit HidDeviceManager(content::BrowserContext* context); 25 virtual ~HidDeviceManager(); 26 27 // BrowserContextKeyedAPI implementation. 28 static BrowserContextKeyedAPIFactory<HidDeviceManager>* GetFactoryInstance(); 29 30 // Convenience method to get the HidDeviceManager for a profile. 31 static HidDeviceManager* Get(content::BrowserContext* context) { 32 return BrowserContextKeyedAPIFactory<HidDeviceManager>::Get(context); 33 } 34 35 scoped_ptr<base::ListValue> GetApiDevices(uint16_t vendor_id, 36 uint16_t product_id); 37 38 bool GetDeviceInfo(int resource_id, device::HidDeviceInfo* device_info); 39 40 private: 41 friend class BrowserContextKeyedAPIFactory<HidDeviceManager>; 42 43 static const char* service_name() { return "HidDeviceManager"; } 44 45 void UpdateDevices(); 46 47 // Determines if a given device interface should be accessible to API 48 // consumers. In order for a device interface to be accessible, ALL of its 49 // specified usages must be accessible. 50 static bool IsDeviceAccessible(const device::HidDeviceInfo& device_info); 51 52 // Determines if a given usage is available to API consumers. This is used to 53 // blacklist usages which could be security or privacy concerns. 54 static bool IsUsageAccessible(const device::HidUsageAndPage& usage_and_page); 55 56 base::ThreadChecker thread_checker_; 57 58 int next_resource_id_; 59 60 typedef std::map<int, device::HidDeviceId> ResourceIdToDeviceIdMap; 61 typedef std::map<device::HidDeviceId, int> DeviceIdToResourceIdMap; 62 63 ResourceIdToDeviceIdMap device_ids_; 64 DeviceIdToResourceIdMap resource_ids_; 65 66 DISALLOW_COPY_AND_ASSIGN(HidDeviceManager); 67 }; 68 69 } // namespace extensions 70 71 #endif // CHROME_BROWSER_EXTENSIONS_API_HID_HID_DEVICE_MANAGER_H_ 72