Index: device/hid/hid_service_win.cc |
diff --git a/device/hid/hid_service_win.cc b/device/hid/hid_service_win.cc |
index 09ad89da2d64c97123f564936d4afca86342ab51..3e0bb15ab67f68da8d4c7e42a311c5df8d30d941 100644 |
--- a/device/hid/hid_service_win.cc |
+++ b/device/hid/hid_service_win.cc |
@@ -6,9 +6,13 @@ |
#include <cstdlib> |
+#include "base/bind.h" |
#include "base/files/file.h" |
+#include "base/location.h" |
+#include "base/single_thread_task_runner.h" |
#include "base/stl_util.h" |
#include "base/strings/sys_string_conversions.h" |
+#include "base/thread_task_runner_handle.h" |
#include "base/threading/thread_restrictions.h" |
#include "device/hid/hid_connection_win.h" |
#include "device/hid/hid_device_info.h" |
@@ -37,6 +41,8 @@ const char kHIDClass[] = "HIDClass"; |
HidServiceWin::HidServiceWin() { |
base::ThreadRestrictions::AssertIOAllowed(); |
+ task_runner_ = base::ThreadTaskRunnerHandle::Get(); |
+ DCHECK(task_runner_.get()); |
Enumerate(); |
} |
@@ -304,17 +310,22 @@ void HidServiceWin::GetDevices(std::vector<HidDeviceInfo>* devices) { |
HidService::GetDevices(devices); |
} |
-scoped_refptr<HidConnection> HidServiceWin::Connect( |
- const HidDeviceId& device_id) { |
- HidDeviceInfo device_info; |
- if (!GetDeviceInfo(device_id, &device_info)) |
- return NULL; |
+void HidServiceWin::Connect(const HidDeviceId& device_id, |
+ const ConnectCallback& callback) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ const auto& map_entry = devices().find(device_id); |
+ if (map_entry == devices().end()) { |
+ task_runner_->PostTask(FROM_HERE, base::Bind(callback, nullptr)); |
+ return; |
+ } |
+ const HidDeviceInfo& device_info = map_entry->second; |
+ |
scoped_refptr<HidConnectionWin> connection(new HidConnectionWin(device_info)); |
if (!connection->available()) { |
- PLOG(ERROR) << "Failed to open device."; |
- return NULL; |
+ PLOG(ERROR) << "Failed to open device"; |
+ connection = nullptr; |
} |
- return connection; |
+ task_runner_->PostTask(FROM_HERE, base::Bind(callback, connection)); |
} |
} // namespace device |