Index: device/usb/usb_service_win.cc |
diff --git a/device/usb/usb_service_win.cc b/device/usb/usb_service_win.cc |
index 8cc9c0c9a2e16938b5af892a012e172f4d4493b1..848766ebdc11de56ebdff7fdccabf459cc49ac04 100644 |
--- a/device/usb/usb_service_win.cc |
+++ b/device/usb/usb_service_win.cc |
@@ -170,12 +170,12 @@ bool GetHubDevicePath(const std::string& instance_id, |
} // namespace |
-class UsbServiceWin::BlockingThreadHelper { |
+class UsbServiceWin::BlockingTaskHelper { |
public: |
- explicit BlockingThreadHelper(base::WeakPtr<UsbServiceWin> service) |
+ explicit BlockingTaskHelper(base::WeakPtr<UsbServiceWin> service) |
: service_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
service_(service) {} |
- ~BlockingThreadHelper() {} |
+ ~BlockingTaskHelper() {} |
void EnumerateDevices() { |
ScopedDevInfo dev_info( |
@@ -276,9 +276,8 @@ class UsbServiceWin::BlockingThreadHelper { |
base::WeakPtr<UsbServiceWin> service_; |
}; |
-UsbServiceWin::UsbServiceWin( |
- scoped_refptr<base::SequencedTaskRunner> blocking_task_runner) |
- : UsbService(blocking_task_runner), |
+UsbServiceWin::UsbServiceWin() |
+ : UsbService(CreateBlockingTaskRunner()), |
device_observer_(this), |
weak_factory_(this) { |
DeviceMonitorWin* device_monitor = |
@@ -286,13 +285,20 @@ UsbServiceWin::UsbServiceWin( |
if (device_monitor) |
device_observer_.Add(device_monitor); |
- helper_ = new BlockingThreadHelper(weak_factory_.GetWeakPtr()); |
- blocking_task_runner->PostTask( |
- FROM_HERE, base::Bind(&BlockingThreadHelper::EnumerateDevices, |
- base::Unretained(helper_))); |
+ helper_ = base::MakeUnique<BlockingTaskHelper>(weak_factory_.GetWeakPtr()); |
+ blocking_task_runner()->PostTask( |
+ FROM_HERE, base::Bind(&BlockingTaskHelper::EnumerateDevices, |
+ base::Unretained(helper_.get()))); |
+} |
+ |
+UsbServiceWin::~UsbServiceWin() { |
+ DCHECK(!helper_); |
} |
-UsbServiceWin::~UsbServiceWin() {} |
+void UsbServiceWin::Shutdown() { |
+ blocking_task_runner()->DeleteSoon(FROM_HERE, helper_.release()); |
+ UsbService::Shutdown(); |
+} |
void UsbServiceWin::GetDevices(const GetDevicesCallback& callback) { |
DCHECK(CalledOnValidThread()); |
@@ -305,8 +311,8 @@ void UsbServiceWin::GetDevices(const GetDevicesCallback& callback) { |
void UsbServiceWin::OnDeviceAdded(const GUID& class_guid, |
const std::string& device_path) { |
blocking_task_runner()->PostTask( |
- FROM_HERE, base::Bind(&BlockingThreadHelper::EnumerateDevicePath, |
- base::Unretained(helper_), device_path)); |
+ FROM_HERE, base::Bind(&BlockingTaskHelper::EnumerateDevicePath, |
+ base::Unretained(helper_.get()), device_path)); |
} |
void UsbServiceWin::OnDeviceRemoved(const GUID& class_guid, |