Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(281)

Unified Diff: device/bluetooth/dbus/bluez_dbus_manager.cc

Issue 1347193004: Refactor DBusThreadManager to split away BT clients. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « device/bluetooth/dbus/bluez_dbus_manager.h ('k') | device/bluetooth/dbus/fake_bluetooth_adapter_client.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: device/bluetooth/dbus/bluez_dbus_manager.cc
diff --git a/device/bluetooth/dbus/bluez_dbus_manager.cc b/device/bluetooth/dbus/bluez_dbus_manager.cc
new file mode 100644
index 0000000000000000000000000000000000000000..376261d9dbcf33e7cfc2d1a68d56f9af27c1250f
--- /dev/null
+++ b/device/bluetooth/dbus/bluez_dbus_manager.cc
@@ -0,0 +1,250 @@
+// Copyright (c) 2012 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/bluetooth/dbus/bluez_dbus_manager.h"
+
+#include "base/command_line.h"
+#include "base/sys_info.h"
+#include "base/threading/thread.h"
+#include "dbus/bus.h"
+#include "dbus/dbus_statistics.h"
+#include "device/bluetooth/dbus/bluetooth_adapter_client.h"
+#include "device/bluetooth/dbus/bluetooth_agent_manager_client.h"
+#include "device/bluetooth/dbus/bluetooth_device_client.h"
+#include "device/bluetooth/dbus/bluetooth_gatt_characteristic_client.h"
+#include "device/bluetooth/dbus/bluetooth_gatt_descriptor_client.h"
+#include "device/bluetooth/dbus/bluetooth_gatt_manager_client.h"
+#include "device/bluetooth/dbus/bluetooth_gatt_service_client.h"
+#include "device/bluetooth/dbus/bluetooth_input_client.h"
+#include "device/bluetooth/dbus/bluetooth_le_advertising_manager_client.h"
+#include "device/bluetooth/dbus/bluetooth_media_client.h"
+#include "device/bluetooth/dbus/bluetooth_media_transport_client.h"
+#include "device/bluetooth/dbus/bluetooth_profile_manager_client.h"
+
+namespace bluez {
+
+static BluezDBusManager* g_bluez_dbus_manager = nullptr;
+static bool g_using_bluez_dbus_manager_for_testing = false;
+
+BluezDBusManager::BluezDBusManager(
+ dbus::Bus* bus,
+ scoped_ptr<BluetoothDBusClientBundle> client_bundle)
+ : bus_(bus), client_bundle_(client_bundle.Pass()) {}
+
+BluezDBusManager::~BluezDBusManager() {
+ // Delete all D-Bus clients before shutting down the system bus.
+ client_bundle_.reset();
+}
+
+dbus::Bus* bluez::BluezDBusManager::GetSystemBus() {
+ return bus_;
+}
+
+BluetoothAdapterClient* bluez::BluezDBusManager::GetBluetoothAdapterClient() {
+ return client_bundle_->bluetooth_adapter_client();
+}
+
+BluetoothLEAdvertisingManagerClient*
+bluez::BluezDBusManager::GetBluetoothLEAdvertisingManagerClient() {
+ return client_bundle_->bluetooth_le_advertising_manager_client();
+}
+
+BluetoothAgentManagerClient*
+bluez::BluezDBusManager::GetBluetoothAgentManagerClient() {
+ return client_bundle_->bluetooth_agent_manager_client();
+}
+
+BluetoothDeviceClient* bluez::BluezDBusManager::GetBluetoothDeviceClient() {
+ return client_bundle_->bluetooth_device_client();
+}
+
+BluetoothGattCharacteristicClient*
+bluez::BluezDBusManager::GetBluetoothGattCharacteristicClient() {
+ return client_bundle_->bluetooth_gatt_characteristic_client();
+}
+
+BluetoothGattDescriptorClient*
+bluez::BluezDBusManager::GetBluetoothGattDescriptorClient() {
+ return client_bundle_->bluetooth_gatt_descriptor_client();
+}
+
+BluetoothGattManagerClient*
+bluez::BluezDBusManager::GetBluetoothGattManagerClient() {
+ return client_bundle_->bluetooth_gatt_manager_client();
+}
+
+BluetoothGattServiceClient*
+bluez::BluezDBusManager::GetBluetoothGattServiceClient() {
+ return client_bundle_->bluetooth_gatt_service_client();
+}
+
+BluetoothInputClient* bluez::BluezDBusManager::GetBluetoothInputClient() {
+ return client_bundle_->bluetooth_input_client();
+}
+
+BluetoothMediaClient* bluez::BluezDBusManager::GetBluetoothMediaClient() {
+ return client_bundle_->bluetooth_media_client();
+}
+
+BluetoothMediaTransportClient*
+bluez::BluezDBusManager::GetBluetoothMediaTransportClient() {
+ return client_bundle_->bluetooth_media_transport_client();
+}
+
+BluetoothProfileManagerClient*
+bluez::BluezDBusManager::GetBluetoothProfileManagerClient() {
+ return client_bundle_->bluetooth_profile_manager_client();
+}
+
+void BluezDBusManager::InitializeClients() {
+ GetBluetoothAdapterClient()->Init(GetSystemBus());
+ GetBluetoothAgentManagerClient()->Init(GetSystemBus());
+ GetBluetoothDeviceClient()->Init(GetSystemBus());
+ GetBluetoothGattCharacteristicClient()->Init(GetSystemBus());
+ GetBluetoothGattDescriptorClient()->Init(GetSystemBus());
+ GetBluetoothGattManagerClient()->Init(GetSystemBus());
+ GetBluetoothGattServiceClient()->Init(GetSystemBus());
+ GetBluetoothInputClient()->Init(GetSystemBus());
+ GetBluetoothLEAdvertisingManagerClient()->Init(GetSystemBus());
+ GetBluetoothMediaClient()->Init(GetSystemBus());
+ GetBluetoothMediaTransportClient()->Init(GetSystemBus());
+ GetBluetoothProfileManagerClient()->Init(GetSystemBus());
+
+ // This must be called after the list of clients so they've each had a
+ // chance to register with their object g_dbus_thread_managers.
+ if (GetSystemBus())
+ GetSystemBus()->GetManagedObjects();
+}
+
+// static
+void BluezDBusManager::Initialize(dbus::Bus* bus, bool use_dbus_stub) {
+ // If we initialize BluezDBusManager twice we may also be shutting it down
+ // early; do not allow that.
+ if (g_using_bluez_dbus_manager_for_testing)
+ return;
+
+ CHECK(!g_bluez_dbus_manager);
+ CreateGlobalInstance(bus, use_dbus_stub);
+}
+
+// static
+scoped_ptr<BluezDBusManagerSetter>
+bluez::BluezDBusManager::GetSetterForTesting() {
+ if (!g_using_bluez_dbus_manager_for_testing) {
+ g_using_bluez_dbus_manager_for_testing = true;
+ CreateGlobalInstance(nullptr, true);
+ }
+
+ return make_scoped_ptr(new BluezDBusManagerSetter());
+}
+
+// static
+void BluezDBusManager::CreateGlobalInstance(dbus::Bus* bus, bool use_stubs) {
+ CHECK(!g_bluez_dbus_manager);
+ g_bluez_dbus_manager = new BluezDBusManager(
+ bus, make_scoped_ptr(new BluetoothDBusClientBundle(use_stubs)));
+ g_bluez_dbus_manager->InitializeClients();
+}
+
+// static
+bool BluezDBusManager::IsInitialized() {
+ return g_bluez_dbus_manager != nullptr;
+}
+
+// static
+void BluezDBusManager::Shutdown() {
+ // Ensure that we only shutdown BluezDBusManager once.
+ CHECK(g_bluez_dbus_manager);
+ BluezDBusManager* dbus_manager = g_bluez_dbus_manager;
+ g_bluez_dbus_manager = nullptr;
+ g_using_bluez_dbus_manager_for_testing = false;
+ delete dbus_manager;
+ VLOG(1) << "BluezDBusManager Shutdown completed";
+}
+
+// static
+BluezDBusManager* bluez::BluezDBusManager::Get() {
+ CHECK(g_bluez_dbus_manager)
+ << "bluez::BluezDBusManager::Get() called before Initialize()";
+ return g_bluez_dbus_manager;
+}
+
+BluezDBusManagerSetter::BluezDBusManagerSetter() {}
+
+BluezDBusManagerSetter::~BluezDBusManagerSetter() {}
+
+void BluezDBusManagerSetter::SetBluetoothAdapterClient(
+ scoped_ptr<BluetoothAdapterClient> client) {
+ bluez::BluezDBusManager::Get()->client_bundle_->bluetooth_adapter_client_ =
+ client.Pass();
+}
+
+void BluezDBusManagerSetter::SetBluetoothLEAdvertisingManagerClient(
+ scoped_ptr<BluetoothLEAdvertisingManagerClient> client) {
+ bluez::BluezDBusManager::Get()
+ ->client_bundle_->bluetooth_le_advertising_manager_client_ =
+ client.Pass();
+}
+
+void BluezDBusManagerSetter::SetBluetoothAgentManagerClient(
+ scoped_ptr<BluetoothAgentManagerClient> client) {
+ bluez::BluezDBusManager::Get()
+ ->client_bundle_->bluetooth_agent_manager_client_ = client.Pass();
+}
+
+void BluezDBusManagerSetter::SetBluetoothDeviceClient(
+ scoped_ptr<BluetoothDeviceClient> client) {
+ bluez::BluezDBusManager::Get()->client_bundle_->bluetooth_device_client_ =
+ client.Pass();
+}
+
+void BluezDBusManagerSetter::SetBluetoothGattCharacteristicClient(
+ scoped_ptr<BluetoothGattCharacteristicClient> client) {
+ bluez::BluezDBusManager::Get()
+ ->client_bundle_->bluetooth_gatt_characteristic_client_ = client.Pass();
+}
+
+void BluezDBusManagerSetter::SetBluetoothGattDescriptorClient(
+ scoped_ptr<BluetoothGattDescriptorClient> client) {
+ bluez::BluezDBusManager::Get()
+ ->client_bundle_->bluetooth_gatt_descriptor_client_ = client.Pass();
+}
+
+void BluezDBusManagerSetter::SetBluetoothGattManagerClient(
+ scoped_ptr<BluetoothGattManagerClient> client) {
+ bluez::BluezDBusManager::Get()
+ ->client_bundle_->bluetooth_gatt_manager_client_ = client.Pass();
+}
+
+void BluezDBusManagerSetter::SetBluetoothGattServiceClient(
+ scoped_ptr<BluetoothGattServiceClient> client) {
+ bluez::BluezDBusManager::Get()
+ ->client_bundle_->bluetooth_gatt_service_client_ = client.Pass();
+}
+
+void BluezDBusManagerSetter::SetBluetoothInputClient(
+ scoped_ptr<BluetoothInputClient> client) {
+ bluez::BluezDBusManager::Get()->client_bundle_->bluetooth_input_client_ =
+ client.Pass();
+}
+
+void BluezDBusManagerSetter::SetBluetoothMediaClient(
+ scoped_ptr<BluetoothMediaClient> client) {
+ bluez::BluezDBusManager::Get()->client_bundle_->bluetooth_media_client_ =
+ client.Pass();
+}
+
+void BluezDBusManagerSetter::SetBluetoothMediaTransportClient(
+ scoped_ptr<BluetoothMediaTransportClient> client) {
+ bluez::BluezDBusManager::Get()
+ ->client_bundle_->bluetooth_media_transport_client_ = client.Pass();
+}
+
+void BluezDBusManagerSetter::SetBluetoothProfileManagerClient(
+ scoped_ptr<BluetoothProfileManagerClient> client) {
+ bluez::BluezDBusManager::Get()
+ ->client_bundle_->bluetooth_profile_manager_client_ = client.Pass();
+}
+
+} // namespace bluez
« no previous file with comments | « device/bluetooth/dbus/bluez_dbus_manager.h ('k') | device/bluetooth/dbus/fake_bluetooth_adapter_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698