OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "device/hid/hid_service.h" | 5 #include "device/hid/hid_service.h" |
6 | 6 |
7 #include "base/at_exit.h" | 7 #include "base/at_exit.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
11 #include "base/stl_util.h" | 11 #include "base/stl_util.h" |
| 12 #include "components/device_event_log/device_event_log.h" |
12 | 13 |
13 #if defined(OS_LINUX) && defined(USE_UDEV) | 14 #if defined(OS_LINUX) && defined(USE_UDEV) |
14 #include "device/hid/hid_service_linux.h" | 15 #include "device/hid/hid_service_linux.h" |
15 #elif defined(OS_MACOSX) | 16 #elif defined(OS_MACOSX) |
16 #include "device/hid/hid_service_mac.h" | 17 #include "device/hid/hid_service_mac.h" |
17 #else | 18 #else |
18 #include "device/hid/hid_service_win.h" | 19 #include "device/hid/hid_service_win.h" |
19 #endif | 20 #endif |
20 | 21 |
21 namespace device { | 22 namespace device { |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 | 97 |
97 HidService::~HidService() { | 98 HidService::~HidService() { |
98 DCHECK(thread_checker_.CalledOnValidThread()); | 99 DCHECK(thread_checker_.CalledOnValidThread()); |
99 } | 100 } |
100 | 101 |
101 void HidService::AddDevice(scoped_refptr<HidDeviceInfo> device_info) { | 102 void HidService::AddDevice(scoped_refptr<HidDeviceInfo> device_info) { |
102 DCHECK(thread_checker_.CalledOnValidThread()); | 103 DCHECK(thread_checker_.CalledOnValidThread()); |
103 if (!ContainsKey(devices_, device_info->device_id())) { | 104 if (!ContainsKey(devices_, device_info->device_id())) { |
104 devices_[device_info->device_id()] = device_info; | 105 devices_[device_info->device_id()] = device_info; |
105 | 106 |
| 107 HID_LOG(USER) << "HID device " |
| 108 << (enumeration_ready_ ? "added" : "detected") |
| 109 << ": vendorId = " << device_info->vendor_id() |
| 110 << ", productId = " << device_info->product_id() |
| 111 << ", deviceId = '" << device_info->device_id() << "'"; |
| 112 |
106 if (enumeration_ready_) { | 113 if (enumeration_ready_) { |
107 FOR_EACH_OBSERVER(Observer, observer_list_, OnDeviceAdded(device_info)); | 114 FOR_EACH_OBSERVER(Observer, observer_list_, OnDeviceAdded(device_info)); |
108 } | 115 } |
109 } | 116 } |
110 } | 117 } |
111 | 118 |
112 void HidService::RemoveDevice(const HidDeviceId& device_id) { | 119 void HidService::RemoveDevice(const HidDeviceId& device_id) { |
113 DCHECK(thread_checker_.CalledOnValidThread()); | 120 DCHECK(thread_checker_.CalledOnValidThread()); |
114 DeviceMap::iterator it = devices_.find(device_id); | 121 DeviceMap::iterator it = devices_.find(device_id); |
115 if (it != devices_.end()) { | 122 if (it != devices_.end()) { |
| 123 HID_LOG(USER) << "HID device removed: deviceId = '" << device_id << "'"; |
| 124 |
116 if (enumeration_ready_) { | 125 if (enumeration_ready_) { |
117 FOR_EACH_OBSERVER(Observer, observer_list_, OnDeviceRemoved(it->second)); | 126 FOR_EACH_OBSERVER(Observer, observer_list_, OnDeviceRemoved(it->second)); |
118 } | 127 } |
119 devices_.erase(it); | 128 devices_.erase(it); |
120 } | 129 } |
121 } | 130 } |
122 | 131 |
123 void HidService::FirstEnumerationComplete() { | 132 void HidService::FirstEnumerationComplete() { |
124 enumeration_ready_ = true; | 133 enumeration_ready_ = true; |
125 | 134 |
126 if (!pending_enumerations_.empty()) { | 135 if (!pending_enumerations_.empty()) { |
127 std::vector<scoped_refptr<HidDeviceInfo>> devices; | 136 std::vector<scoped_refptr<HidDeviceInfo>> devices; |
128 for (const auto& map_entry : devices_) { | 137 for (const auto& map_entry : devices_) { |
129 devices.push_back(map_entry.second); | 138 devices.push_back(map_entry.second); |
130 } | 139 } |
131 | 140 |
132 for (const GetDevicesCallback& callback : pending_enumerations_) { | 141 for (const GetDevicesCallback& callback : pending_enumerations_) { |
133 callback.Run(devices); | 142 callback.Run(devices); |
134 } | 143 } |
135 pending_enumerations_.clear(); | 144 pending_enumerations_.clear(); |
136 } | 145 } |
137 } | 146 } |
138 | 147 |
139 } // namespace device | 148 } // namespace device |
OLD | NEW |