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

Side by Side Diff: device/bluetooth/dbus/bluez_dbus_manager.h

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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef DEVICE_BLUETOOTH_DBUS_BLUEZ_DBUS_MANAGER_H_
6 #define DEVICE_BLUETOOTH_DBUS_BLUEZ_DBUS_MANAGER_H_
7
8 #include <string>
9
10 #include "base/callback.h"
11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "chromeos/chromeos_export.h"
stevenjb 2015/09/17 21:48:01 Use DEVICE_BLUETOOTH_EXPORT
rkc 2015/09/21 18:54:23 Done.
14 #include "device/bluetooth/dbus/bluetooth_dbus_client_bundle.h"
15
16 namespace base {
17 class Thread;
18 } // namespace base
19
20 namespace dbus {
21 class Bus;
22 class ObjectPath;
23 } // namespace dbus
24
25 namespace bluez {
26
27 // Style Note: Clients are sorted by names.
28 class BluetoothAdapterClient;
29 class BluetoothAgentManagerClient;
30 class BluetoothDeviceClient;
31 class BluetoothGattCharacteristicClient;
32 class BluetoothGattDescriptorClient;
33 class BluetoothGattManagerClient;
34 class BluetoothGattServiceClient;
35 class BluetoothInputClient;
36 class BluetoothLEAdvertisingManagerClient;
37 class BluetoothMediaClient;
38 class BluetoothMediaTransportClient;
39 class BluetoothProfileManagerClient;
40 class BluezDBusManagerSetter;
41
42 // BluezDBusManagerSetter manages the D-Bus thread, the thread dedicated to
43 // handling asynchronous D-Bus operations.
44 //
45 // This class also manages D-Bus connections and D-Bus clients, which
46 // depend on the D-Bus thread to ensure the right order of shutdowns for
47 // the D-Bus thread, the D-Bus connections, and the D-Bus clients.
48 //
49 // CALLBACKS IN D-BUS CLIENTS:
50 //
51 // D-Bus clients managed by BluezDBusManagerSetter are guaranteed to be deleted
52 // after the D-Bus thread so the clients don't need to worry if new
53 // incoming messages arrive from the D-Bus thread during shutdown of the
54 // clients. The UI message loop is not running during the shutdown hence
55 // the UI message loop won't post tasks to D-BUS clients during the
56 // shutdown. However, to be extra cautious, clients should use
57 // WeakPtrFactory when creating callbacks that run on UI thread. See
58 // session_manager_client.cc for examples.
59 //
60 class CHROMEOS_EXPORT BluezDBusManager {
61 public:
62 // Sets the global instance. Must be called before any calls to Get().
63 // We explicitly initialize and shut down the global object, rather than
64 // making it a Singleton, to ensure clean startup and shutdown.
65 // This will initialize real or stub DBusClients depending on command-line
66 // arguments and whether this process runs in a ChromeOS environment.
67 static void Initialize();
68
69 // Returns a DBusThreadManagerSetter instance that allows tests to
70 // replace individual D-Bus clients with their own implementations.
71 // Also initializes the main BluezDBusManager for testing if necessary.
72 static scoped_ptr<BluezDBusManagerSetter> GetSetterForTesting();
73
74 // Returns true if BluezDBusManager has been initialized. Call this to
75 // avoid initializing + shutting down BluezDBusManager more than once.
76 static bool IsInitialized();
77
78 // Destroys the global instance.
79 static void Shutdown();
80
81 // Gets the global instance. Initialize() must be called first.
82 static BluezDBusManager* Get();
83
84 // Returns true if |client| is stubbed.
85 bool IsUsingStub() { return client_bundle_->IsUsingStub(); }
86
87 // Returns various D-Bus bus instances, owned by BluezDBusManager.
88 dbus::Bus* GetSystemBus();
89
90 // All returned objects are owned by BluezDBusManager. Do not use these
91 // pointers after BluezDBusManager has been shut down.
92 BluetoothAdapterClient* GetBluetoothAdapterClient();
93 BluetoothLEAdvertisingManagerClient* GetBluetoothLEAdvertisingManagerClient();
94 BluetoothAgentManagerClient* GetBluetoothAgentManagerClient();
95 BluetoothDeviceClient* GetBluetoothDeviceClient();
96 BluetoothGattCharacteristicClient* GetBluetoothGattCharacteristicClient();
97 BluetoothGattDescriptorClient* GetBluetoothGattDescriptorClient();
98 BluetoothGattManagerClient* GetBluetoothGattManagerClient();
99 BluetoothGattServiceClient* GetBluetoothGattServiceClient();
100 BluetoothInputClient* GetBluetoothInputClient();
101 BluetoothMediaClient* GetBluetoothMediaClient();
102 BluetoothMediaTransportClient* GetBluetoothMediaTransportClient();
103 BluetoothProfileManagerClient* GetBluetoothProfileManagerClient();
104
105 private:
106 friend class BluezDBusManagerSetter;
107
108 // Creates a new BluezDBusManager using the DBusClients set in
109 // |client_bundle|.
110 explicit BluezDBusManager(
111 scoped_ptr<BluetoothDBusClientBundle> client_bundle);
112 ~BluezDBusManager();
113
114 // Creates a global instance of BluezDBusManager with the real
115 // implementations for all clients that are listed in |unstub_client_mask| and
116 // stub implementations for all clients that are not included. Cannot be
117 // called more than once.
118 static void CreateGlobalInstance(bool use_stubs);
119
120 // Initialize global thread manager instance with all real dbus client
121 // implementations.
122 static void InitializeWithRealClients();
123
124 // Initialize global thread manager instance with stubbed-out dbus clients
125 // implementation.
126 static void InitializeWithStubs();
127
128 // Initialize with stub implementations for only certain clients that are
129 // not included in the comma-separated |unstub_clients| list.
130 static void InitializeWithPartialStub(const std::string& unstub_clients);
131
132 // Initializes all currently stored DBusClients with the system bus and
133 // performs additional setup.
134 void InitializeClients();
135
136 scoped_ptr<BluetoothDBusClientBundle> client_bundle_;
137
138 DISALLOW_COPY_AND_ASSIGN(BluezDBusManager);
139 };
140
141 class CHROMEOS_EXPORT BluezDBusManagerSetter {
142 public:
143 ~BluezDBusManagerSetter();
144
145 void SetBluetoothAdapterClient(scoped_ptr<BluetoothAdapterClient> client);
146 void SetBluetoothLEAdvertisingManagerClient(
147 scoped_ptr<BluetoothLEAdvertisingManagerClient> client);
148 void SetBluetoothAgentManagerClient(
149 scoped_ptr<BluetoothAgentManagerClient> client);
150 void SetBluetoothDeviceClient(scoped_ptr<BluetoothDeviceClient> client);
151 void SetBluetoothGattCharacteristicClient(
152 scoped_ptr<BluetoothGattCharacteristicClient> client);
153 void SetBluetoothGattDescriptorClient(
154 scoped_ptr<BluetoothGattDescriptorClient> client);
155 void SetBluetoothGattManagerClient(
156 scoped_ptr<BluetoothGattManagerClient> client);
157 void SetBluetoothGattServiceClient(
158 scoped_ptr<BluetoothGattServiceClient> client);
159 void SetBluetoothInputClient(scoped_ptr<BluetoothInputClient> client);
160 void SetBluetoothMediaClient(scoped_ptr<BluetoothMediaClient> client);
161 void SetBluetoothMediaTransportClient(
162 scoped_ptr<BluetoothMediaTransportClient> client);
163 void SetBluetoothProfileManagerClient(
164 scoped_ptr<BluetoothProfileManagerClient> client);
165
166 private:
167 friend class BluezDBusManager;
168
169 BluezDBusManagerSetter();
170
171 DISALLOW_COPY_AND_ASSIGN(BluezDBusManagerSetter);
172 };
173
174 } // namespace bluez
175
176 #endif // DEVICE_BLUETOOTH_DBUS_BLUEZ_DBUS_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698