| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "device/serial/serial_connection_factory.h" | 5 #include "device/serial/serial_connection_factory.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/location.h" | 8 #include "base/location.h" |
| 9 #include "device/serial/serial_connection.h" | 9 #include "device/serial/serial_connection.h" |
| 10 #include "device/serial/serial_io_handler.h" | 10 #include "device/serial/serial_io_handler.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 } // namespace | 30 } // namespace |
| 31 | 31 |
| 32 class SerialConnectionFactory::ConnectTask | 32 class SerialConnectionFactory::ConnectTask |
| 33 : public base::RefCountedThreadSafe<SerialConnectionFactory::ConnectTask> { | 33 : public base::RefCountedThreadSafe<SerialConnectionFactory::ConnectTask> { |
| 34 public: | 34 public: |
| 35 ConnectTask(scoped_refptr<SerialConnectionFactory> factory, | 35 ConnectTask(scoped_refptr<SerialConnectionFactory> factory, |
| 36 const std::string& path, | 36 const std::string& path, |
| 37 serial::ConnectionOptionsPtr options, | 37 serial::ConnectionOptionsPtr options, |
| 38 mojo::InterfaceRequest<serial::Connection> connection_request, | 38 mojo::InterfaceRequest<serial::Connection> connection_request, |
| 39 mojo::InterfaceRequest<serial::DataSink> sink, | 39 mojo::InterfaceRequest<serial::DataSink> sink, |
| 40 mojo::InterfaceRequest<serial::DataSource> source); | 40 mojo::InterfaceRequest<serial::DataSource> source, |
| 41 mojo::InterfacePtr<serial::DataSourceClient> source_client); |
| 41 void Run(); | 42 void Run(); |
| 42 | 43 |
| 43 private: | 44 private: |
| 44 friend class base::RefCountedThreadSafe<SerialConnectionFactory::ConnectTask>; | 45 friend class base::RefCountedThreadSafe<SerialConnectionFactory::ConnectTask>; |
| 45 virtual ~ConnectTask(); | 46 virtual ~ConnectTask(); |
| 46 void Connect(); | 47 void Connect(); |
| 47 void OnConnected(bool success); | 48 void OnConnected(bool success); |
| 48 | 49 |
| 49 scoped_refptr<SerialConnectionFactory> factory_; | 50 scoped_refptr<SerialConnectionFactory> factory_; |
| 50 const std::string path_; | 51 const std::string path_; |
| 51 serial::ConnectionOptionsPtr options_; | 52 serial::ConnectionOptionsPtr options_; |
| 52 mojo::InterfaceRequest<serial::Connection> connection_request_; | 53 mojo::InterfaceRequest<serial::Connection> connection_request_; |
| 53 mojo::InterfaceRequest<serial::DataSink> sink_; | 54 mojo::InterfaceRequest<serial::DataSink> sink_; |
| 54 mojo::InterfaceRequest<serial::DataSource> source_; | 55 mojo::InterfaceRequest<serial::DataSource> source_; |
| 56 mojo::InterfacePtr<serial::DataSourceClient> source_client_; |
| 55 scoped_refptr<SerialIoHandler> io_handler_; | 57 scoped_refptr<SerialIoHandler> io_handler_; |
| 56 | 58 |
| 57 DISALLOW_COPY_AND_ASSIGN(ConnectTask); | 59 DISALLOW_COPY_AND_ASSIGN(ConnectTask); |
| 58 }; | 60 }; |
| 59 | 61 |
| 60 SerialConnectionFactory::SerialConnectionFactory( | 62 SerialConnectionFactory::SerialConnectionFactory( |
| 61 const IoHandlerFactory& io_handler_factory, | 63 const IoHandlerFactory& io_handler_factory, |
| 62 scoped_refptr<base::MessageLoopProxy> connect_message_loop) | 64 scoped_refptr<base::MessageLoopProxy> connect_message_loop) |
| 63 : io_handler_factory_(io_handler_factory), | 65 : io_handler_factory_(io_handler_factory), |
| 64 connect_message_loop_(connect_message_loop) { | 66 connect_message_loop_(connect_message_loop) { |
| 65 } | 67 } |
| 66 | 68 |
| 67 void SerialConnectionFactory::CreateConnection( | 69 void SerialConnectionFactory::CreateConnection( |
| 68 const std::string& path, | 70 const std::string& path, |
| 69 serial::ConnectionOptionsPtr options, | 71 serial::ConnectionOptionsPtr options, |
| 70 mojo::InterfaceRequest<serial::Connection> connection_request, | 72 mojo::InterfaceRequest<serial::Connection> connection_request, |
| 71 mojo::InterfaceRequest<serial::DataSink> sink, | 73 mojo::InterfaceRequest<serial::DataSink> sink, |
| 72 mojo::InterfaceRequest<serial::DataSource> source) { | 74 mojo::InterfaceRequest<serial::DataSource> source, |
| 73 scoped_refptr<ConnectTask> task(new ConnectTask(this, | 75 mojo::InterfacePtr<serial::DataSourceClient> source_client) { |
| 74 path, | 76 scoped_refptr<ConnectTask> task( |
| 75 options.Pass(), | 77 new ConnectTask(this, path, options.Pass(), connection_request.Pass(), |
| 76 connection_request.Pass(), | 78 sink.Pass(), source.Pass(), source_client.Pass())); |
| 77 sink.Pass(), | |
| 78 source.Pass())); | |
| 79 task->Run(); | 79 task->Run(); |
| 80 } | 80 } |
| 81 | 81 |
| 82 SerialConnectionFactory::~SerialConnectionFactory() { | 82 SerialConnectionFactory::~SerialConnectionFactory() { |
| 83 } | 83 } |
| 84 | 84 |
| 85 SerialConnectionFactory::ConnectTask::ConnectTask( | 85 SerialConnectionFactory::ConnectTask::ConnectTask( |
| 86 scoped_refptr<SerialConnectionFactory> factory, | 86 scoped_refptr<SerialConnectionFactory> factory, |
| 87 const std::string& path, | 87 const std::string& path, |
| 88 serial::ConnectionOptionsPtr options, | 88 serial::ConnectionOptionsPtr options, |
| 89 mojo::InterfaceRequest<serial::Connection> connection_request, | 89 mojo::InterfaceRequest<serial::Connection> connection_request, |
| 90 mojo::InterfaceRequest<serial::DataSink> sink, | 90 mojo::InterfaceRequest<serial::DataSink> sink, |
| 91 mojo::InterfaceRequest<serial::DataSource> source) | 91 mojo::InterfaceRequest<serial::DataSource> source, |
| 92 mojo::InterfacePtr<serial::DataSourceClient> source_client) |
| 92 : factory_(factory), | 93 : factory_(factory), |
| 93 path_(path), | 94 path_(path), |
| 94 options_(options.Pass()), | 95 options_(options.Pass()), |
| 95 connection_request_(connection_request.Pass()), | 96 connection_request_(connection_request.Pass()), |
| 96 sink_(sink.Pass()), | 97 sink_(sink.Pass()), |
| 97 source_(source.Pass()) { | 98 source_(source.Pass()), |
| 99 source_client_(source_client.Pass()) { |
| 98 if (!options_) { | 100 if (!options_) { |
| 99 options_ = serial::ConnectionOptions::New(); | 101 options_ = serial::ConnectionOptions::New(); |
| 100 } | 102 } |
| 101 FillDefaultConnectionOptions(options_.get()); | 103 FillDefaultConnectionOptions(options_.get()); |
| 102 } | 104 } |
| 103 | 105 |
| 104 void SerialConnectionFactory::ConnectTask::Run() { | 106 void SerialConnectionFactory::ConnectTask::Run() { |
| 105 factory_->connect_message_loop_->PostTask( | 107 factory_->connect_message_loop_->PostTask( |
| 106 FROM_HERE, | 108 FROM_HERE, |
| 107 base::Bind(&SerialConnectionFactory::ConnectTask::Connect, this)); | 109 base::Bind(&SerialConnectionFactory::ConnectTask::Connect, this)); |
| 108 } | 110 } |
| 109 | 111 |
| 110 SerialConnectionFactory::ConnectTask::~ConnectTask() { | 112 SerialConnectionFactory::ConnectTask::~ConnectTask() { |
| 111 } | 113 } |
| 112 | 114 |
| 113 void SerialConnectionFactory::ConnectTask::Connect() { | 115 void SerialConnectionFactory::ConnectTask::Connect() { |
| 114 io_handler_ = factory_->io_handler_factory_.Run(); | 116 io_handler_ = factory_->io_handler_factory_.Run(); |
| 115 io_handler_->Open( | 117 io_handler_->Open( |
| 116 path_, *options_, | 118 path_, *options_, |
| 117 base::Bind(&SerialConnectionFactory::ConnectTask::OnConnected, this)); | 119 base::Bind(&SerialConnectionFactory::ConnectTask::OnConnected, this)); |
| 118 } | 120 } |
| 119 | 121 |
| 120 void SerialConnectionFactory::ConnectTask::OnConnected(bool success) { | 122 void SerialConnectionFactory::ConnectTask::OnConnected(bool success) { |
| 121 DCHECK(io_handler_.get()); | 123 DCHECK(io_handler_.get()); |
| 122 if (!success) { | 124 if (!success) { |
| 123 return; | 125 return; |
| 124 } | 126 } |
| 125 | 127 |
| 126 mojo::BindToRequest( | 128 mojo::BindToRequest( |
| 127 new SerialConnection(io_handler_, sink_.Pass(), source_.Pass()), | 129 new SerialConnection(io_handler_, sink_.Pass(), source_.Pass(), |
| 130 source_client_.Pass()), |
| 128 &connection_request_); | 131 &connection_request_); |
| 129 } | 132 } |
| 130 | 133 |
| 131 } // namespace device | 134 } // namespace device |
| OLD | NEW |