| Index: device/serial/serial_service_impl.cc
|
| diff --git a/device/serial/serial_service_impl.cc b/device/serial/serial_service_impl.cc
|
| index 1d83e23a6ad848177018e6c400e04f0c995b2af8..14a8033f4ed48e06e22c4e1f03abb6341ac9990c 100644
|
| --- a/device/serial/serial_service_impl.cc
|
| +++ b/device/serial/serial_service_impl.cc
|
| @@ -6,10 +6,20 @@
|
|
|
| #include "base/bind.h"
|
| #include "base/location.h"
|
| +#include "device/serial/serial_io_handler.h"
|
|
|
| namespace device {
|
|
|
| -SerialServiceImpl::SerialServiceImpl() {
|
| +SerialServiceImpl::SerialServiceImpl(
|
| + scoped_refptr<SerialConnectionFactory> connection_factory)
|
| + : connection_factory_(connection_factory) {
|
| +}
|
| +
|
| +SerialServiceImpl::SerialServiceImpl(
|
| + scoped_refptr<SerialConnectionFactory> connection_factory,
|
| + scoped_ptr<SerialDeviceEnumerator> device_enumerator)
|
| + : device_enumerator_(device_enumerator.Pass()),
|
| + connection_factory_(connection_factory) {
|
| }
|
|
|
| SerialServiceImpl::~SerialServiceImpl() {
|
| @@ -17,28 +27,65 @@ SerialServiceImpl::~SerialServiceImpl() {
|
|
|
| // static
|
| void SerialServiceImpl::Create(
|
| + scoped_refptr<base::MessageLoopProxy> io_message_loop,
|
| mojo::InterfaceRequest<serial::SerialService> request) {
|
| - mojo::BindToRequest(new SerialServiceImpl(), &request);
|
| + mojo::BindToRequest(new SerialServiceImpl(new SerialConnectionFactory(
|
| + base::Bind(SerialIoHandler::Create,
|
| + base::MessageLoopProxy::current()),
|
| + io_message_loop)),
|
| + &request);
|
| }
|
|
|
| // static
|
| void SerialServiceImpl::CreateOnMessageLoop(
|
| scoped_refptr<base::MessageLoopProxy> message_loop,
|
| + scoped_refptr<base::MessageLoopProxy> io_message_loop,
|
| mojo::InterfaceRequest<serial::SerialService> request) {
|
| message_loop->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&SerialServiceImpl::Create, base::Passed(&request)));
|
| + base::Bind(
|
| + &SerialServiceImpl::Create, io_message_loop, base::Passed(&request)));
|
| }
|
|
|
| void SerialServiceImpl::GetDevices(
|
| const mojo::Callback<void(mojo::Array<serial::DeviceInfoPtr>)>& callback) {
|
| - if (!device_enumerator_)
|
| - device_enumerator_ = SerialDeviceEnumerator::Create();
|
| - callback.Run(device_enumerator_->GetDevices());
|
| + callback.Run(GetDeviceEnumerator()->GetDevices());
|
| +}
|
| +
|
| +void SerialServiceImpl::Connect(
|
| + const mojo::String& path,
|
| + serial::ConnectionOptionsPtr options,
|
| + mojo::InterfaceRequest<serial::Connection> connection_request) {
|
| + if (!IsValidPath(path))
|
| + return;
|
| + connection_factory_->CreateConnection(
|
| + path, options.Pass(), connection_request.Pass());
|
| }
|
|
|
| void SerialServiceImpl::OnConnectionError() {
|
| delete this;
|
| }
|
|
|
| +SerialDeviceEnumerator* SerialServiceImpl::GetDeviceEnumerator() {
|
| + if (!device_enumerator_)
|
| + device_enumerator_ = SerialDeviceEnumerator::Create();
|
| + return device_enumerator_.get();
|
| +}
|
| +
|
| +bool SerialServiceImpl::IsValidPath(const mojo::String& path) {
|
| + mojo::Array<serial::DeviceInfoPtr> devices(
|
| + GetDeviceEnumerator()->GetDevices());
|
| + for (size_t i = 0; i < devices.size(); i++) {
|
| + if (path == devices[i]->path)
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +void SerialServiceImpl::OnConnected(
|
| + const mojo::Callback<void(serial::ConnectionInfoPtr)>& callback,
|
| + serial::ConnectionInfoPtr result) {
|
| + callback.Run(result.Pass());
|
| +}
|
| +
|
| } // namespace device
|
|
|