| Index: device/hid/hid_service_linux.cc
|
| diff --git a/device/hid/hid_service_linux.cc b/device/hid/hid_service_linux.cc
|
| index 0829576f5972ad5b8ac75581e4c6061d1151e1e1..057d18c45f649ac2f550445cb19c5d082c687c63 100644
|
| --- a/device/hid/hid_service_linux.cc
|
| +++ b/device/hid/hid_service_linux.cc
|
| @@ -241,9 +241,13 @@ void HidServiceLinux::Connect(const HidDeviceId& device_id,
|
| chromeos::PermissionBrokerClient* client =
|
| chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient();
|
| DCHECK(client) << "Could not get permission broker client.";
|
| + chromeos::PermissionBrokerClient::ErrorCallback error_callback =
|
| + base::Bind(&HidServiceLinux::OnPathOpenError,
|
| + params->device_info->device_node(), params->callback);
|
| client->OpenPath(
|
| device_info->device_node(),
|
| - base::Bind(&HidServiceLinux::OnPathOpened, base::Passed(¶ms)));
|
| + base::Bind(&HidServiceLinux::OnPathOpenComplete, base::Passed(¶ms)),
|
| + error_callback);
|
| #else
|
| file_task_runner_->PostTask(FROM_HERE,
|
| base::Bind(&HidServiceLinux::OpenOnBlockingThread,
|
| @@ -254,8 +258,8 @@ void HidServiceLinux::Connect(const HidDeviceId& device_id,
|
| #if defined(OS_CHROMEOS)
|
|
|
| // static
|
| -void HidServiceLinux::OnPathOpened(scoped_ptr<ConnectParams> params,
|
| - dbus::FileDescriptor fd) {
|
| +void HidServiceLinux::OnPathOpenComplete(scoped_ptr<ConnectParams> params,
|
| + dbus::FileDescriptor fd) {
|
| scoped_refptr<base::SingleThreadTaskRunner> file_task_runner =
|
| params->file_task_runner;
|
| file_task_runner->PostTask(
|
| @@ -264,21 +268,24 @@ void HidServiceLinux::OnPathOpened(scoped_ptr<ConnectParams> params,
|
| }
|
|
|
| // static
|
| +void HidServiceLinux::OnPathOpenError(const std::string& device_path,
|
| + const ConnectCallback& callback,
|
| + const std::string& error_name,
|
| + const std::string& error_message) {
|
| + HID_LOG(EVENT) << "Permission broker failed to open '" << device_path
|
| + << "': " << error_name << ": " << error_message;
|
| + callback.Run(nullptr);
|
| +}
|
| +
|
| +// static
|
| void HidServiceLinux::ValidateFdOnBlockingThread(
|
| scoped_ptr<ConnectParams> params,
|
| dbus::FileDescriptor fd) {
|
| base::ThreadRestrictions::AssertIOAllowed();
|
| -
|
| fd.CheckValidity();
|
| - if (fd.is_valid()) {
|
| - params->device_file = base::File(fd.TakeValue());
|
| - FinishOpen(std::move(params));
|
| - } else {
|
| - HID_LOG(EVENT) << "Permission broker denied access to '"
|
| - << params->device_info->device_node() << "'.";
|
| - params->task_runner->PostTask(FROM_HERE,
|
| - base::Bind(params->callback, nullptr));
|
| - }
|
| + DCHECK(fd.is_valid());
|
| + params->device_file = base::File(fd.TakeValue());
|
| + FinishOpen(std::move(params));
|
| }
|
|
|
| #else
|
|
|