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