Index: device/serial/serial_io_handler_posix.cc |
diff --git a/device/serial/serial_io_handler_posix.cc b/device/serial/serial_io_handler_posix.cc |
index a215661be11586b02dad4c2194686cbe51bd1318..679987b0435597e550e14a69754179f1b3b469d8 100644 |
--- a/device/serial/serial_io_handler_posix.cc |
+++ b/device/serial/serial_io_handler_posix.cc |
@@ -11,7 +11,13 @@ |
#if defined(OS_LINUX) |
#include <linux/serial.h> |
-#endif |
+#if defined(OS_CHROMEOS) |
+#include "base/bind.h" |
+#include "base/sys_info.h" |
+#include "chromeos/dbus/dbus_thread_manager.h" |
+#include "chromeos/dbus/permission_broker_client.h" |
+#endif // defined(OS_CHROMEOS) |
+#endif // defined(OS_LINUX) |
namespace { |
@@ -127,6 +133,35 @@ scoped_refptr<SerialIoHandler> SerialIoHandler::Create( |
return new SerialIoHandlerPosix(file_thread_message_loop); |
} |
+void SerialIoHandlerPosix::RequestAccess( |
+ const std::string& port, |
+ scoped_refptr<base::MessageLoopProxy> io_message_loop) { |
+#if defined(OS_LINUX) && defined(OS_CHROMEOS) |
+ if (base::SysInfo::IsRunningOnChromeOS()) { |
+ chromeos::PermissionBrokerClient* client = |
+ chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient(); |
+ if (!client) { |
+ DVLOG(1) << "Could not get permission_broker client."; |
+ OnRequestAccessComplete(port, false /* failure */); |
+ return; |
+ } |
+ io_message_loop->PostTask( |
Reilly Grant (use Gerrit)
2014/10/10 21:31:53
chromeos::PermissionBrokerClient must as I underst
Jorge Lucangeli Obes
2014/10/13 20:56:43
Done.
|
+ FROM_HERE, |
+ base::Bind( |
+ &chromeos::PermissionBrokerClient::RequestPathAccess, |
+ base::Unretained(client), |
+ port, |
+ -1, |
+ base::Bind(&SerialIoHandler::OnRequestAccessComplete, this, port))); |
+ } else { |
+ OnRequestAccessComplete(port, true /* success */); |
+ return; |
+ } |
+#else |
+ OnRequestAccessComplete(port, true /* success */); |
+#endif // defined(OS_LINUX) && defined(OS_CHROMEOS) |
+} |
+ |
void SerialIoHandlerPosix::ReadImpl() { |
DCHECK(CalledOnValidThread()); |
DCHECK(pending_read_buffer()); |