summaryrefslogtreecommitdiffstats
path: root/device
diff options
context:
space:
mode:
authorsammc@chromium.org <sammc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-09 13:04:26 +0000
committersammc@chromium.org <sammc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-09 13:04:26 +0000
commit9a1be23660e80896737eaa4df1583540aba6cc0e (patch)
tree84e96fd6dcd3f4a13f66b0079f5af923341e70fa /device
parent86be42a517d86e605182d42cd95dc2bd6a0e4c47 (diff)
downloadchromium_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.gyp6
-rw-r--r--device/serial/serial.gyp6
-rw-r--r--device/serial/serial.mojom4
-rw-r--r--device/serial/serial_device_enumerator_linux.cc2
-rw-r--r--device/serial/serial_device_enumerator_mac.cc2
-rw-r--r--device/serial/serial_device_enumerator_win.cc2
-rw-r--r--device/serial/serial_service_impl.cc44
-rw-r--r--device/serial/serial_service_impl.h37
-rw-r--r--device/serial/serial_service_unittest.cc53
-rw-r--r--device/test/DEPS3
-rw-r--r--device/test/run_all_unittests.cc18
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)));
+}