| Index: device/usb/usb_device_linux.cc
|
| diff --git a/device/usb/usb_device_linux.cc b/device/usb/usb_device_linux.cc
|
| index 08a3329162ab703672631f3009ff8e508e12f6f7..dc423de10200d0242ccc058cb7bd75802eeae7a3 100644
|
| --- a/device/usb/usb_device_linux.cc
|
| +++ b/device/usb/usb_device_linux.cc
|
| @@ -18,7 +18,7 @@
|
| #include "components/device_event_log/device_event_log.h"
|
| #include "device/usb/usb_descriptors.h"
|
| #include "device/usb/usb_device_handle_usbfs.h"
|
| -#include "device/usb/usb_error.h"
|
| +#include "device/usb/usb_service.h"
|
|
|
| #if defined(OS_CHROMEOS)
|
| #include "chromeos/dbus/dbus_thread_manager.h"
|
| @@ -27,21 +27,17 @@
|
|
|
| namespace device {
|
|
|
| -UsbDeviceLinux::UsbDeviceLinux(
|
| - const std::string& device_path,
|
| - const UsbDeviceDescriptor& descriptor,
|
| - const std::string& manufacturer_string,
|
| - const std::string& product_string,
|
| - const std::string& serial_number,
|
| - uint8_t active_configuration,
|
| - scoped_refptr<base::SequencedTaskRunner> blocking_task_runner)
|
| +UsbDeviceLinux::UsbDeviceLinux(const std::string& device_path,
|
| + const UsbDeviceDescriptor& descriptor,
|
| + const std::string& manufacturer_string,
|
| + const std::string& product_string,
|
| + const std::string& serial_number,
|
| + uint8_t active_configuration)
|
| : UsbDevice(descriptor,
|
| base::UTF8ToUTF16(manufacturer_string),
|
| base::UTF8ToUTF16(product_string),
|
| base::UTF8ToUTF16(serial_number)),
|
| - device_path_(device_path),
|
| - task_runner_(base::ThreadTaskRunnerHandle::Get()),
|
| - blocking_task_runner_(blocking_task_runner) {
|
| + device_path_(device_path) {
|
| ActiveConfigurationChanged(active_configuration);
|
| }
|
|
|
| @@ -50,7 +46,7 @@ UsbDeviceLinux::~UsbDeviceLinux() {}
|
| #if defined(OS_CHROMEOS)
|
|
|
| void UsbDeviceLinux::CheckUsbAccess(const ResultCallback& callback) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| + DCHECK(sequence_checker_.CalledOnValidSequence());
|
| chromeos::PermissionBrokerClient* client =
|
| chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient();
|
| DCHECK(client) << "Could not get permission broker client.";
|
| @@ -60,7 +56,7 @@ void UsbDeviceLinux::CheckUsbAccess(const ResultCallback& callback) {
|
| #endif // defined(OS_CHROMEOS)
|
|
|
| void UsbDeviceLinux::Open(const OpenCallback& callback) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| + DCHECK(sequence_checker_.CalledOnValidSequence());
|
|
|
| #if defined(OS_CHROMEOS)
|
| chromeos::PermissionBrokerClient* client =
|
| @@ -71,9 +67,12 @@ void UsbDeviceLinux::Open(const OpenCallback& callback) {
|
| base::Bind(&UsbDeviceLinux::OnOpenRequestComplete, this, callback),
|
| base::Bind(&UsbDeviceLinux::OnOpenRequestError, this, callback));
|
| #else
|
| - blocking_task_runner_->PostTask(
|
| + scoped_refptr<base::SequencedTaskRunner> blocking_task_runner =
|
| + UsbService::CreateBlockingTaskRunner();
|
| + blocking_task_runner->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&UsbDeviceLinux::OpenOnBlockingThread, this, callback));
|
| + base::Bind(&UsbDeviceLinux::OpenOnBlockingThread, this, callback,
|
| + base::ThreadTaskRunnerHandle::Get(), blocking_task_runner));
|
| #endif // defined(OS_CHROMEOS)
|
| }
|
|
|
| @@ -86,7 +85,7 @@ void UsbDeviceLinux::OnOpenRequestComplete(const OpenCallback& callback,
|
| callback.Run(nullptr);
|
| return;
|
| }
|
| - Opened(std::move(fd), callback);
|
| + Opened(std::move(fd), callback, UsbService::CreateBlockingTaskRunner());
|
| }
|
|
|
| void UsbDeviceLinux::OnOpenRequestError(const OpenCallback& callback,
|
| @@ -99,23 +98,30 @@ void UsbDeviceLinux::OnOpenRequestError(const OpenCallback& callback,
|
|
|
| #else
|
|
|
| -void UsbDeviceLinux::OpenOnBlockingThread(const OpenCallback& callback) {
|
| +void UsbDeviceLinux::OpenOnBlockingThread(
|
| + const OpenCallback& callback,
|
| + scoped_refptr<base::SequencedTaskRunner> task_runner,
|
| + scoped_refptr<base::SequencedTaskRunner> blocking_task_runner) {
|
| base::ScopedFD fd(HANDLE_EINTR(open(device_path_.c_str(), O_RDWR)));
|
| if (fd.is_valid()) {
|
| - task_runner_->PostTask(FROM_HERE, base::Bind(&UsbDeviceLinux::Opened, this,
|
| - base::Passed(&fd), callback));
|
| + task_runner->PostTask(
|
| + FROM_HERE, base::Bind(&UsbDeviceLinux::Opened, this, base::Passed(&fd),
|
| + callback, blocking_task_runner));
|
| } else {
|
| USB_PLOG(EVENT) << "Failed to open " << device_path_;
|
| - task_runner_->PostTask(FROM_HERE, base::Bind(callback, nullptr));
|
| + task_runner->PostTask(FROM_HERE, base::Bind(callback, nullptr));
|
| }
|
| }
|
|
|
| #endif // defined(OS_CHROMEOS)
|
|
|
| -void UsbDeviceLinux::Opened(base::ScopedFD fd, const OpenCallback& callback) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| +void UsbDeviceLinux::Opened(
|
| + base::ScopedFD fd,
|
| + const OpenCallback& callback,
|
| + scoped_refptr<base::SequencedTaskRunner> blocking_task_runner) {
|
| + DCHECK(sequence_checker_.CalledOnValidSequence());
|
| scoped_refptr<UsbDeviceHandle> device_handle =
|
| - new UsbDeviceHandleUsbfs(this, std::move(fd), blocking_task_runner_);
|
| + new UsbDeviceHandleUsbfs(this, std::move(fd), blocking_task_runner);
|
| handles().push_back(device_handle.get());
|
| callback.Run(device_handle);
|
| }
|
|
|