summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordenniskempin <denniskempin@google.com>2015-10-14 13:56:15 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-14 20:56:59 +0000
commit558f7757754f4dd120b18f440080bc00db838fa6 (patch)
tree438f01d3c64c03f6ab8c1e39e591ba332ef46782
parent2830e9f138e5f2bb86a28ed02aee81f6780122eb (diff)
downloadchromium_src-558f7757754f4dd120b18f440080bc00db838fa6.zip
chromium_src-558f7757754f4dd120b18f440080bc00db838fa6.tar.gz
chromium_src-558f7757754f4dd120b18f440080bc00db838fa6.tar.bz2
Add ChromeOS dbus client for the arc bridge service
The service currently only provides a ping method, but will have more methods added in the near future. BUG=b:24308453 Review URL: https://codereview.chromium.org/1403943003 Cr-Commit-Position: refs/heads/master@{#354108}
-rw-r--r--chromeos/chromeos.gyp4
-rw-r--r--chromeos/dbus/arc_bridge_client.cc77
-rw-r--r--chromeos/dbus/arc_bridge_client.h41
-rw-r--r--chromeos/dbus/dbus_client_bundle.cc8
-rw-r--r--chromeos/dbus/dbus_client_bundle.h5
-rw-r--r--chromeos/dbus/dbus_thread_manager.cc11
-rw-r--r--chromeos/dbus/dbus_thread_manager.h3
-rw-r--r--chromeos/dbus/fake_arc_bridge_client.cc36
-rw-r--r--chromeos/dbus/fake_arc_bridge_client.h33
9 files changed, 218 insertions, 0 deletions
diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp
index 4ccdfca..5400439 100644
--- a/chromeos/chromeos.gyp
+++ b/chromeos/chromeos.gyp
@@ -53,6 +53,8 @@
'dbus/amplifier_client.h',
'dbus/ap_manager_client.cc',
'dbus/ap_manager_client.h',
+ 'dbus/arc_bridge_client.cc',
+ 'dbus/arc_bridge_client.h',
'dbus/audio_dsp_client.cc',
'dbus/audio_dsp_client.h',
'dbus/audio_node.cc',
@@ -118,6 +120,8 @@
'dbus/fake_amplifier_client.h',
'dbus/fake_ap_manager_client.cc',
'dbus/fake_ap_manager_client.h',
+ 'dbus/fake_arc_bridge_client.cc',
+ 'dbus/fake_arc_bridge_client.h',
'dbus/fake_audio_dsp_client.cc',
'dbus/fake_audio_dsp_client.h',
'dbus/fake_bluetooth_adapter_client.cc',
diff --git a/chromeos/dbus/arc_bridge_client.cc b/chromeos/dbus/arc_bridge_client.cc
new file mode 100644
index 0000000..584e10b
--- /dev/null
+++ b/chromeos/dbus/arc_bridge_client.cc
@@ -0,0 +1,77 @@
+// Copyright (c) 2015 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 "chromeos/dbus/arc_bridge_client.h"
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/memory/weak_ptr.h"
+#include "dbus/bus.h"
+#include "dbus/message.h"
+#include "dbus/object_path.h"
+#include "dbus/object_proxy.h"
+
+namespace chromeos {
+
+namespace {
+
+// todo(denniskempin): Move constants to the chromiumos platform
+// service_constants.h
+const char kArcBridgeServicePath[] = "/org/chromium/arc";
+const char kArcBridgeServiceName[] = "org.chromium.arc";
+const char kArcBridgeServiceInterface[] = "org.chromium.arc";
+
+const char kPingMethod[] = "Ping";
+
+void OnVoidDBusMethod(const VoidDBusMethodCallback& callback,
+ dbus::Response* response) {
+ callback.Run(response ? DBUS_METHOD_CALL_SUCCESS : DBUS_METHOD_CALL_FAILURE);
+}
+
+class ArcBridgeClientImpl : public ArcBridgeClient {
+ public:
+ ArcBridgeClientImpl() : proxy_(nullptr), weak_ptr_factory_(this) {}
+
+ ~ArcBridgeClientImpl() override {}
+
+ // Calls Ping method. |callback| is called after the method call succeeds.
+ void Ping(const VoidDBusMethodCallback& callback) override {
+ DCHECK(proxy_);
+
+ dbus::MethodCall method_call(kArcBridgeServiceInterface, kPingMethod);
+ proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+ base::Bind(&OnVoidDBusMethod, callback));
+ }
+
+ protected:
+ void Init(dbus::Bus* bus) override {
+ proxy_ = bus->GetObjectProxy(kArcBridgeServiceName,
+ dbus::ObjectPath(kArcBridgeServicePath));
+ DCHECK(proxy_);
+ }
+
+ private:
+ dbus::ObjectProxy* proxy_;
+
+ // Note: This should remain the last member so it'll be destroyed and
+ // invalidate its weak pointers before any other members are destroyed.
+ base::WeakPtrFactory<ArcBridgeClientImpl> weak_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(ArcBridgeClientImpl);
+};
+
+} // namespace
+
+////////////////////////////////////////////////////////////////////////////////
+// ArcBridgeClient
+
+ArcBridgeClient::ArcBridgeClient() {}
+
+ArcBridgeClient::~ArcBridgeClient() {}
+
+// static
+ArcBridgeClient* ArcBridgeClient::Create() {
+ return new ArcBridgeClientImpl();
+}
+
+} // namespace chromeos
diff --git a/chromeos/dbus/arc_bridge_client.h b/chromeos/dbus/arc_bridge_client.h
new file mode 100644
index 0000000..11d568d
--- /dev/null
+++ b/chromeos/dbus/arc_bridge_client.h
@@ -0,0 +1,41 @@
+// Copyright (c) 2015 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 CHROMEOS_ARC_BRIDGE_CLIENT_H_
+#define CHROMEOS_ARC_BRIDGE_CLIENT_H_
+
+#include "base/basictypes.h"
+#include "chromeos/chromeos_export.h"
+#include "chromeos/dbus/dbus_client.h"
+#include "chromeos/dbus/dbus_method_call_status.h"
+
+namespace dbus {
+class ObjectPath;
+}
+
+namespace chromeos {
+
+// Client for the Arc Bridge Service
+class CHROMEOS_EXPORT ArcBridgeClient : public DBusClient {
+ public:
+ ~ArcBridgeClient() override;
+
+ // Factory function, creates a new instance and returns ownership.
+ // For normal usage, access the singleton via DBusThreadManager::Get().
+ static ArcBridgeClient* Create();
+
+ // Calls Ping method. |callback| is called after the method call succeeds.
+ virtual void Ping(const VoidDBusMethodCallback& callback) = 0;
+
+ protected:
+ // Create() should be used instead.
+ ArcBridgeClient();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ArcBridgeClient);
+};
+
+} // namespace chromeos
+
+#endif // CHROMEOS_ARC_BRIDGE_CLIENT_H_
diff --git a/chromeos/dbus/dbus_client_bundle.cc b/chromeos/dbus/dbus_client_bundle.cc
index 642ffb4..941bec6 100644
--- a/chromeos/dbus/dbus_client_bundle.cc
+++ b/chromeos/dbus/dbus_client_bundle.cc
@@ -12,6 +12,7 @@
#include "chromeos/chromeos_switches.h"
#include "chromeos/dbus/amplifier_client.h"
#include "chromeos/dbus/ap_manager_client.h"
+#include "chromeos/dbus/arc_bridge_client.h"
#include "chromeos/dbus/audio_dsp_client.h"
#include "chromeos/dbus/bluetooth_adapter_client.h"
#include "chromeos/dbus/bluetooth_agent_manager_client.h"
@@ -32,6 +33,7 @@
#include "chromeos/dbus/easy_unlock_client.h"
#include "chromeos/dbus/fake_amplifier_client.h"
#include "chromeos/dbus/fake_ap_manager_client.h"
+#include "chromeos/dbus/fake_arc_bridge_client.h"
#include "chromeos/dbus/fake_audio_dsp_client.h"
#include "chromeos/dbus/fake_bluetooth_adapter_client.h"
#include "chromeos/dbus/fake_bluetooth_agent_manager_client.h"
@@ -107,6 +109,7 @@ const struct {
} client_type_map[] = {
{ "amplifier", DBusClientBundle::AMPLIFIER },
{ "ap", DBusClientBundle::AP_MANAGER },
+ { "arc", DBusClientBundle::ARC_BRIDGE },
{ "audio_dsp", DBusClientBundle::AUDIO_DSP },
{ "bluetooth", DBusClientBundle::BLUETOOTH },
{ "cras", DBusClientBundle::CRAS },
@@ -152,6 +155,11 @@ DBusClientBundle::DBusClientBundle(DBusClientTypeMask unstub_client_mask)
else
amplifier_client_.reset(new FakeAmplifierClient);
+ if (!IsUsingStub(ARC_BRIDGE))
+ arc_bridge_client_.reset(ArcBridgeClient::Create());
+ else
+ arc_bridge_client_.reset(new FakeArcBridgeClient);
+
if (!IsUsingStub(AUDIO_DSP))
audio_dsp_client_.reset(AudioDspClient::Create());
else
diff --git a/chromeos/dbus/dbus_client_bundle.h b/chromeos/dbus/dbus_client_bundle.h
index a9a115b..536eb4d 100644
--- a/chromeos/dbus/dbus_client_bundle.h
+++ b/chromeos/dbus/dbus_client_bundle.h
@@ -14,6 +14,7 @@ namespace chromeos {
class AmplifierClient;
class ApManagerClient;
+class ArcBridgeClient;
class AudioDspClient;
class BluetoothAdapterClient;
class BluetoothAgentManagerClient;
@@ -92,6 +93,7 @@ class CHROMEOS_EXPORT DBusClientBundle {
PRIVET_DAEMON = 1 << 21,
AMPLIFIER = 1 << 22,
AUDIO_DSP = 1 << 23,
+ ARC_BRIDGE = 1 << 24,
};
explicit DBusClientBundle(DBusClientTypeMask unstub_client_mask);
@@ -114,6 +116,8 @@ class CHROMEOS_EXPORT DBusClientBundle {
ApManagerClient* ap_manager_client() { return ap_manager_client_.get(); }
+ ArcBridgeClient* arc_bridge_client() { return arc_bridge_client_.get(); }
+
AudioDspClient* audio_dsp_client() { return audio_dsp_client_.get(); }
BluetoothAdapterClient* bluetooth_adapter_client() {
@@ -290,6 +294,7 @@ class CHROMEOS_EXPORT DBusClientBundle {
scoped_ptr<AmplifierClient> amplifier_client_;
scoped_ptr<ApManagerClient> ap_manager_client_;
+ scoped_ptr<ArcBridgeClient> arc_bridge_client_;
scoped_ptr<AudioDspClient> audio_dsp_client_;
scoped_ptr<BluetoothAdapterClient> bluetooth_adapter_client_;
scoped_ptr<BluetoothLEAdvertisingManagerClient>
diff --git a/chromeos/dbus/dbus_thread_manager.cc b/chromeos/dbus/dbus_thread_manager.cc
index 1addc55..af03c1f 100644
--- a/chromeos/dbus/dbus_thread_manager.cc
+++ b/chromeos/dbus/dbus_thread_manager.cc
@@ -10,6 +10,7 @@
#include "chromeos/chromeos_switches.h"
#include "chromeos/dbus/amplifier_client.h"
#include "chromeos/dbus/ap_manager_client.h"
+#include "chromeos/dbus/arc_bridge_client.h"
#include "chromeos/dbus/audio_dsp_client.h"
#include "chromeos/dbus/bluetooth_adapter_client.h"
#include "chromeos/dbus/bluetooth_agent_manager_client.h"
@@ -119,6 +120,10 @@ AmplifierClient* DBusThreadManager::GetAmplifierClient() {
return client_bundle_->amplifier_client();
}
+ArcBridgeClient* DBusThreadManager::GetArcBridgeClient() {
+ return client_bundle_->arc_bridge_client();
+}
+
ApManagerClient* DBusThreadManager::GetApManagerClient() {
return client_bundle_->ap_manager_client();
}
@@ -307,6 +312,7 @@ UpdateEngineClient* DBusThreadManager::GetUpdateEngineClient() {
void DBusThreadManager::InitializeClients() {
GetAmplifierClient()->Init(GetSystemBus());
GetApManagerClient()->Init(GetSystemBus());
+ GetArcBridgeClient()->Init(GetSystemBus());
GetAudioDspClient()->Init(GetSystemBus());
GetBluetoothAdapterClient()->Init(GetSystemBus());
GetBluetoothAgentManagerClient()->Init(GetSystemBus());
@@ -469,6 +475,11 @@ void DBusThreadManagerSetter::SetAmplifierClient(
DBusThreadManager::Get()->client_bundle_->amplifier_client_ = client.Pass();
}
+void DBusThreadManagerSetter::SetArcBridgeClient(
+ scoped_ptr<ArcBridgeClient> client) {
+ DBusThreadManager::Get()->client_bundle_->arc_bridge_client_ = client.Pass();
+}
+
void DBusThreadManagerSetter::SetAudioDspClient(
scoped_ptr<AudioDspClient> client) {
DBusThreadManager::Get()->client_bundle_->audio_dsp_client_ = client.Pass();
diff --git a/chromeos/dbus/dbus_thread_manager.h b/chromeos/dbus/dbus_thread_manager.h
index 322ab28..b002c9f 100644
--- a/chromeos/dbus/dbus_thread_manager.h
+++ b/chromeos/dbus/dbus_thread_manager.h
@@ -27,6 +27,7 @@ namespace chromeos {
// Style Note: Clients are sorted by names.
class AmplifierClient;
class ApManagerClient;
+class ArcBridgeClient;
class AudioDspClient;
class BluetoothAdapterClient;
class BluetoothLEAdvertisingManagerClient;
@@ -123,6 +124,7 @@ class CHROMEOS_EXPORT DBusThreadManager {
// pointers after DBusThreadManager has been shut down.
AmplifierClient* GetAmplifierClient();
ApManagerClient* GetApManagerClient();
+ ArcBridgeClient* GetArcBridgeClient();
AudioDspClient* GetAudioDspClient();
BluetoothAdapterClient* GetBluetoothAdapterClient();
BluetoothLEAdvertisingManagerClient* GetBluetoothLEAdvertisingManagerClient();
@@ -209,6 +211,7 @@ class CHROMEOS_EXPORT DBusThreadManagerSetter {
~DBusThreadManagerSetter();
void SetAmplifierClient(scoped_ptr<AmplifierClient> client);
+ void SetArcBridgeClient(scoped_ptr<ArcBridgeClient> client);
void SetAudioDspClient(scoped_ptr<AudioDspClient> client);
void SetBluetoothAdapterClient(scoped_ptr<BluetoothAdapterClient> client);
void SetBluetoothLEAdvertisingManagerClient(
diff --git a/chromeos/dbus/fake_arc_bridge_client.cc b/chromeos/dbus/fake_arc_bridge_client.cc
new file mode 100644
index 0000000..d14df0e
--- /dev/null
+++ b/chromeos/dbus/fake_arc_bridge_client.cc
@@ -0,0 +1,36 @@
+// Copyright 2015 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 "chromeos/dbus/fake_arc_bridge_client.h"
+
+#include "base/bind.h"
+#include "base/location.h"
+#include "base/single_thread_task_runner.h"
+#include "base/thread_task_runner_handle.h"
+
+namespace chromeos {
+
+namespace {
+
+void OnVoidDBusMethod(const VoidDBusMethodCallback& callback) {
+ callback.Run(DBUS_METHOD_CALL_SUCCESS);
+}
+
+} // anonymous namespace
+
+FakeArcBridgeClient::FakeArcBridgeClient() {
+}
+
+FakeArcBridgeClient::~FakeArcBridgeClient() {
+}
+
+void FakeArcBridgeClient::Init(dbus::Bus* bus) {
+}
+
+void FakeArcBridgeClient::Ping(const VoidDBusMethodCallback& callback) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::Bind(&OnVoidDBusMethod, callback));
+}
+
+} // namespace chromeos
diff --git a/chromeos/dbus/fake_arc_bridge_client.h b/chromeos/dbus/fake_arc_bridge_client.h
new file mode 100644
index 0000000..eb41b50
--- /dev/null
+++ b/chromeos/dbus/fake_arc_bridge_client.h
@@ -0,0 +1,33 @@
+// Copyright 2015 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 CHROMEOS_FAKE_ARC_BRIDGE_CLIENT_CLIENT_H_
+#define CHROMEOS_FAKE_ARC_BRIDGE_CLIENT_CLIENT_H_
+
+#include "base/basictypes.h"
+#include "chromeos/chromeos_export.h"
+#include "chromeos/dbus/arc_bridge_client.h"
+#include "chromeos/dbus/dbus_client.h"
+
+namespace chromeos {
+
+// A fake implementation of ArcBridgeClient.
+class CHROMEOS_EXPORT FakeArcBridgeClient : public ArcBridgeClient {
+ public:
+ FakeArcBridgeClient();
+ ~FakeArcBridgeClient() override;
+
+ // DBusClient overrides:
+ void Init(dbus::Bus* bus) override;
+
+ // ArcBridgeClient overrides:
+ void Ping(const VoidDBusMethodCallback& callback) override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(FakeArcBridgeClient);
+};
+
+} // namespace chromeos
+
+#endif // CHROMEOS_FAKE_ARC_BRIDGE_CLIENT_CLIENT_H_