| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/devtools/device/usb/android_usb_device.h" | 5 #include "chrome/browser/devtools/device/usb/android_usb_device.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/barrier_closure.h" | 9 #include "base/barrier_closure.h" |
| 10 #include "base/base64.h" | 10 #include "base/base64.h" |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 | 173 |
| 174 // Return all claimed devices. | 174 // Return all claimed devices. |
| 175 AndroidUsbDevices result(g_devices.Get().begin(), g_devices.Get().end()); | 175 AndroidUsbDevices result(g_devices.Get().begin(), g_devices.Get().end()); |
| 176 callback.Run(result); | 176 callback.Run(result); |
| 177 } | 177 } |
| 178 | 178 |
| 179 static void RespondOnFileThread( | 179 static void RespondOnFileThread( |
| 180 const AndroidUsbDevicesCallback& callback, | 180 const AndroidUsbDevicesCallback& callback, |
| 181 AndroidUsbDevices* devices, | 181 AndroidUsbDevices* devices, |
| 182 scoped_refptr<base::MessageLoopProxy> caller_message_loop_proxy) { | 182 scoped_refptr<base::MessageLoopProxy> caller_message_loop_proxy) { |
| 183 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 183 DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| 184 caller_message_loop_proxy->PostTask( | 184 caller_message_loop_proxy->PostTask( |
| 185 FROM_HERE, | 185 FROM_HERE, |
| 186 base::Bind(&RespondOnCallerThread, callback, devices)); | 186 base::Bind(&RespondOnCallerThread, callback, devices)); |
| 187 } | 187 } |
| 188 | 188 |
| 189 static void OpenAndroidDeviceOnFileThread( | 189 static void OpenAndroidDeviceOnFileThread( |
| 190 AndroidUsbDevices* devices, | 190 AndroidUsbDevices* devices, |
| 191 crypto::RSAPrivateKey* rsa_key, | 191 crypto::RSAPrivateKey* rsa_key, |
| 192 const base::Closure& barrier, | 192 const base::Closure& barrier, |
| 193 scoped_refptr<UsbDevice> device, | 193 scoped_refptr<UsbDevice> device, |
| 194 int interface_id, | 194 int interface_id, |
| 195 bool success) { | 195 bool success) { |
| 196 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 196 DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| 197 if (success) { | 197 if (success) { |
| 198 base::string16 serial; | 198 base::string16 serial; |
| 199 if (device->GetSerialNumber(&serial) && !serial.empty()) { | 199 if (device->GetSerialNumber(&serial) && !serial.empty()) { |
| 200 const UsbConfigDescriptor* config = device->GetConfiguration(); | 200 const UsbConfigDescriptor* config = device->GetConfiguration(); |
| 201 if (config) { | 201 if (config) { |
| 202 scoped_refptr<UsbDeviceHandle> usb_handle = device->Open(); | 202 scoped_refptr<UsbDeviceHandle> usb_handle = device->Open(); |
| 203 if (usb_handle.get()) { | 203 if (usb_handle.get()) { |
| 204 scoped_refptr<AndroidUsbDevice> android_device = ClaimInterface( | 204 scoped_refptr<AndroidUsbDevice> android_device = ClaimInterface( |
| 205 rsa_key, usb_handle, serial, config->interfaces[interface_id]); | 205 rsa_key, usb_handle, serial, config->interfaces[interface_id]); |
| 206 if (android_device.get()) | 206 if (android_device.get()) |
| 207 devices->push_back(android_device); | 207 devices->push_back(android_device); |
| 208 else | 208 else |
| 209 usb_handle->Close(); | 209 usb_handle->Close(); |
| 210 } | 210 } |
| 211 } | 211 } |
| 212 } | 212 } |
| 213 } | 213 } |
| 214 barrier.Run(); | 214 barrier.Run(); |
| 215 } | 215 } |
| 216 | 216 |
| 217 static int CountOnFileThread() { | 217 static int CountOnFileThread() { |
| 218 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 218 DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| 219 UsbService* service = device::DeviceClient::Get()->GetUsbService(); | 219 UsbService* service = device::DeviceClient::Get()->GetUsbService(); |
| 220 UsbDevices usb_devices; | 220 UsbDevices usb_devices; |
| 221 if (service != NULL) | 221 if (service != NULL) |
| 222 service->GetDevices(&usb_devices); | 222 service->GetDevices(&usb_devices); |
| 223 int device_count = 0; | 223 int device_count = 0; |
| 224 for (const scoped_refptr<UsbDevice>& device : usb_devices) { | 224 for (const scoped_refptr<UsbDevice>& device : usb_devices) { |
| 225 const UsbConfigDescriptor* config = device->GetConfiguration(); | 225 const UsbConfigDescriptor* config = device->GetConfiguration(); |
| 226 if (config) { | 226 if (config) { |
| 227 for (const UsbInterfaceDescriptor& iface : config->interfaces) { | 227 for (const UsbInterfaceDescriptor& iface : config->interfaces) { |
| 228 if (IsAndroidInterface(iface)) { | 228 if (IsAndroidInterface(iface)) { |
| 229 ++device_count; | 229 ++device_count; |
| 230 } | 230 } |
| 231 } | 231 } |
| 232 } | 232 } |
| 233 } | 233 } |
| 234 return device_count; | 234 return device_count; |
| 235 } | 235 } |
| 236 | 236 |
| 237 static void EnumerateOnFileThread( | 237 static void EnumerateOnFileThread( |
| 238 crypto::RSAPrivateKey* rsa_key, | 238 crypto::RSAPrivateKey* rsa_key, |
| 239 const AndroidUsbDevicesCallback& callback, | 239 const AndroidUsbDevicesCallback& callback, |
| 240 scoped_refptr<base::MessageLoopProxy> caller_message_loop_proxy) { | 240 scoped_refptr<base::MessageLoopProxy> caller_message_loop_proxy) { |
| 241 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 241 DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| 242 | 242 |
| 243 UsbService* service = device::DeviceClient::Get()->GetUsbService(); | 243 UsbService* service = device::DeviceClient::Get()->GetUsbService(); |
| 244 UsbDevices usb_devices; | 244 UsbDevices usb_devices; |
| 245 if (service != NULL) | 245 if (service != NULL) |
| 246 service->GetDevices(&usb_devices); | 246 service->GetDevices(&usb_devices); |
| 247 | 247 |
| 248 // Add new devices. | 248 // Add new devices. |
| 249 AndroidUsbDevices* devices = new AndroidUsbDevices(); | 249 AndroidUsbDevices* devices = new AndroidUsbDevices(); |
| 250 base::Closure barrier = base::BarrierClosure( | 250 base::Closure barrier = base::BarrierClosure( |
| 251 usb_devices.size(), base::Bind(&RespondOnFileThread, | 251 usb_devices.size(), base::Bind(&RespondOnFileThread, |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 605 | 605 |
| 606 void AndroidUsbDevice::TransferError(UsbTransferStatus status) { | 606 void AndroidUsbDevice::TransferError(UsbTransferStatus status) { |
| 607 DCHECK(message_loop_ == base::MessageLoop::current()); | 607 DCHECK(message_loop_ == base::MessageLoop::current()); |
| 608 | 608 |
| 609 message_loop_->PostTask(FROM_HERE, | 609 message_loop_->PostTask(FROM_HERE, |
| 610 base::Bind(&AndroidUsbDevice::Terminate, this)); | 610 base::Bind(&AndroidUsbDevice::Terminate, this)); |
| 611 } | 611 } |
| 612 | 612 |
| 613 void AndroidUsbDevice::TerminateIfReleased( | 613 void AndroidUsbDevice::TerminateIfReleased( |
| 614 scoped_refptr<UsbDeviceHandle> usb_handle) { | 614 scoped_refptr<UsbDeviceHandle> usb_handle) { |
| 615 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 615 DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| 616 if (usb_handle->GetDevice().get()) | 616 if (usb_handle->GetDevice().get()) |
| 617 return; | 617 return; |
| 618 message_loop_->PostTask(FROM_HERE, | 618 message_loop_->PostTask(FROM_HERE, |
| 619 base::Bind(&AndroidUsbDevice::Terminate, this)); | 619 base::Bind(&AndroidUsbDevice::Terminate, this)); |
| 620 } | 620 } |
| 621 | 621 |
| 622 void AndroidUsbDevice::Terminate() { | 622 void AndroidUsbDevice::Terminate() { |
| 623 DCHECK(message_loop_ == base::MessageLoop::current()); | 623 DCHECK(message_loop_ == base::MessageLoop::current()); |
| 624 | 624 |
| 625 std::vector<AndroidUsbDevice*>::iterator it = | 625 std::vector<AndroidUsbDevice*>::iterator it = |
| (...skipping 20 matching lines...) Expand all Loading... |
| 646 BrowserThread::PostTask( | 646 BrowserThread::PostTask( |
| 647 BrowserThread::FILE, FROM_HERE, | 647 BrowserThread::FILE, FROM_HERE, |
| 648 base::Bind(&ReleaseInterface, usb_handle, interface_id_)); | 648 base::Bind(&ReleaseInterface, usb_handle, interface_id_)); |
| 649 } | 649 } |
| 650 | 650 |
| 651 void AndroidUsbDevice::SocketDeleted(uint32 socket_id) { | 651 void AndroidUsbDevice::SocketDeleted(uint32 socket_id) { |
| 652 DCHECK(message_loop_ == base::MessageLoop::current()); | 652 DCHECK(message_loop_ == base::MessageLoop::current()); |
| 653 | 653 |
| 654 sockets_.erase(socket_id); | 654 sockets_.erase(socket_id); |
| 655 } | 655 } |
| OLD | NEW |