diff options
author | denniskempin <denniskempin@google.com> | 2015-10-14 13:56:15 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-14 20:56:59 +0000 |
commit | 558f7757754f4dd120b18f440080bc00db838fa6 (patch) | |
tree | 438f01d3c64c03f6ab8c1e39e591ba332ef46782 | |
parent | 2830e9f138e5f2bb86a28ed02aee81f6780122eb (diff) | |
download | chromium_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.gyp | 4 | ||||
-rw-r--r-- | chromeos/dbus/arc_bridge_client.cc | 77 | ||||
-rw-r--r-- | chromeos/dbus/arc_bridge_client.h | 41 | ||||
-rw-r--r-- | chromeos/dbus/dbus_client_bundle.cc | 8 | ||||
-rw-r--r-- | chromeos/dbus/dbus_client_bundle.h | 5 | ||||
-rw-r--r-- | chromeos/dbus/dbus_thread_manager.cc | 11 | ||||
-rw-r--r-- | chromeos/dbus/dbus_thread_manager.h | 3 | ||||
-rw-r--r-- | chromeos/dbus/fake_arc_bridge_client.cc | 36 | ||||
-rw-r--r-- | chromeos/dbus/fake_arc_bridge_client.h | 33 |
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_ |