• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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 CHROMEOS_DBUS_DBUS_CLIENT_BUNDLE_H_
6 #define CHROMEOS_DBUS_DBUS_CLIENT_BUNDLE_H_
7 
8 #include "base/memory/scoped_ptr.h"
9 #include "chromeos/chromeos_export.h"
10 
11 namespace chromeos {
12 
13 class BluetoothAdapterClient;
14 class BluetoothAgentManagerClient;
15 class BluetoothDeviceClient;
16 class BluetoothGattCharacteristicClient;
17 class BluetoothGattDescriptorClient;
18 class BluetoothGattManagerClient;
19 class BluetoothGattServiceClient;
20 class BluetoothInputClient;
21 class BluetoothProfileManagerClient;
22 class CrasAudioClient;
23 class CrosDisksClient;
24 class CryptohomeClient;
25 class DebugDaemonClient;
26 class EasyUnlockClient;
27 class LorgnetteManagerClient;
28 class ShillDeviceClient;
29 class ShillIPConfigClient;
30 class ShillManagerClient;
31 class ShillServiceClient;
32 class ShillProfileClient;
33 class GsmSMSClient;
34 class ImageBurnerClient;
35 class IntrospectableClient;
36 class ModemMessagingClient;
37 class NfcManagerClient;
38 class NfcAdapterClient;
39 class NfcDeviceClient;
40 class NfcTagClient;
41 class NfcRecordClient;
42 class PermissionBrokerClient;
43 class SystemClockClient;
44 class PowerManagerClient;
45 class SessionManagerClient;
46 class SMSClient;
47 class UpdateEngineClient;
48 
49 // The bundle of all D-Bus clients used in DBusThreadManagerImpl. The bundle
50 // is used to delete them at once in the right order before shutting down the
51 // system bus. See also the comment in the destructor of DBusThreadManagerImpl.
52 class CHROMEOS_EXPORT DBusClientBundle {
53  public:
54   typedef int DBusClientTypeMask;
55 
56   // TODO(zelidrag): We might want to collapse few more of these subsystems if
57   // their dbus interfaced correspond to the same daemon.
58   enum DBusClientType {
59     NO_CLIENT =            0,
60     BLUETOOTH  =           1 << 0,
61     CRAS =                 1 << 1,
62     CROS_DISKS =           1 << 2,
63     CRYPTOHOME =           1 << 3,
64     DEBUG_DAEMON =         1 << 4,
65     EASY_UNLOCK =          1 << 5,
66     LORGNETTE_MANAGER =    1 << 6,
67     SHILL =                1 << 7,
68     GSM_SMS =              1 << 8,
69     IMAGE_BURNER =         1 << 9,
70     INTROSPECTABLE =       1 << 10,
71     MODEM_MESSAGING =      1 << 11,
72     NFC =                  1 << 12,
73     PERMISSION_BROKER =    1 << 13,
74     POWER_MANAGER =        1 << 14,
75     SESSION_MANAGER =      1 << 15,
76     SMS =                  1 << 16,
77     SYSTEM_CLOCK =         1 << 17,
78     UPDATE_ENGINE =        1 << 18,
79   };
80 
81   DBusClientBundle(DBusClientTypeMask unstub_client_mask);
82   ~DBusClientBundle();
83 
84   // Returns true if |client| is stubbed.
85   bool IsUsingStub(DBusClientType client);
86 
87   // Returns true if any real DBusClient is used.
88   bool IsUsingAnyRealClient();
89 
90   // Initialize proper runtime environment for its dbus clients.
91   void SetupDefaultEnvironment();
92 
93   // Parses command line param values for dbus subsystem that should be
94   // un-stubbed.
95   static DBusClientTypeMask ParseUnstubList(const std::string& unstub_list);
96 
bluetooth_adapter_client()97   BluetoothAdapterClient* bluetooth_adapter_client() {
98     return bluetooth_adapter_client_.get();
99   }
100 
bluetooth_agent_manager_client()101   BluetoothAgentManagerClient* bluetooth_agent_manager_client() {
102     return bluetooth_agent_manager_client_.get();
103   }
104 
bluetooth_device_client()105   BluetoothDeviceClient* bluetooth_device_client() {
106     return bluetooth_device_client_.get();
107   }
108 
bluetooth_gatt_characteristic_client()109   BluetoothGattCharacteristicClient* bluetooth_gatt_characteristic_client() {
110     return bluetooth_gatt_characteristic_client_.get();
111   }
112 
bluetooth_gatt_descriptor_client()113   BluetoothGattDescriptorClient* bluetooth_gatt_descriptor_client() {
114     return bluetooth_gatt_descriptor_client_.get();
115 
116   }
bluetooth_gatt_manager_client()117   BluetoothGattManagerClient* bluetooth_gatt_manager_client() {
118     return bluetooth_gatt_manager_client_.get();
119   }
120 
bluetooth_gatt_service_client()121   BluetoothGattServiceClient* bluetooth_gatt_service_client() {
122     return bluetooth_gatt_service_client_.get();
123   }
124 
bluetooth_input_client()125   BluetoothInputClient* bluetooth_input_client() {
126     return bluetooth_input_client_.get();
127   }
128 
bluetooth_profile_manager_client()129   BluetoothProfileManagerClient* bluetooth_profile_manager_client() {
130     return bluetooth_profile_manager_client_.get();
131   }
132 
cras_audio_client()133   CrasAudioClient* cras_audio_client() {
134     return cras_audio_client_.get();
135   }
136 
cros_disks_client()137   CrosDisksClient* cros_disks_client() {
138     return cros_disks_client_.get();
139   }
140 
cryptohome_client()141   CryptohomeClient* cryptohome_client() {
142     return cryptohome_client_.get();
143   }
144 
debug_daemon_client()145   DebugDaemonClient* debug_daemon_client() {
146     return debug_daemon_client_.get();
147   }
148 
easy_unlock_client()149   EasyUnlockClient* easy_unlock_client() {
150     return easy_unlock_client_.get();
151   }
152 
lorgnette_manager_client()153   LorgnetteManagerClient* lorgnette_manager_client() {
154     return lorgnette_manager_client_.get();
155   }
156 
shill_device_client()157   ShillDeviceClient* shill_device_client() {
158     return shill_device_client_.get();
159   }
160 
shill_ipconfig_client()161   ShillIPConfigClient* shill_ipconfig_client() {
162     return shill_ipconfig_client_.get();
163   }
164 
shill_manager_client()165   ShillManagerClient* shill_manager_client() {
166     return shill_manager_client_.get();
167   }
168 
shill_service_client()169   ShillServiceClient* shill_service_client() {
170     return shill_service_client_.get();
171   }
172 
shill_profile_client()173   ShillProfileClient* shill_profile_client() {
174     return shill_profile_client_.get();
175   }
176 
gsm_sms_client()177   GsmSMSClient* gsm_sms_client() {
178     return gsm_sms_client_.get();
179   }
180 
image_burner_client()181   ImageBurnerClient* image_burner_client() {
182     return image_burner_client_.get();
183   }
184 
introspectable_client()185   IntrospectableClient* introspectable_client() {
186     return introspectable_client_.get();
187   }
188 
modem_messaging_client()189   ModemMessagingClient* modem_messaging_client() {
190     return modem_messaging_client_.get();
191   }
192 
nfc_manager_client()193   NfcManagerClient* nfc_manager_client() {
194     return nfc_manager_client_.get();
195   }
196 
nfc_adapter_client()197   NfcAdapterClient* nfc_adapter_client() {
198     return nfc_adapter_client_.get();
199   }
200 
nfc_device_client()201   NfcDeviceClient* nfc_device_client() {
202     return nfc_device_client_.get();
203   }
204 
nfc_tag_client()205   NfcTagClient* nfc_tag_client() {
206     return nfc_tag_client_.get();
207   }
208 
nfc_record_client()209   NfcRecordClient* nfc_record_client() {
210     return nfc_record_client_.get();
211   }
212 
permission_broker_client()213   PermissionBrokerClient* permission_broker_client() {
214     return permission_broker_client_.get();
215   }
216 
system_clock_client()217   SystemClockClient* system_clock_client() {
218     return system_clock_client_.get();
219   }
220 
power_manager_client()221   PowerManagerClient* power_manager_client() {
222     return power_manager_client_.get();
223   }
224 
session_manager_client()225   SessionManagerClient* session_manager_client() {
226     return session_manager_client_.get();
227   }
228 
sms_client()229   SMSClient* sms_client() {
230     return sms_client_.get();
231   }
232 
update_engine_client()233   UpdateEngineClient* update_engine_client() {
234     return update_engine_client_.get();
235   }
236 
237  private:
238   friend class DBusThreadManagerSetter;
239 
240   // Bitmask that defines which dbus clients are not stubbed out. Bitmap flags
241   // are defined within DBusClientType enum.
242   DBusClientTypeMask unstub_client_mask_;
243 
244   scoped_ptr<BluetoothAdapterClient> bluetooth_adapter_client_;
245   scoped_ptr<BluetoothAgentManagerClient> bluetooth_agent_manager_client_;
246   scoped_ptr<BluetoothDeviceClient> bluetooth_device_client_;
247   scoped_ptr<BluetoothGattCharacteristicClient>
248       bluetooth_gatt_characteristic_client_;
249   scoped_ptr<BluetoothGattDescriptorClient> bluetooth_gatt_descriptor_client_;
250   scoped_ptr<BluetoothGattManagerClient> bluetooth_gatt_manager_client_;
251   scoped_ptr<BluetoothGattServiceClient> bluetooth_gatt_service_client_;
252   scoped_ptr<BluetoothInputClient> bluetooth_input_client_;
253   scoped_ptr<BluetoothProfileManagerClient> bluetooth_profile_manager_client_;
254   scoped_ptr<CrasAudioClient> cras_audio_client_;
255   scoped_ptr<CrosDisksClient> cros_disks_client_;
256   scoped_ptr<CryptohomeClient> cryptohome_client_;
257   scoped_ptr<DebugDaemonClient> debug_daemon_client_;
258   scoped_ptr<EasyUnlockClient> easy_unlock_client_;
259   scoped_ptr<LorgnetteManagerClient> lorgnette_manager_client_;
260   scoped_ptr<ShillDeviceClient> shill_device_client_;
261   scoped_ptr<ShillIPConfigClient> shill_ipconfig_client_;
262   scoped_ptr<ShillManagerClient> shill_manager_client_;
263   scoped_ptr<ShillServiceClient> shill_service_client_;
264   scoped_ptr<ShillProfileClient> shill_profile_client_;
265   scoped_ptr<GsmSMSClient> gsm_sms_client_;
266   scoped_ptr<ImageBurnerClient> image_burner_client_;
267   scoped_ptr<IntrospectableClient> introspectable_client_;
268   scoped_ptr<ModemMessagingClient> modem_messaging_client_;
269   // The declaration order for NFC client objects is important. See
270   // DBusThreadManager::InitializeClients for the dependencies.
271   scoped_ptr<NfcManagerClient> nfc_manager_client_;
272   scoped_ptr<NfcAdapterClient> nfc_adapter_client_;
273   scoped_ptr<NfcDeviceClient> nfc_device_client_;
274   scoped_ptr<NfcTagClient> nfc_tag_client_;
275   scoped_ptr<NfcRecordClient> nfc_record_client_;
276   scoped_ptr<PermissionBrokerClient> permission_broker_client_;
277   scoped_ptr<SystemClockClient> system_clock_client_;
278   scoped_ptr<PowerManagerClient> power_manager_client_;
279   scoped_ptr<SessionManagerClient> session_manager_client_;
280   scoped_ptr<SMSClient> sms_client_;
281   scoped_ptr<UpdateEngineClient> update_engine_client_;
282 
283   DISALLOW_COPY_AND_ASSIGN(DBusClientBundle);
284 };
285 
286 }  // namespace chromeos
287 
288 #endif  // CHROMEOS_DBUS_DBUS_CLIENT_BUNDLE_H_
289