Index: device/usb/usb_service_win.h |
diff --git a/device/usb/usb_service_win.h b/device/usb/usb_service_win.h |
index a6feb81a3e02d4e885cbb4cf48c073423a2ce95d..a91557786ecfc19c9f3d35d57036ea3ab0ca37be 100644 |
--- a/device/usb/usb_service_win.h |
+++ b/device/usb/usb_service_win.h |
@@ -4,17 +4,63 @@ |
#include "device/usb/usb_service.h" |
+#include <list> |
+#include <unordered_map> |
+ |
#include "base/macros.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/scoped_observer.h" |
+#include "device/base/device_monitor_win.h" |
+#include "device/usb/usb_device_win.h" |
+ |
+namespace base { |
+class SequencedTaskRunner; |
+} |
namespace device { |
-class UsbServiceWin : public UsbService { |
+class UsbServiceWin : public DeviceMonitorWin::Observer, public UsbService { |
public: |
explicit UsbServiceWin( |
scoped_refptr<base::SequencedTaskRunner> blocking_task_runner); |
~UsbServiceWin() override; |
private: |
+ class BlockingThreadHelper; |
+ |
+ // device::UsbService implementation |
+ void GetDevices(const GetDevicesCallback& callback) override; |
+ |
+ // device::DeviceMonitorWin::Observer implementation |
+ void OnDeviceAdded(const GUID& class_guid, |
+ const std::string& device_path) override; |
+ void OnDeviceRemoved(const GUID& class_guid, |
+ const std::string& device_path) override; |
+ |
+ // Methods called by BlockingThreadHelper |
+ void HelperStarted(); |
+ void CreateDeviceObject(const std::string& device_path, |
+ const std::string& hub_path, |
+ int port_number); |
+ |
+ void DeviceReady(scoped_refptr<UsbDeviceWin> device, bool success); |
+ |
+ bool enumeration_ready() { |
+ return helper_started_ && first_enumeration_countdown_ == 0; |
+ } |
+ |
+ // Enumeration callbacks are queued until an enumeration completes. |
+ bool helper_started_ = false; |
+ uint32_t first_enumeration_countdown_ = 0; |
+ std::list<GetDevicesCallback> enumeration_callbacks_; |
+ |
+ BlockingThreadHelper* helper_; |
+ std::unordered_map<std::string, scoped_refptr<UsbDeviceWin>> devices_by_path_; |
+ |
+ ScopedObserver<DeviceMonitorWin, DeviceMonitorWin::Observer> device_observer_; |
+ |
+ base::WeakPtrFactory<UsbServiceWin> weak_factory_; |
+ |
DISALLOW_COPY_AND_ASSIGN(UsbServiceWin); |
}; |