Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(932)

Side by Side Diff: chrome/browser/extensions/api/hid/hid_device_manager.cc

Issue 161823002: Clean up HID backend and API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.o
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/extensions/api/hid/hid_device_manager.h"
6
7 #include "base/lazy_instance.h"
8 #include "device/hid/hid_service.h"
9
10 using device::HidService;
11
12 namespace extensions {
13
14 static base::LazyInstance<ProfileKeyedAPIFactory<HidDeviceManager> > g_factory =
Mark Mentovai 2014/02/24 20:23:36 This is only used by GetFactoryInstance, you can m
Ken Rockot(use gerrit already) 2014/02/25 21:30:01 Done.
15 LAZY_INSTANCE_INITIALIZER;
16
17 HidDeviceManager::HidDeviceManager(Profile* profile) : next_resource_id_(0) {}
18
19 HidDeviceManager::~HidDeviceManager() {}
20
21 // static
22 ProfileKeyedAPIFactory<HidDeviceManager>*
23 HidDeviceManager::GetFactoryInstance() {
24 return &g_factory.Get();
25 }
26
27 scoped_ptr<base::ListValue> HidDeviceManager::GetApiDevices(
28 uint16_t vendor_id,
29 uint16_t product_id) {
30 UpdateDevices();
31
32 HidService* hid_service = HidService::GetInstance();
33 DCHECK(hid_service);
34 base::ListValue* api_devices = new base::ListValue();
35 for (ResourceIdToDeviceIdMap::const_iterator device_iter =
36 device_ids_.begin();
37 device_iter != device_ids_.end();
38 ++device_iter) {
39 int resource_id = device_iter->first;
40 device::HidDeviceId device_id = device_iter->second;
41 device::HidDeviceInfo device_info;
42 if (hid_service->GetDeviceInfo(device_id, &device_info)) {
43 if (device_info.vendor_id == vendor_id &&
44 device_info.product_id == product_id) {
45 api::hid::HidDeviceInfo api_device_info;
46 api_device_info.device_id = resource_id;
47 api_device_info.vendor_id = device_info.vendor_id;
48 api_device_info.product_id = device_info.product_id;
49 api_devices->Append(api_device_info.ToValue().release());
50 }
51 }
52 }
53 return scoped_ptr<base::ListValue>(api_devices);
54 }
55
56 bool HidDeviceManager::GetDeviceInfo(int resource_id,
57 device::HidDeviceInfo* device_info) {
58 UpdateDevices();
59 HidService* hid_service = HidService::GetInstance();
60 DCHECK(hid_service);
61
62 ResourceIdToDeviceIdMap::const_iterator device_iter =
63 device_ids_.find(resource_id);
64 if (device_iter == device_ids_.end())
65 return false;
66
67 return hid_service->GetDeviceInfo(device_iter->second, device_info);
68 }
69
70 void HidDeviceManager::UpdateDevices() {
71 thread_checker_.CalledOnValidThread();
72 HidService* hid_service = HidService::GetInstance();
73 DCHECK(hid_service);
74
75 std::vector<device::HidDeviceInfo> devices;
76 hid_service->GetDevices(&devices);
77
78 // Build an updated bidi mapping between resource ID and underlying device ID.
79 DeviceIdToResourceIdMap new_resource_ids;
80 ResourceIdToDeviceIdMap new_device_ids;
81 for (std::vector<device::HidDeviceInfo>::const_iterator iter =
82 devices.begin();
83 iter != devices.end();
84 ++iter) {
85 const device::HidDeviceInfo& device_info = *iter;
86 DeviceIdToResourceIdMap::iterator resource_iter =
87 resource_ids_.find(device_info.device_id);
88 int new_id = 0;
Mark Mentovai 2014/02/24 20:23:36 No need to initialize.
89 if (resource_iter != resource_ids_.end())
90 new_id = resource_iter->second;
91 else
92 new_id = next_resource_id_++;
Mark Mentovai 2014/02/24 20:23:36 Extreme paranoia, but before you hit this line, ma
Ken Rockot(use gerrit already) 2014/02/25 21:30:01 Done.
93 new_resource_ids[device_info.device_id] = new_id;
94 new_device_ids[new_id] = device_info.device_id;
95 }
96
97 device_ids_ = new_device_ids;
Mark Mentovai 2014/02/24 20:23:36 This is a copy followed by an immediate discard of
Ken Rockot(use gerrit already) 2014/02/25 21:30:01 Done.
98 resource_ids_ = new_resource_ids;
99 }
100
101 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698