Index: device/serial/serial_io_handler.cc |
diff --git a/device/serial/serial_io_handler.cc b/device/serial/serial_io_handler.cc |
index 35b41f7fd5bdef43eeb4a46d361b656410e426ac..a5257ed329044ca90bb1d9503a061fdf0fb259fe 100644 |
--- a/device/serial/serial_io_handler.cc |
+++ b/device/serial/serial_io_handler.cc |
@@ -54,12 +54,15 @@ void SerialIoHandler::Open(const std::string& port, |
chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient(); |
DCHECK(client) << "Could not get permission_broker client."; |
// PermissionBrokerClient should be called on the UI thread. |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner = |
+ base::ThreadTaskRunnerHandle::Get(); |
ui_thread_task_runner_->PostTask( |
- FROM_HERE, base::Bind(&chromeos::PermissionBrokerClient::OpenPath, |
- base::Unretained(client), port, |
- base::Bind(&SerialIoHandler::OnPathOpened, this, |
- file_thread_task_runner_, |
- base::ThreadTaskRunnerHandle::Get()))); |
+ FROM_HERE, |
+ base::Bind( |
+ &chromeos::PermissionBrokerClient::OpenPath, base::Unretained(client), |
+ port, base::Bind(&SerialIoHandler::OnPathOpened, this, |
+ file_thread_task_runner_, task_runner), |
+ base::Bind(&SerialIoHandler::OnPathOpenError, this, task_runner))); |
#else |
file_thread_task_runner_->PostTask( |
FROM_HERE, base::Bind(&SerialIoHandler::StartOpen, this, port, |
@@ -73,12 +76,20 @@ void SerialIoHandler::OnPathOpened( |
scoped_refptr<base::SingleThreadTaskRunner> file_thread_task_runner, |
scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner, |
dbus::FileDescriptor fd) { |
- DCHECK(CalledOnValidThread()); |
file_thread_task_runner->PostTask( |
FROM_HERE, base::Bind(&SerialIoHandler::ValidateOpenPort, this, |
io_thread_task_runner, base::Passed(&fd))); |
} |
+void SerialIoHandler::OnPathOpenError( |
+ scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner, |
+ const std::string& error_name, |
+ const std::string& error_message) { |
+ io_thread_task_runner->PostTask( |
+ FROM_HERE, base::Bind(&SerialIoHandler::ReportPathOpenError, this, |
+ error_name, error_message)); |
+} |
+ |
void SerialIoHandler::ValidateOpenPort( |
scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner, |
dbus::FileDescriptor fd) { |
@@ -93,6 +104,17 @@ void SerialIoHandler::ValidateOpenPort( |
base::Bind(&SerialIoHandler::FinishOpen, this, base::Passed(&file))); |
} |
+void SerialIoHandler::ReportPathOpenError(const std::string& error_name, |
+ const std::string& error_message) { |
+ DCHECK(CalledOnValidThread()); |
+ DCHECK(!open_complete_.is_null()); |
+ LOG(ERROR) << "Permission broker failed to open '" << port_ |
+ << "': " << error_name << ": " << error_message; |
+ OpenCompleteCallback callback = open_complete_; |
+ open_complete_.Reset(); |
+ callback.Run(false); |
+} |
+ |
#endif |
void SerialIoHandler::MergeConnectionOptions( |