Index: device/hid/hid_service_win.h |
diff --git a/device/hid/hid_service_win.h b/device/hid/hid_service_win.h |
index 902d431fe2cb345ccdd4b0e271f0718c42faa305..1704ac75c14ef7cc282a86d08d90ce9f0fc2a2a1 100644 |
--- a/device/hid/hid_service_win.h |
+++ b/device/hid/hid_service_win.h |
@@ -14,6 +14,7 @@ extern "C" { |
} |
#include "base/memory/scoped_ptr.h" |
+#include "base/memory/weak_ptr.h" |
#include "base/scoped_observer.h" |
#include "base/win/scoped_handle.h" |
#include "device/core/device_monitor_win.h" |
@@ -30,7 +31,7 @@ namespace device { |
class HidServiceWin : public HidService, public DeviceMonitorWin::Observer { |
public: |
- HidServiceWin(); |
+ HidServiceWin(scoped_refptr<base::SingleThreadTaskRunner> file_task_runner); |
virtual void Connect(const HidDeviceId& device_id, |
const ConnectCallback& callback) override; |
@@ -38,7 +39,9 @@ class HidServiceWin : public HidService, public DeviceMonitorWin::Observer { |
private: |
virtual ~HidServiceWin(); |
- void DoInitialEnumeration(); |
+ static void EnumerateOnFileThread( |
+ base::WeakPtr<HidServiceWin> service, |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
static void CollectInfoFromButtonCaps(PHIDP_PREPARSED_DATA preparsed_data, |
HIDP_REPORT_TYPE report_type, |
USHORT button_caps_length, |
@@ -47,16 +50,22 @@ class HidServiceWin : public HidService, public DeviceMonitorWin::Observer { |
HIDP_REPORT_TYPE report_type, |
USHORT value_caps_length, |
HidCollectionInfo* collection_info); |
+ static void AddDeviceOnFileThread( |
+ base::WeakPtr<HidServiceWin> service, |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
+ const std::string& device_path); |
// DeviceMonitorWin::Observer implementation: |
void OnDeviceAdded(const std::string& device_path) override; |
void OnDeviceRemoved(const std::string& device_path) override; |
// Tries to open the device read-write and falls back to read-only. |
- base::win::ScopedHandle OpenDevice(const std::string& device_path); |
+ static base::win::ScopedHandle OpenDevice(const std::string& device_path); |
scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
+ scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; |
ScopedObserver<DeviceMonitorWin, DeviceMonitorWin::Observer> device_observer_; |
+ base::WeakPtrFactory<HidServiceWin> weak_factory_; |
DISALLOW_COPY_AND_ASSIGN(HidServiceWin); |
}; |