summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorreillyg <reillyg@chromium.org>2016-02-04 14:45:36 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-04 22:46:40 +0000
commit6bc4255ecd25658b430cec1f6191e0044c5e6c7f (patch)
treec49c64afc96020ce05e698d317e254f9bf50aff4 /chrome
parent51b446ee6bfbf2d14c9caec773a9d6b1227785ad (diff)
downloadchromium_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.cc9
-rw-r--r--chrome/browser/devtools/device/usb/android_usb_device.cc9
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,