diff options
author | reillyg <reillyg@chromium.org> | 2016-02-04 14:45:36 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-04 22:46:40 +0000 |
commit | 6bc4255ecd25658b430cec1f6191e0044c5e6c7f (patch) | |
tree | c49c64afc96020ce05e698d317e254f9bf50aff4 /chrome | |
parent | 51b446ee6bfbf2d14c9caec773a9d6b1227785ad (diff) | |
download | chromium_src-6bc4255ecd25658b430cec1f6191e0044c5e6c7f.zip chromium_src-6bc4255ecd25658b430cec1f6191e0044c5e6c7f.tar.gz chromium_src-6bc4255ecd25658b430cec1f6191e0044c5e6c7f.tar.bz2 |
Make UsbDeviceHandle::ReleaseInterface asynchronous.
This patch adds a callback to UsbDeviceHandle::ReleaseInterface that is
called when the interface has been released. Previously this result was
returned synchronously while the actual release operation happened in
the background.
In the process I've fixed an issue where libusb_release_interface could
have been called from the UI thread if there were no pending transfers
to delay it.
BUG=None
Review URL: https://codereview.chromium.org/1664023002
Cr-Commit-Position: refs/heads/master@{#373641}
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/devtools/device/usb/android_usb_browsertest.cc | 9 | ||||
-rw-r--r-- | chrome/browser/devtools/device/usb/android_usb_device.cc | 9 |
2 files changed, 13 insertions, 5 deletions
diff --git a/chrome/browser/devtools/device/usb/android_usb_browsertest.cc b/chrome/browser/devtools/device/usb/android_usb_browsertest.cc index caa9950..2fac360 100644 --- a/chrome/browser/devtools/device/usb/android_usb_browsertest.cc +++ b/chrome/browser/devtools/device/usb/android_usb_browsertest.cc @@ -153,13 +153,16 @@ class MockUsbDeviceHandle : public UsbDeviceHandle { FROM_HERE, base::Bind(callback, success)); } - bool ReleaseInterface(int interface_number) override { + void ReleaseInterface(int interface_number, + const ResultCallback& callback) override { + bool success = false; if (device_->claimed_interfaces_.find(interface_number) == device_->claimed_interfaces_.end()) - return false; + success = false; device_->claimed_interfaces_.erase(interface_number); - return true; + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::Bind(callback, success)); } void SetInterfaceAlternateSetting(int interface_number, diff --git a/chrome/browser/devtools/device/usb/android_usb_device.cc b/chrome/browser/devtools/device/usb/android_usb_device.cc index fc8a274..8e655a6 100644 --- a/chrome/browser/devtools/device/usb/android_usb_device.cc +++ b/chrome/browser/devtools/device/usb/android_usb_device.cc @@ -128,10 +128,15 @@ void DumpMessage(bool outgoing, const char* data, size_t length) { #endif // 0 } +void CloseDevice(scoped_refptr<UsbDeviceHandle> usb_device, + bool release_successful) { + usb_device->Close(); +} + void ReleaseInterface(scoped_refptr<UsbDeviceHandle> usb_device, int interface_id) { - usb_device->ReleaseInterface(interface_id); - usb_device->Close(); + usb_device->ReleaseInterface(interface_id, + base::Bind(&CloseDevice, usb_device)); } void RespondOnCallerThread(const AndroidUsbDevicesCallback& callback, |