diff options
author | sammc@chromium.org <sammc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-09 13:04:26 +0000 |
---|---|---|
committer | sammc@chromium.org <sammc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-09 13:04:26 +0000 |
commit | 9a1be23660e80896737eaa4df1583540aba6cc0e (patch) | |
tree | 84e96fd6dcd3f4a13f66b0079f5af923341e70fa /device | |
parent | 86be42a517d86e605182d42cd95dc2bd6a0e4c47 (diff) | |
download | chromium_src-9a1be23660e80896737eaa4df1583540aba6cc0e.zip chromium_src-9a1be23660e80896737eaa4df1583540aba6cc0e.tar.gz chromium_src-9a1be23660e80896737eaa4df1583540aba6cc0e.tar.bz2 |
Add a basic Mojo SerialService that implements GetDevices().
BUG=389016
Review URL: https://codereview.chromium.org/363853003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@282012 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'device')
-rw-r--r-- | device/device_tests.gyp | 6 | ||||
-rw-r--r-- | device/serial/serial.gyp | 6 | ||||
-rw-r--r-- | device/serial/serial.mojom | 4 | ||||
-rw-r--r-- | device/serial/serial_device_enumerator_linux.cc | 2 | ||||
-rw-r--r-- | device/serial/serial_device_enumerator_mac.cc | 2 | ||||
-rw-r--r-- | device/serial/serial_device_enumerator_win.cc | 2 | ||||
-rw-r--r-- | device/serial/serial_service_impl.cc | 44 | ||||
-rw-r--r-- | device/serial/serial_service_impl.h | 37 | ||||
-rw-r--r-- | device/serial/serial_service_unittest.cc | 53 | ||||
-rw-r--r-- | device/test/DEPS | 3 | ||||
-rw-r--r-- | device/test/run_all_unittests.cc | 18 |
11 files changed, 173 insertions, 4 deletions
diff --git a/device/device_tests.gyp b/device/device_tests.gyp index 2452254..29667d4 100644 --- a/device/device_tests.gyp +++ b/device/device_tests.gyp @@ -11,8 +11,9 @@ 'target_name': 'device_unittests', 'type': '<(gtest_target_type)', 'dependencies': [ - '../base/base.gyp:run_all_unittests', '../base/base.gyp:test_support_base', + '../mojo/mojo.gyp:mojo_environment_chromium', + '../mojo/mojo.gyp:mojo_system_impl', '../testing/gmock.gyp:gmock', '../testing/gtest.gyp:gtest', 'bluetooth/bluetooth.gyp:device_bluetooth', @@ -20,6 +21,7 @@ 'nfc/nfc.gyp:device_nfc', 'usb/usb.gyp:device_usb', 'hid/hid.gyp:device_hid', + 'serial/serial.gyp:device_serial', ], 'sources': [ 'bluetooth/bluetooth_adapter_mac_unittest.mm', @@ -41,6 +43,8 @@ 'hid/hid_report_descriptor_unittest.cc', 'hid/hid_service_unittest.cc', 'hid/input_service_linux_unittest.cc', + 'serial/serial_service_unittest.cc', + 'test/run_all_unittests.cc', ], 'conditions': [ ['chromeos==1', { diff --git a/device/serial/serial.gyp b/device/serial/serial.gyp index c23a50d..5c0e386 100644 --- a/device/serial/serial.gyp +++ b/device/serial/serial.gyp @@ -28,8 +28,12 @@ '../../mojo/public/tools/bindings/mojom_bindings_generator.gypi', ], 'dependencies': [ + '../../mojo/mojo.gyp:mojo_cpp_bindings', '../../net/net.gyp:net', ], + 'export_dependent_settings': [ + '../../mojo/mojo.gyp:mojo_cpp_bindings', + ], 'sources': [ 'serial.mojom', 'serial_device_enumerator.cc', @@ -46,6 +50,8 @@ 'serial_io_handler_posix.h', 'serial_io_handler_win.cc', 'serial_io_handler_win.h', + 'serial_service_impl.cc', + 'serial_service_impl.h', ], }, ], diff --git a/device/serial/serial.mojom b/device/serial/serial.mojom index a0205ae..da866b0 100644 --- a/device/serial/serial.mojom +++ b/device/serial/serial.mojom @@ -79,4 +79,8 @@ struct DeviceControlSignals { bool dsr; }; +interface SerialService { + GetDevices() => (DeviceInfo[] devices); +}; + } diff --git a/device/serial/serial_device_enumerator_linux.cc b/device/serial/serial_device_enumerator_linux.cc index 3d3097d..f2fb9fa 100644 --- a/device/serial/serial_device_enumerator_linux.cc +++ b/device/serial/serial_device_enumerator_linux.cc @@ -45,7 +45,7 @@ SerialDeviceEnumeratorLinux::SerialDeviceEnumeratorLinux() { SerialDeviceEnumeratorLinux::~SerialDeviceEnumeratorLinux() {} mojo::Array<serial::DeviceInfoPtr> SerialDeviceEnumeratorLinux::GetDevices() { - mojo::Array<serial::DeviceInfoPtr> devices; + mojo::Array<serial::DeviceInfoPtr> devices(0); ScopedUdevEnumeratePtr enumerate(udev_enumerate_new(udev_.get())); if (!enumerate) { LOG(ERROR) << "Serial device enumeration failed."; diff --git a/device/serial/serial_device_enumerator_mac.cc b/device/serial/serial_device_enumerator_mac.cc index ca1646d..3222daa 100644 --- a/device/serial/serial_device_enumerator_mac.cc +++ b/device/serial/serial_device_enumerator_mac.cc @@ -36,7 +36,7 @@ mojo::Array<serial::DeviceInfoPtr> SerialDeviceEnumeratorMac::GetDevices() { valid_patterns.insert("/dev/tty.*"); valid_patterns.insert("/dev/cu.*"); - mojo::Array<serial::DeviceInfoPtr> devices; + mojo::Array<serial::DeviceInfoPtr> devices(0); base::FileEnumerator enumerator(kDevRoot, false, kFilesAndSymLinks); do { const base::FilePath next_device_path(enumerator.Next()); diff --git a/device/serial/serial_device_enumerator_win.cc b/device/serial/serial_device_enumerator_win.cc index 2e9e587..124c6b7 100644 --- a/device/serial/serial_device_enumerator_win.cc +++ b/device/serial/serial_device_enumerator_win.cc @@ -29,7 +29,7 @@ SerialDeviceEnumeratorWin::~SerialDeviceEnumeratorWin() {} mojo::Array<serial::DeviceInfoPtr> SerialDeviceEnumeratorWin::GetDevices() { base::win::RegistryValueIterator iter_key( HKEY_LOCAL_MACHINE, L"HARDWARE\\DEVICEMAP\\SERIALCOMM\\"); - mojo::Array<serial::DeviceInfoPtr> devices; + mojo::Array<serial::DeviceInfoPtr> devices(0); for (; iter_key.Valid(); ++iter_key) { serial::DeviceInfoPtr info(serial::DeviceInfo::New()); info->path = base::UTF16ToASCII(iter_key.Value()); diff --git a/device/serial/serial_service_impl.cc b/device/serial/serial_service_impl.cc new file mode 100644 index 0000000..1d83e23 --- /dev/null +++ b/device/serial/serial_service_impl.cc @@ -0,0 +1,44 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "device/serial/serial_service_impl.h" + +#include "base/bind.h" +#include "base/location.h" + +namespace device { + +SerialServiceImpl::SerialServiceImpl() { +} + +SerialServiceImpl::~SerialServiceImpl() { +} + +// static +void SerialServiceImpl::Create( + mojo::InterfaceRequest<serial::SerialService> request) { + mojo::BindToRequest(new SerialServiceImpl(), &request); +} + +// static +void SerialServiceImpl::CreateOnMessageLoop( + scoped_refptr<base::MessageLoopProxy> message_loop, + mojo::InterfaceRequest<serial::SerialService> request) { + message_loop->PostTask( + FROM_HERE, + base::Bind(&SerialServiceImpl::Create, 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()); +} + +void SerialServiceImpl::OnConnectionError() { + delete this; +} + +} // namespace device diff --git a/device/serial/serial_service_impl.h b/device/serial/serial_service_impl.h new file mode 100644 index 0000000..ff4cf4f --- /dev/null +++ b/device/serial/serial_service_impl.h @@ -0,0 +1,37 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef DEVICE_SERIAL_SERIAL_SERVICE_IMPL_H_ +#define DEVICE_SERIAL_SERIAL_SERVICE_IMPL_H_ + +#include "base/memory/scoped_ptr.h" +#include "base/message_loop/message_loop_proxy.h" +#include "device/serial/serial.mojom.h" +#include "device/serial/serial_device_enumerator.h" +#include "mojo/public/cpp/bindings/interface_impl.h" + +namespace device { + +class SerialServiceImpl : public mojo::InterfaceImpl<serial::SerialService> { + public: + SerialServiceImpl(); + virtual ~SerialServiceImpl(); + + static void Create(mojo::InterfaceRequest<serial::SerialService> request); + static void CreateOnMessageLoop( + scoped_refptr<base::MessageLoopProxy> message_loop, + mojo::InterfaceRequest<serial::SerialService> request); + + // mojo::InterfaceImpl<SerialService> overrides. + virtual void GetDevices(const mojo::Callback< + void(mojo::Array<serial::DeviceInfoPtr>)>& callback) OVERRIDE; + virtual void OnConnectionError() OVERRIDE; + + private: + scoped_ptr<SerialDeviceEnumerator> device_enumerator_; +}; + +} // namespace device + +#endif // DEVICE_SERIAL_SERIAL_SERVICE_IMPL_H_ diff --git a/device/serial/serial_service_unittest.cc b/device/serial/serial_service_unittest.cc new file mode 100644 index 0000000..7e77c14 --- /dev/null +++ b/device/serial/serial_service_unittest.cc @@ -0,0 +1,53 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/bind.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" +#include "device/serial/serial.mojom.h" +#include "device/serial/serial_service_impl.h" +#include "mojo/public/cpp/bindings/error_handler.h" +#include "mojo/public/cpp/bindings/interface_ptr.h" +#include "mojo/public/cpp/bindings/interface_request.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace device { + +class SerialServiceTest : public testing::Test, public mojo::ErrorHandler { + public: + SerialServiceTest() {} + + void StoreDevices(mojo::Array<serial::DeviceInfoPtr> devices) { + devices_ = devices.Pass(); + message_loop_.PostTask(FROM_HERE, run_loop_.QuitClosure()); + } + + virtual void OnConnectionError() OVERRIDE { + message_loop_.PostTask(FROM_HERE, run_loop_.QuitClosure()); + FAIL() << "Connection error"; + } + + base::MessageLoop message_loop_; + base::RunLoop run_loop_; + mojo::Array<serial::DeviceInfoPtr> devices_; + + private: + DISALLOW_COPY_AND_ASSIGN(SerialServiceTest); +}; + +TEST_F(SerialServiceTest, GetDevices) { + mojo::InterfacePtr<serial::SerialService> service; + SerialServiceImpl::Create(mojo::Get(&service)); + service.set_error_handler(this); + mojo::Array<serial::DeviceInfoPtr> result; + service->GetDevices( + base::Bind(&SerialServiceTest::StoreDevices, base::Unretained(this))); + run_loop_.Run(); + + // Because we're running on unknown hardware, only check that we received a + // non-null result. + EXPECT_TRUE(devices_); +} + +} // namespace device diff --git a/device/test/DEPS b/device/test/DEPS new file mode 100644 index 0000000..26b3ad9b --- /dev/null +++ b/device/test/DEPS @@ -0,0 +1,3 @@ +include_rules = [ + "+mojo/embedder", +] diff --git a/device/test/run_all_unittests.cc b/device/test/run_all_unittests.cc new file mode 100644 index 0000000..cd3adb5 --- /dev/null +++ b/device/test/run_all_unittests.cc @@ -0,0 +1,18 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/bind.h" +#include "base/test/launcher/unit_test_launcher.h" +#include "base/test/test_suite.h" +#include "mojo/embedder/embedder.h" + +int main(int argc, char** argv) { + base::TestSuite test_suite(argc, argv); + + mojo::embedder::Init(); + return base::LaunchUnitTests( + argc, + argv, + base::Bind(&base::TestSuite::Run, base::Unretained(&test_suite))); +} |