| 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 "device/usb/usb_device_impl.h" | 5 #include "device/usb/usb_device_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 | 189 |
| 190 void UsbDeviceImpl::Open(const OpenCallback& callback) { | 190 void UsbDeviceImpl::Open(const OpenCallback& callback) { |
| 191 DCHECK(thread_checker_.CalledOnValidThread()); | 191 DCHECK(thread_checker_.CalledOnValidThread()); |
| 192 | 192 |
| 193 #if defined(OS_CHROMEOS) | 193 #if defined(OS_CHROMEOS) |
| 194 chromeos::PermissionBrokerClient* client = | 194 chromeos::PermissionBrokerClient* client = |
| 195 chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient(); | 195 chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient(); |
| 196 DCHECK(client) << "Could not get permission broker client."; | 196 DCHECK(client) << "Could not get permission broker client."; |
| 197 client->OpenPath( | 197 client->OpenPath( |
| 198 device_path_, | 198 device_path_, |
| 199 base::Bind(&UsbDeviceImpl::OnOpenRequestComplete, this, callback)); | 199 base::Bind(&UsbDeviceImpl::OnOpenRequestComplete, this, callback), |
| 200 base::Bind(&UsbDeviceImpl::OnOpenRequestError, this, callback)); |
| 200 #else | 201 #else |
| 201 blocking_task_runner_->PostTask( | 202 blocking_task_runner_->PostTask( |
| 202 FROM_HERE, | 203 FROM_HERE, |
| 203 base::Bind(&UsbDeviceImpl::OpenOnBlockingThread, this, callback)); | 204 base::Bind(&UsbDeviceImpl::OpenOnBlockingThread, this, callback)); |
| 204 #endif // defined(OS_CHROMEOS) | 205 #endif // defined(OS_CHROMEOS) |
| 205 } | 206 } |
| 206 | 207 |
| 207 void UsbDeviceImpl::Close(scoped_refptr<UsbDeviceHandle> handle) { | 208 void UsbDeviceImpl::Close(scoped_refptr<UsbDeviceHandle> handle) { |
| 208 DCHECK(thread_checker_.CalledOnValidThread()); | 209 DCHECK(thread_checker_.CalledOnValidThread()); |
| 209 | 210 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 | 285 |
| 285 #if defined(OS_CHROMEOS) | 286 #if defined(OS_CHROMEOS) |
| 286 | 287 |
| 287 void UsbDeviceImpl::OnOpenRequestComplete(const OpenCallback& callback, | 288 void UsbDeviceImpl::OnOpenRequestComplete(const OpenCallback& callback, |
| 288 dbus::FileDescriptor fd) { | 289 dbus::FileDescriptor fd) { |
| 289 blocking_task_runner_->PostTask( | 290 blocking_task_runner_->PostTask( |
| 290 FROM_HERE, base::Bind(&UsbDeviceImpl::OpenOnBlockingThreadWithFd, this, | 291 FROM_HERE, base::Bind(&UsbDeviceImpl::OpenOnBlockingThreadWithFd, this, |
| 291 base::Passed(&fd), callback)); | 292 base::Passed(&fd), callback)); |
| 292 } | 293 } |
| 293 | 294 |
| 295 void UsbDeviceImpl::OnOpenRequestError(const OpenCallback& callback, |
| 296 const std::string& error_name, |
| 297 const std::string& error_message) { |
| 298 USB_LOG(EVENT) << "Permission broker failed to open the device: " |
| 299 << error_name << ": " << error_message; |
| 300 callback.Run(nullptr); |
| 301 } |
| 302 |
| 294 void UsbDeviceImpl::OpenOnBlockingThreadWithFd(dbus::FileDescriptor fd, | 303 void UsbDeviceImpl::OpenOnBlockingThreadWithFd(dbus::FileDescriptor fd, |
| 295 const OpenCallback& callback) { | 304 const OpenCallback& callback) { |
| 296 fd.CheckValidity(); | 305 fd.CheckValidity(); |
| 297 if (!fd.is_valid()) { | 306 DCHECK(fd.is_valid()); |
| 298 USB_LOG(EVENT) << "Did not get valid device handle from permission broker."; | |
| 299 task_runner_->PostTask(FROM_HERE, base::Bind(callback, nullptr)); | |
| 300 return; | |
| 301 } | |
| 302 | 307 |
| 303 PlatformUsbDeviceHandle handle; | 308 PlatformUsbDeviceHandle handle; |
| 304 const int rv = libusb_open_fd(platform_device_, fd.TakeValue(), &handle); | 309 const int rv = libusb_open_fd(platform_device_, fd.TakeValue(), &handle); |
| 305 if (LIBUSB_SUCCESS == rv) { | 310 if (LIBUSB_SUCCESS == rv) { |
| 306 task_runner_->PostTask( | 311 task_runner_->PostTask( |
| 307 FROM_HERE, base::Bind(&UsbDeviceImpl::Opened, this, handle, callback)); | 312 FROM_HERE, base::Bind(&UsbDeviceImpl::Opened, this, handle, callback)); |
| 308 } else { | 313 } else { |
| 309 USB_LOG(EVENT) << "Failed to open device: " | 314 USB_LOG(EVENT) << "Failed to open device: " |
| 310 << ConvertPlatformUsbErrorToString(rv); | 315 << ConvertPlatformUsbErrorToString(rv); |
| 311 task_runner_->PostTask(FROM_HERE, base::Bind(callback, nullptr)); | 316 task_runner_->PostTask(FROM_HERE, base::Bind(callback, nullptr)); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 330 void UsbDeviceImpl::Opened(PlatformUsbDeviceHandle platform_handle, | 335 void UsbDeviceImpl::Opened(PlatformUsbDeviceHandle platform_handle, |
| 331 const OpenCallback& callback) { | 336 const OpenCallback& callback) { |
| 332 DCHECK(thread_checker_.CalledOnValidThread()); | 337 DCHECK(thread_checker_.CalledOnValidThread()); |
| 333 scoped_refptr<UsbDeviceHandleImpl> device_handle = new UsbDeviceHandleImpl( | 338 scoped_refptr<UsbDeviceHandleImpl> device_handle = new UsbDeviceHandleImpl( |
| 334 context_, this, platform_handle, blocking_task_runner_); | 339 context_, this, platform_handle, blocking_task_runner_); |
| 335 handles_.push_back(device_handle); | 340 handles_.push_back(device_handle); |
| 336 callback.Run(device_handle); | 341 callback.Run(device_handle); |
| 337 } | 342 } |
| 338 | 343 |
| 339 } // namespace device | 344 } // namespace device |
| OLD | NEW |