| 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::InterfacePtr<serial::DataSinkClient> sink_client, | 40 mojo::InterfaceRequest<serial::DataSource> source); |
| 41 mojo::InterfaceRequest<serial::DataSource> source, | |
| 42 mojo::InterfacePtr<serial::DataSourceClient> source_client); | |
| 43 void Run(); | 41 void Run(); |
| 44 | 42 |
| 45 private: | 43 private: |
| 46 friend class base::RefCountedThreadSafe<SerialConnectionFactory::ConnectTask>; | 44 friend class base::RefCountedThreadSafe<SerialConnectionFactory::ConnectTask>; |
| 47 virtual ~ConnectTask(); | 45 virtual ~ConnectTask(); |
| 48 void Connect(); | 46 void Connect(); |
| 49 void OnConnected(bool success); | 47 void OnConnected(bool success); |
| 50 | 48 |
| 51 scoped_refptr<SerialConnectionFactory> factory_; | 49 scoped_refptr<SerialConnectionFactory> factory_; |
| 52 const std::string path_; | 50 const std::string path_; |
| 53 serial::ConnectionOptionsPtr options_; | 51 serial::ConnectionOptionsPtr options_; |
| 54 mojo::InterfaceRequest<serial::Connection> connection_request_; | 52 mojo::InterfaceRequest<serial::Connection> connection_request_; |
| 55 mojo::InterfaceRequest<serial::DataSink> sink_; | 53 mojo::InterfaceRequest<serial::DataSink> sink_; |
| 56 mojo::InterfacePtr<serial::DataSinkClient> sink_client_; | |
| 57 mojo::InterfaceRequest<serial::DataSource> source_; | 54 mojo::InterfaceRequest<serial::DataSource> source_; |
| 58 mojo::InterfacePtr<serial::DataSourceClient> source_client_; | |
| 59 scoped_refptr<SerialIoHandler> io_handler_; | 55 scoped_refptr<SerialIoHandler> io_handler_; |
| 60 | 56 |
| 61 DISALLOW_COPY_AND_ASSIGN(ConnectTask); | 57 DISALLOW_COPY_AND_ASSIGN(ConnectTask); |
| 62 }; | 58 }; |
| 63 | 59 |
| 64 SerialConnectionFactory::SerialConnectionFactory( | 60 SerialConnectionFactory::SerialConnectionFactory( |
| 65 const IoHandlerFactory& io_handler_factory, | 61 const IoHandlerFactory& io_handler_factory, |
| 66 scoped_refptr<base::MessageLoopProxy> connect_message_loop) | 62 scoped_refptr<base::MessageLoopProxy> connect_message_loop) |
| 67 : io_handler_factory_(io_handler_factory), | 63 : io_handler_factory_(io_handler_factory), |
| 68 connect_message_loop_(connect_message_loop) { | 64 connect_message_loop_(connect_message_loop) { |
| 69 } | 65 } |
| 70 | 66 |
| 71 void SerialConnectionFactory::CreateConnection( | 67 void SerialConnectionFactory::CreateConnection( |
| 72 const std::string& path, | 68 const std::string& path, |
| 73 serial::ConnectionOptionsPtr options, | 69 serial::ConnectionOptionsPtr options, |
| 74 mojo::InterfaceRequest<serial::Connection> connection_request, | 70 mojo::InterfaceRequest<serial::Connection> connection_request, |
| 75 mojo::InterfaceRequest<serial::DataSink> sink, | 71 mojo::InterfaceRequest<serial::DataSink> sink, |
| 76 mojo::InterfacePtr<serial::DataSinkClient> sink_client, | 72 mojo::InterfaceRequest<serial::DataSource> source) { |
| 77 mojo::InterfaceRequest<serial::DataSource> source, | 73 scoped_refptr<ConnectTask> task(new ConnectTask(this, |
| 78 mojo::InterfacePtr<serial::DataSourceClient> source_client) { | 74 path, |
| 79 scoped_refptr<ConnectTask> task(new ConnectTask( | 75 options.Pass(), |
| 80 this, path, options.Pass(), connection_request.Pass(), sink.Pass(), | 76 connection_request.Pass(), |
| 81 sink_client.Pass(), source.Pass(), source_client.Pass())); | 77 sink.Pass(), |
| 78 source.Pass())); |
| 82 task->Run(); | 79 task->Run(); |
| 83 } | 80 } |
| 84 | 81 |
| 85 SerialConnectionFactory::~SerialConnectionFactory() { | 82 SerialConnectionFactory::~SerialConnectionFactory() { |
| 86 } | 83 } |
| 87 | 84 |
| 88 SerialConnectionFactory::ConnectTask::ConnectTask( | 85 SerialConnectionFactory::ConnectTask::ConnectTask( |
| 89 scoped_refptr<SerialConnectionFactory> factory, | 86 scoped_refptr<SerialConnectionFactory> factory, |
| 90 const std::string& path, | 87 const std::string& path, |
| 91 serial::ConnectionOptionsPtr options, | 88 serial::ConnectionOptionsPtr options, |
| 92 mojo::InterfaceRequest<serial::Connection> connection_request, | 89 mojo::InterfaceRequest<serial::Connection> connection_request, |
| 93 mojo::InterfaceRequest<serial::DataSink> sink, | 90 mojo::InterfaceRequest<serial::DataSink> sink, |
| 94 mojo::InterfacePtr<serial::DataSinkClient> sink_client, | 91 mojo::InterfaceRequest<serial::DataSource> source) |
| 95 mojo::InterfaceRequest<serial::DataSource> source, | |
| 96 mojo::InterfacePtr<serial::DataSourceClient> source_client) | |
| 97 : factory_(factory), | 92 : factory_(factory), |
| 98 path_(path), | 93 path_(path), |
| 99 options_(options.Pass()), | 94 options_(options.Pass()), |
| 100 connection_request_(connection_request.Pass()), | 95 connection_request_(connection_request.Pass()), |
| 101 sink_(sink.Pass()), | 96 sink_(sink.Pass()), |
| 102 sink_client_(sink_client.Pass()), | 97 source_(source.Pass()) { |
| 103 source_(source.Pass()), | |
| 104 source_client_(source_client.Pass()) { | |
| 105 if (!options_) { | 98 if (!options_) { |
| 106 options_ = serial::ConnectionOptions::New(); | 99 options_ = serial::ConnectionOptions::New(); |
| 107 } | 100 } |
| 108 FillDefaultConnectionOptions(options_.get()); | 101 FillDefaultConnectionOptions(options_.get()); |
| 109 } | 102 } |
| 110 | 103 |
| 111 void SerialConnectionFactory::ConnectTask::Run() { | 104 void SerialConnectionFactory::ConnectTask::Run() { |
| 112 factory_->connect_message_loop_->PostTask( | 105 factory_->connect_message_loop_->PostTask( |
| 113 FROM_HERE, | 106 FROM_HERE, |
| 114 base::Bind(&SerialConnectionFactory::ConnectTask::Connect, this)); | 107 base::Bind(&SerialConnectionFactory::ConnectTask::Connect, this)); |
| 115 } | 108 } |
| 116 | 109 |
| 117 SerialConnectionFactory::ConnectTask::~ConnectTask() { | 110 SerialConnectionFactory::ConnectTask::~ConnectTask() { |
| 118 } | 111 } |
| 119 | 112 |
| 120 void SerialConnectionFactory::ConnectTask::Connect() { | 113 void SerialConnectionFactory::ConnectTask::Connect() { |
| 121 io_handler_ = factory_->io_handler_factory_.Run(); | 114 io_handler_ = factory_->io_handler_factory_.Run(); |
| 122 io_handler_->Open( | 115 io_handler_->Open( |
| 123 path_, *options_, | 116 path_, *options_, |
| 124 base::Bind(&SerialConnectionFactory::ConnectTask::OnConnected, this)); | 117 base::Bind(&SerialConnectionFactory::ConnectTask::OnConnected, this)); |
| 125 } | 118 } |
| 126 | 119 |
| 127 void SerialConnectionFactory::ConnectTask::OnConnected(bool success) { | 120 void SerialConnectionFactory::ConnectTask::OnConnected(bool success) { |
| 128 DCHECK(io_handler_.get()); | 121 DCHECK(io_handler_.get()); |
| 129 if (!success) { | 122 if (!success) { |
| 130 return; | 123 return; |
| 131 } | 124 } |
| 132 | 125 |
| 133 mojo::BindToRequest( | 126 mojo::BindToRequest( |
| 134 new SerialConnection(io_handler_, sink_.Pass(), sink_client_.Pass(), | 127 new SerialConnection(io_handler_, sink_.Pass(), source_.Pass()), |
| 135 source_.Pass(), source_client_.Pass()), | |
| 136 &connection_request_); | 128 &connection_request_); |
| 137 } | 129 } |
| 138 | 130 |
| 139 } // namespace device | 131 } // namespace device |
| OLD | NEW |