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

Side by Side Diff: chromeos/dbus/dbus_thread_manager.h

Issue 477663004: Merged FakedDBusThreadManager with DBusThreadManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROMEOS_DBUS_DBUS_THREAD_MANAGER_H_ 5 #ifndef CHROMEOS_DBUS_DBUS_THREAD_MANAGER_H_
6 #define CHROMEOS_DBUS_DBUS_THREAD_MANAGER_H_ 6 #define CHROMEOS_DBUS_DBUS_THREAD_MANAGER_H_
7 7
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 18 matching lines...) Expand all
29 class BluetoothGattCharacteristicClient; 29 class BluetoothGattCharacteristicClient;
30 class BluetoothGattDescriptorClient; 30 class BluetoothGattDescriptorClient;
31 class BluetoothGattManagerClient; 31 class BluetoothGattManagerClient;
32 class BluetoothGattServiceClient; 32 class BluetoothGattServiceClient;
33 class BluetoothInputClient; 33 class BluetoothInputClient;
34 class BluetoothProfileManagerClient; 34 class BluetoothProfileManagerClient;
35 class CrasAudioClient; 35 class CrasAudioClient;
36 class CrosDisksClient; 36 class CrosDisksClient;
37 class CryptohomeClient; 37 class CryptohomeClient;
38 class DBusClient; 38 class DBusClient;
39 class DBusThreadManagerImpl;
40 class DBusThreadManagerTestHelper;
39 class DebugDaemonClient; 41 class DebugDaemonClient;
40 class EasyUnlockClient; 42 class EasyUnlockClient;
41 class GsmSMSClient; 43 class GsmSMSClient;
42 class ImageBurnerClient; 44 class ImageBurnerClient;
43 class IntrospectableClient; 45 class IntrospectableClient;
44 class LorgnetteManagerClient; 46 class LorgnetteManagerClient;
45 class ModemMessagingClient; 47 class ModemMessagingClient;
46 class NfcAdapterClient; 48 class NfcAdapterClient;
47 class NfcDeviceClient; 49 class NfcDeviceClient;
48 class NfcManagerClient; 50 class NfcManagerClient;
49 class NfcRecordClient; 51 class NfcRecordClient;
50 class NfcTagClient; 52 class NfcTagClient;
51 class PermissionBrokerClient; 53 class PermissionBrokerClient;
52 class PowerManagerClient; 54 class PowerManagerClient;
53 class PowerPolicyController; 55 class PowerPolicyController;
54 class SessionManagerClient; 56 class SessionManagerClient;
55 class ShillDeviceClient; 57 class ShillDeviceClient;
56 class ShillIPConfigClient; 58 class ShillIPConfigClient;
57 class ShillManagerClient; 59 class ShillManagerClient;
58 class ShillProfileClient; 60 class ShillProfileClient;
59 class ShillServiceClient; 61 class ShillServiceClient;
60 class SMSClient; 62 class SMSClient;
61 class SystemClockClient; 63 class SystemClockClient;
62 class UpdateEngineClient; 64 class UpdateEngineClient;
hashimoto 2014/08/18 04:55:58 nit: Please keep a blank line here.
zel 2014/08/18 23:41:52 Done.
63
64 // DBusThreadManager manages the D-Bus thread, the thread dedicated to 65 // DBusThreadManager manages the D-Bus thread, the thread dedicated to
65 // handling asynchronous D-Bus operations. 66 // handling asynchronous D-Bus operations.
66 // 67 //
67 // This class also manages D-Bus connections and D-Bus clients, which 68 // This class also manages D-Bus connections and D-Bus clients, which
68 // depend on the D-Bus thread to ensure the right order of shutdowns for 69 // depend on the D-Bus thread to ensure the right order of shutdowns for
69 // the D-Bus thread, the D-Bus connections, and the D-Bus clients. 70 // the D-Bus thread, the D-Bus connections, and the D-Bus clients.
70 // 71 //
71 // CALLBACKS IN D-BUS CLIENTS: 72 // CALLBACKS IN D-BUS CLIENTS:
72 // 73 //
73 // D-Bus clients managed by DBusThreadManager are guaranteed to be deleted 74 // D-Bus clients managed by DBusThreadManager are guaranteed to be deleted
74 // after the D-Bus thread so the clients don't need to worry if new 75 // after the D-Bus thread so the clients don't need to worry if new
75 // incoming messages arrive from the D-Bus thread during shutdown of the 76 // incoming messages arrive from the D-Bus thread during shutdown of the
76 // clients. The UI message loop is not running during the shutdown hence 77 // clients. The UI message loop is not running during the shutdown hence
77 // the UI message loop won't post tasks to D-BUS clients during the 78 // the UI message loop won't post tasks to D-BUS clients during the
78 // shutdown. However, to be extra cautious, clients should use 79 // shutdown. However, to be extra cautious, clients should use
79 // WeakPtrFactory when creating callbacks that run on UI thread. See 80 // WeakPtrFactory when creating callbacks that run on UI thread. See
80 // session_manager_client.cc for examples. 81 // session_manager_client.cc for examples.
81 // 82 //
82 class CHROMEOS_EXPORT DBusThreadManager { 83 class CHROMEOS_EXPORT DBusThreadManager {
83 public: 84 public:
84 // Sets the global instance. Must be called before any calls to Get(). 85 // Sets the global instance. Must be called before any calls to Get().
85 // We explicitly initialize and shut down the global object, rather than 86 // We explicitly initialize and shut down the global object, rather than
86 // making it a Singleton, to ensure clean startup and shutdown. 87 // making it a Singleton, to ensure clean startup and shutdown.
87 static void Initialize(); 88 static void Initialize();
88 89
89 // Sets an alternative DBusThreadManager such as MockDBusThreadManager
90 // to be used in |Initialize()| for testing. Tests that call
91 // DBusThreadManager::Initialize() (such as browser_tests and
92 // interactive_ui_tests) should use this instead of calling
93 // |InitiailzeForTesting|. The injected object will be owned by the
94 // internal pointer and deleted by Shutdown().
95 static void SetInstanceForTesting(DBusThreadManager* dbus_thread_manager);
96
97 // Similar to Initialize(), but injects an alternative
98 // DBusThreadManager using SetInstanceForTest first. The injected
99 // object will be owned by the internal pointer and deleted by
100 // Shutdown(). Does not create any Fake client implementations.
101 static void InitializeForTesting(DBusThreadManager* dbus_thread_manager);
102
103 // Initialize with stub implementations for tests, creating a complete set 90 // Initialize with stub implementations for tests, creating a complete set
104 // of fake/stub client implementations. Also initializes a default set of 91 // of fake/stub client implementations. Also initializes a default set of
105 // fake Shill devices and services, customizable with switches::kShillStub. 92 // fake Shill devices and services, customizable with switches::kShillStub.
106 static void InitializeWithStub(); 93 static void InitializeWithStub();
107 94
95 // Similar to Initialize(), but configures DBusThreadManager to use stub/fake
96 // clients.
97 static scoped_ptr<DBusThreadManagerTestHelper> InitializeForTesting();
hashimoto 2014/08/18 04:55:58 Can't we delete one of InitializeWithStub() or Ini
zel 2014/08/18 23:41:52 InitilizeForTesting() still does one trick for us
hashimoto 2014/08/19 02:31:58 Adding setters should be harmless as long as DBusC
zel 2014/08/19 04:44:39 What harm are you talking about here? What you are
hashimoto 2014/08/19 05:11:59 The effect on the binary size (i.e. compiled&linke
zel 2014/08/22 22:24:18 Yeah, you are right about the runtime size I forgo
hashimoto 2014/08/25 06:56:19 You can make it clear by naming the bundle getter
zel 2014/08/25 17:21:41 I have picked better class/method names now, it's:
98
108 // Returns true if DBusThreadManager has been initialized. Call this to 99 // Returns true if DBusThreadManager has been initialized. Call this to
109 // avoid initializing + shutting down DBusThreadManager more than once. 100 // avoid initializing + shutting down DBusThreadManager more than once.
110 static bool IsInitialized(); 101 static bool IsInitialized();
111 102
112 // Destroys the global instance. 103 // Destroys the global instance.
113 static void Shutdown(); 104 static void Shutdown();
114 105
115 // Gets the global instance. Initialize() must be called first. 106 // Gets the global instance. Initialize() must be called first.
116 static DBusThreadManager* Get(); 107 static DBusThreadManager* Get();
117 108
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 DBusThreadManager(); 158 DBusThreadManager();
168 159
169 private: 160 private:
170 // Initialize global thread manager instance. 161 // Initialize global thread manager instance.
171 static void InitializeRegular(); 162 static void InitializeRegular();
172 163
173 // Initialize with stub implementations for only certain clients that are 164 // Initialize with stub implementations for only certain clients that are
174 // not included in comma-separated |unstub_clients| list. 165 // not included in comma-separated |unstub_clients| list.
175 static void InitializeWithPartialStub(const std::string& unstub_clients); 166 static void InitializeWithPartialStub(const std::string& unstub_clients);
176 167
177 // InitializeClients is called after g_dbus_thread_manager is set.
178 // NOTE: Clients that access other clients in their Init() must be
179 // initialized in the correct order.
180 static void InitializeClients();
181
182 // Initializes |client| with the |system_bus_|.
183 static void InitClient(DBusClient* client);
184
185 // Bitmask that defines which dbus clients are not stubbed out. Bitmap flags 168 // Bitmask that defines which dbus clients are not stubbed out. Bitmap flags
186 // are defined within DBusClientBundle::DBusClientType enum. 169 // are defined within DBusClientBundle::DBusClientType enum.
187 static DBusClientBundle::DBusClientTypeMask unstub_client_mask_; 170 static DBusClientBundle::DBusClientTypeMask unstub_client_mask_;
188 171
189 DISALLOW_COPY_AND_ASSIGN(DBusThreadManager); 172 DISALLOW_COPY_AND_ASSIGN(DBusThreadManager);
190 }; 173 };
191 174
175 class CHROMEOS_EXPORT DBusThreadManagerTestHelper {
176 public:
177 explicit DBusThreadManagerTestHelper(
178 DBusThreadManagerImpl* dbus_thread_manager);
179 ~DBusThreadManagerTestHelper();
180
181 void SetBluetoothAdapterClient(scoped_ptr<BluetoothAdapterClient> client);
182 void SetBluetoothAgentManagerClient(
183 scoped_ptr<BluetoothAgentManagerClient> client);
184 void SetBluetoothDeviceClient(scoped_ptr<BluetoothDeviceClient> client);
185 void SetBluetoothGattCharacteristicClient(
186 scoped_ptr<BluetoothGattCharacteristicClient> client);
187 void SetBluetoothGattDescriptorClient(
188 scoped_ptr<BluetoothGattDescriptorClient> client);
189 void SetBluetoothGattManagerClient(
190 scoped_ptr<BluetoothGattManagerClient> client);
191 void SetBluetoothGattServiceClient(
192 scoped_ptr<BluetoothGattServiceClient> client);
193 void SetBluetoothInputClient(scoped_ptr<BluetoothInputClient> client);
194 void SetBluetoothProfileManagerClient(
195 scoped_ptr<BluetoothProfileManagerClient> client);
196 void SetCrasAudioClient(scoped_ptr<CrasAudioClient> client);
197 void SetCrosDisksClient(scoped_ptr<CrosDisksClient> client);
198 void SetCryptohomeClient(scoped_ptr<CryptohomeClient> client);
199 void SetDebugDaemonClient(scoped_ptr<DebugDaemonClient> client);
200 void SetEasyUnlockClient(scoped_ptr<EasyUnlockClient> client);
201 void SetLorgnetteManagerClient(scoped_ptr<LorgnetteManagerClient> client);
202 void SetShillDeviceClient(scoped_ptr<ShillDeviceClient> client);
203 void SetShillIPConfigClient(scoped_ptr<ShillIPConfigClient> client);
204 void SetShillManagerClient(scoped_ptr<ShillManagerClient> client);
205 void SetShillServiceClient(scoped_ptr<ShillServiceClient> client);
206 void SetShillProfileClient(scoped_ptr<ShillProfileClient> client);
207 void SetGsmSMSClient(scoped_ptr<GsmSMSClient> client);
208 void SetImageBurnerClient(scoped_ptr<ImageBurnerClient> client);
209 void SetIntrospectableClient(scoped_ptr<IntrospectableClient> client);
210 void SetModemMessagingClient(scoped_ptr<ModemMessagingClient> client);
211 void SetNfcAdapterClient(scoped_ptr<NfcAdapterClient> client);
212 void SetNfcDeviceClient(scoped_ptr<NfcDeviceClient> client);
213 void SetNfcManagerClient(scoped_ptr<NfcManagerClient> client);
214 void SetNfcRecordClient(scoped_ptr<NfcRecordClient> client);
215 void SetNfcTagClient(scoped_ptr<NfcTagClient> client);
216 void SetPermissionBrokerClient(scoped_ptr<PermissionBrokerClient> client);
217 void SetPowerManagerClient(scoped_ptr<PowerManagerClient> client);
218 void SetPowerPolicyController(scoped_ptr<PowerPolicyController> client);
219 void SetSessionManagerClient(scoped_ptr<SessionManagerClient> client);
220 void SetSMSClient(scoped_ptr<SMSClient> client);
221 void SetSystemClockClient(scoped_ptr<SystemClockClient> client);
222 void SetUpdateEngineClient(scoped_ptr<UpdateEngineClient> client);
223
224 private:
225 DBusThreadManagerImpl* dbus_thread_manager_;
226 DISALLOW_COPY_AND_ASSIGN(DBusThreadManagerTestHelper);
227 };
228
192 } // namespace chromeos 229 } // namespace chromeos
193 230
194 #endif // CHROMEOS_DBUS_DBUS_THREAD_MANAGER_H_ 231 #endif // CHROMEOS_DBUS_DBUS_THREAD_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698