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 |