| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 #include "chromeos/dbus/dbus_client_bundle.h" | 5 #include "chromeos/dbus/dbus_client_bundle.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 12 #include "base/strings/string_split.h" | |
| 13 #include "base/strings/string_util.h" | |
| 14 #include "chromeos/chromeos_switches.h" | 12 #include "chromeos/chromeos_switches.h" |
| 15 #include "chromeos/dbus/arc_obb_mounter_client.h" | 13 #include "chromeos/dbus/arc_obb_mounter_client.h" |
| 16 #include "chromeos/dbus/cras_audio_client.h" | 14 #include "chromeos/dbus/cras_audio_client.h" |
| 17 #include "chromeos/dbus/cros_disks_client.h" | 15 #include "chromeos/dbus/cros_disks_client.h" |
| 18 #include "chromeos/dbus/cryptohome_client.h" | 16 #include "chromeos/dbus/cryptohome_client.h" |
| 19 #include "chromeos/dbus/debug_daemon_client.h" | 17 #include "chromeos/dbus/debug_daemon_client.h" |
| 20 #include "chromeos/dbus/easy_unlock_client.h" | 18 #include "chromeos/dbus/easy_unlock_client.h" |
| 21 #include "chromeos/dbus/fake_arc_obb_mounter_client.h" | 19 #include "chromeos/dbus/fake_arc_obb_mounter_client.h" |
| 22 #include "chromeos/dbus/fake_cras_audio_client.h" | 20 #include "chromeos/dbus/fake_cras_audio_client.h" |
| 23 #include "chromeos/dbus/fake_cryptohome_client.h" | 21 #include "chromeos/dbus/fake_cryptohome_client.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 49 #include "chromeos/dbus/shill_manager_client.h" | 47 #include "chromeos/dbus/shill_manager_client.h" |
| 50 #include "chromeos/dbus/shill_profile_client.h" | 48 #include "chromeos/dbus/shill_profile_client.h" |
| 51 #include "chromeos/dbus/shill_service_client.h" | 49 #include "chromeos/dbus/shill_service_client.h" |
| 52 #include "chromeos/dbus/shill_third_party_vpn_driver_client.h" | 50 #include "chromeos/dbus/shill_third_party_vpn_driver_client.h" |
| 53 #include "chromeos/dbus/sms_client.h" | 51 #include "chromeos/dbus/sms_client.h" |
| 54 #include "chromeos/dbus/system_clock_client.h" | 52 #include "chromeos/dbus/system_clock_client.h" |
| 55 #include "chromeos/dbus/update_engine_client.h" | 53 #include "chromeos/dbus/update_engine_client.h" |
| 56 | 54 |
| 57 namespace chromeos { | 55 namespace chromeos { |
| 58 | 56 |
| 59 namespace { | 57 DBusClientBundle::DBusClientBundle(DBusClientTypeMask real_client_mask) |
| 60 | 58 : real_client_mask_(real_client_mask) { |
| 61 // Command line switch mapping for --dbus-unstub-clients. | 59 if (IsUsingReal(DBusClientType::ARC_OBB_MOUNTER)) |
| 62 const struct { | |
| 63 const char* param_name; | |
| 64 DBusClientBundle::DBusClientType client_type; | |
| 65 } client_type_map[] = { | |
| 66 { "bluetooth", DBusClientBundle::BLUETOOTH }, | |
| 67 { "cras", DBusClientBundle::CRAS }, | |
| 68 { "cros_disks", DBusClientBundle::CROS_DISKS }, | |
| 69 { "cryptohome", DBusClientBundle::CRYPTOHOME }, | |
| 70 { "debug_daemon", DBusClientBundle::DEBUG_DAEMON }, | |
| 71 { "easy_unlock", DBusClientBundle::EASY_UNLOCK }, | |
| 72 { "lorgnette_manager", DBusClientBundle::LORGNETTE_MANAGER }, | |
| 73 { "shill", DBusClientBundle::SHILL }, | |
| 74 { "gsm_sms", DBusClientBundle::GSM_SMS }, | |
| 75 { "image_burner", DBusClientBundle::IMAGE_BURNER }, | |
| 76 { "modem_messaging", DBusClientBundle::MODEM_MESSAGING }, | |
| 77 { "permission_broker", DBusClientBundle::PERMISSION_BROKER }, | |
| 78 { "power_manager", DBusClientBundle::POWER_MANAGER }, | |
| 79 { "session_manager", DBusClientBundle::SESSION_MANAGER }, | |
| 80 { "sms", DBusClientBundle::SMS }, | |
| 81 { "system_clock", DBusClientBundle::SYSTEM_CLOCK }, | |
| 82 { "update_engine", DBusClientBundle::UPDATE_ENGINE }, | |
| 83 }; | |
| 84 | |
| 85 // Parses single command line param value for dbus subsystem. If successful, | |
| 86 // returns its enum representation. Otherwise returns NO_CLIENT. | |
| 87 DBusClientBundle::DBusClientType GetDBusClientType( | |
| 88 const std::string& client_type_name) { | |
| 89 for (size_t i = 0; i < arraysize(client_type_map); i++) { | |
| 90 if (base::LowerCaseEqualsASCII(client_type_name, | |
| 91 client_type_map[i].param_name)) | |
| 92 return client_type_map[i].client_type; | |
| 93 } | |
| 94 return DBusClientBundle::NO_CLIENT; | |
| 95 } | |
| 96 | |
| 97 } // namespace | |
| 98 | |
| 99 DBusClientBundle::DBusClientBundle(DBusClientTypeMask unstub_client_mask) | |
| 100 : unstub_client_mask_(unstub_client_mask) { | |
| 101 if (!IsUsingStub(ARC_OBB_MOUNTER)) | |
| 102 arc_obb_mounter_client_.reset(ArcObbMounterClient::Create()); | 60 arc_obb_mounter_client_.reset(ArcObbMounterClient::Create()); |
| 103 else | 61 else |
| 104 arc_obb_mounter_client_.reset(new FakeArcObbMounterClient); | 62 arc_obb_mounter_client_.reset(new FakeArcObbMounterClient); |
| 105 | 63 |
| 106 if (!IsUsingStub(CRAS)) | 64 if (IsUsingReal(DBusClientType::CRAS)) |
| 107 cras_audio_client_.reset(CrasAudioClient::Create()); | 65 cras_audio_client_.reset(CrasAudioClient::Create()); |
| 108 else | 66 else |
| 109 cras_audio_client_.reset(new FakeCrasAudioClient); | 67 cras_audio_client_.reset(new FakeCrasAudioClient); |
| 110 | 68 |
| 111 cros_disks_client_.reset(CrosDisksClient::Create( | 69 cros_disks_client_.reset( |
| 112 IsUsingStub(CROS_DISKS) ? STUB_DBUS_CLIENT_IMPLEMENTATION | 70 CrosDisksClient::Create(IsUsingReal(DBusClientType::CROS_DISKS) |
| 113 : REAL_DBUS_CLIENT_IMPLEMENTATION)); | 71 ? REAL_DBUS_CLIENT_IMPLEMENTATION |
| 72 : FAKE_DBUS_CLIENT_IMPLEMENTATION)); |
| 114 | 73 |
| 115 if (!IsUsingStub(CRYPTOHOME)) | 74 if (IsUsingReal(DBusClientType::CRYPTOHOME)) |
| 116 cryptohome_client_.reset(CryptohomeClient::Create()); | 75 cryptohome_client_.reset(CryptohomeClient::Create()); |
| 117 else | 76 else |
| 118 cryptohome_client_.reset(new FakeCryptohomeClient); | 77 cryptohome_client_.reset(new FakeCryptohomeClient); |
| 119 | 78 |
| 120 if (!IsUsingStub(DEBUG_DAEMON)) | 79 if (IsUsingReal(DBusClientType::DEBUG_DAEMON)) |
| 121 debug_daemon_client_.reset(DebugDaemonClient::Create()); | 80 debug_daemon_client_.reset(DebugDaemonClient::Create()); |
| 122 else | 81 else |
| 123 debug_daemon_client_.reset(new FakeDebugDaemonClient); | 82 debug_daemon_client_.reset(new FakeDebugDaemonClient); |
| 124 | 83 |
| 125 if (!IsUsingStub(EASY_UNLOCK)) | 84 if (IsUsingReal(DBusClientType::EASY_UNLOCK)) |
| 126 easy_unlock_client_.reset(EasyUnlockClient::Create()); | 85 easy_unlock_client_.reset(EasyUnlockClient::Create()); |
| 127 else | 86 else |
| 128 easy_unlock_client_.reset(new FakeEasyUnlockClient); | 87 easy_unlock_client_.reset(new FakeEasyUnlockClient); |
| 129 | 88 |
| 130 if (!IsUsingStub(LORGNETTE_MANAGER)) | 89 if (IsUsingReal(DBusClientType::LORGNETTE_MANAGER)) |
| 131 lorgnette_manager_client_.reset(LorgnetteManagerClient::Create()); | 90 lorgnette_manager_client_.reset(LorgnetteManagerClient::Create()); |
| 132 else | 91 else |
| 133 lorgnette_manager_client_.reset(new FakeLorgnetteManagerClient); | 92 lorgnette_manager_client_.reset(new FakeLorgnetteManagerClient); |
| 134 | 93 |
| 135 if (!IsUsingStub(SHILL)) { | 94 if (IsUsingReal(DBusClientType::SHILL)) { |
| 136 shill_manager_client_.reset(ShillManagerClient::Create()); | 95 shill_manager_client_.reset(ShillManagerClient::Create()); |
| 137 shill_device_client_.reset(ShillDeviceClient::Create()); | 96 shill_device_client_.reset(ShillDeviceClient::Create()); |
| 138 shill_ipconfig_client_.reset(ShillIPConfigClient::Create()); | 97 shill_ipconfig_client_.reset(ShillIPConfigClient::Create()); |
| 139 shill_service_client_.reset(ShillServiceClient::Create()); | 98 shill_service_client_.reset(ShillServiceClient::Create()); |
| 140 shill_profile_client_.reset(ShillProfileClient::Create()); | 99 shill_profile_client_.reset(ShillProfileClient::Create()); |
| 141 shill_third_party_vpn_driver_client_.reset( | 100 shill_third_party_vpn_driver_client_.reset( |
| 142 ShillThirdPartyVpnDriverClient::Create()); | 101 ShillThirdPartyVpnDriverClient::Create()); |
| 143 } else { | 102 } else { |
| 144 shill_manager_client_.reset(new FakeShillManagerClient); | 103 shill_manager_client_.reset(new FakeShillManagerClient); |
| 145 shill_device_client_.reset(new FakeShillDeviceClient); | 104 shill_device_client_.reset(new FakeShillDeviceClient); |
| 146 shill_ipconfig_client_.reset(new FakeShillIPConfigClient); | 105 shill_ipconfig_client_.reset(new FakeShillIPConfigClient); |
| 147 shill_service_client_.reset(new FakeShillServiceClient); | 106 shill_service_client_.reset(new FakeShillServiceClient); |
| 148 shill_profile_client_.reset(new FakeShillProfileClient); | 107 shill_profile_client_.reset(new FakeShillProfileClient); |
| 149 shill_third_party_vpn_driver_client_.reset( | 108 shill_third_party_vpn_driver_client_.reset( |
| 150 new FakeShillThirdPartyVpnDriverClient); | 109 new FakeShillThirdPartyVpnDriverClient); |
| 151 } | 110 } |
| 152 | 111 |
| 153 if (!IsUsingStub(GSM_SMS)) { | 112 if (IsUsingReal(DBusClientType::GSM_SMS)) { |
| 154 gsm_sms_client_.reset(GsmSMSClient::Create()); | 113 gsm_sms_client_.reset(GsmSMSClient::Create()); |
| 155 } else { | 114 } else { |
| 156 FakeGsmSMSClient* gsm_sms_client = new FakeGsmSMSClient(); | 115 FakeGsmSMSClient* gsm_sms_client = new FakeGsmSMSClient(); |
| 157 gsm_sms_client->set_sms_test_message_switch_present( | 116 gsm_sms_client->set_sms_test_message_switch_present( |
| 158 base::CommandLine::ForCurrentProcess()->HasSwitch( | 117 base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 159 chromeos::switches::kSmsTestMessages)); | 118 chromeos::switches::kSmsTestMessages)); |
| 160 gsm_sms_client_.reset(gsm_sms_client); | 119 gsm_sms_client_.reset(gsm_sms_client); |
| 161 } | 120 } |
| 162 | 121 |
| 163 if (!IsUsingStub(IMAGE_BURNER)) | 122 if (IsUsingReal(DBusClientType::IMAGE_BURNER)) |
| 164 image_burner_client_.reset(ImageBurnerClient::Create()); | 123 image_burner_client_.reset(ImageBurnerClient::Create()); |
| 165 else | 124 else |
| 166 image_burner_client_.reset(new FakeImageBurnerClient); | 125 image_burner_client_.reset(new FakeImageBurnerClient); |
| 167 | 126 |
| 168 if (!IsUsingStub(MODEM_MESSAGING)) | 127 if (IsUsingReal(DBusClientType::MODEM_MESSAGING)) |
| 169 modem_messaging_client_.reset(ModemMessagingClient::Create()); | 128 modem_messaging_client_.reset(ModemMessagingClient::Create()); |
| 170 else | 129 else |
| 171 modem_messaging_client_.reset(new FakeModemMessagingClient); | 130 modem_messaging_client_.reset(new FakeModemMessagingClient); |
| 172 | 131 |
| 173 if (!IsUsingStub(PERMISSION_BROKER)) | 132 if (IsUsingReal(DBusClientType::PERMISSION_BROKER)) |
| 174 permission_broker_client_.reset(PermissionBrokerClient::Create()); | 133 permission_broker_client_.reset(PermissionBrokerClient::Create()); |
| 175 else | 134 else |
| 176 permission_broker_client_.reset(new FakePermissionBrokerClient); | 135 permission_broker_client_.reset(new FakePermissionBrokerClient); |
| 177 | 136 |
| 178 power_manager_client_.reset(PowerManagerClient::Create( | 137 power_manager_client_.reset( |
| 179 IsUsingStub(POWER_MANAGER) ? STUB_DBUS_CLIENT_IMPLEMENTATION | 138 PowerManagerClient::Create(IsUsingReal(DBusClientType::POWER_MANAGER) |
| 180 : REAL_DBUS_CLIENT_IMPLEMENTATION)); | 139 ? REAL_DBUS_CLIENT_IMPLEMENTATION |
| 140 : FAKE_DBUS_CLIENT_IMPLEMENTATION)); |
| 181 | 141 |
| 182 session_manager_client_.reset(SessionManagerClient::Create( | 142 session_manager_client_.reset( |
| 183 IsUsingStub(SESSION_MANAGER) ? STUB_DBUS_CLIENT_IMPLEMENTATION | 143 SessionManagerClient::Create(IsUsingReal(DBusClientType::SESSION_MANAGER) |
| 184 : REAL_DBUS_CLIENT_IMPLEMENTATION)); | 144 ? REAL_DBUS_CLIENT_IMPLEMENTATION |
| 145 : FAKE_DBUS_CLIENT_IMPLEMENTATION)); |
| 185 | 146 |
| 186 if (!IsUsingStub(SMS)) | 147 if (IsUsingReal(DBusClientType::SMS)) |
| 187 sms_client_.reset(SMSClient::Create()); | 148 sms_client_.reset(SMSClient::Create()); |
| 188 else | 149 else |
| 189 sms_client_.reset(new FakeSMSClient); | 150 sms_client_.reset(new FakeSMSClient); |
| 190 | 151 |
| 191 if (!IsUsingStub(SYSTEM_CLOCK)) | 152 if (IsUsingReal(DBusClientType::SYSTEM_CLOCK)) |
| 192 system_clock_client_.reset(SystemClockClient::Create()); | 153 system_clock_client_.reset(SystemClockClient::Create()); |
| 193 else | 154 else |
| 194 system_clock_client_.reset(new FakeSystemClockClient); | 155 system_clock_client_.reset(new FakeSystemClockClient); |
| 195 | 156 |
| 196 update_engine_client_.reset(UpdateEngineClient::Create( | 157 update_engine_client_.reset( |
| 197 IsUsingStub(UPDATE_ENGINE) ? STUB_DBUS_CLIENT_IMPLEMENTATION | 158 UpdateEngineClient::Create(IsUsingReal(DBusClientType::UPDATE_ENGINE) |
| 198 : REAL_DBUS_CLIENT_IMPLEMENTATION)); | 159 ? REAL_DBUS_CLIENT_IMPLEMENTATION |
| 160 : FAKE_DBUS_CLIENT_IMPLEMENTATION)); |
| 199 } | 161 } |
| 200 | 162 |
| 201 DBusClientBundle::~DBusClientBundle() { | 163 DBusClientBundle::~DBusClientBundle() {} |
| 164 |
| 165 bool DBusClientBundle::IsUsingReal(DBusClientType client) const { |
| 166 return real_client_mask_ & static_cast<DBusClientTypeMask>(client); |
| 202 } | 167 } |
| 203 | 168 |
| 204 bool DBusClientBundle::IsUsingStub(DBusClientType client) { | 169 bool DBusClientBundle::IsUsingAnyRealClient() const { |
| 205 return !(unstub_client_mask_ & client); | 170 return real_client_mask_ != |
| 206 } | 171 static_cast<DBusClientTypeMask>(DBusClientType::NONE); |
| 207 | |
| 208 bool DBusClientBundle::IsUsingAnyRealClient() { | |
| 209 // 'Using any real client' is equivalent to 'Unstubbed any client'. | |
| 210 return unstub_client_mask_ != 0; | |
| 211 } | 172 } |
| 212 | 173 |
| 213 void DBusClientBundle::SetupDefaultEnvironment() { | 174 void DBusClientBundle::SetupDefaultEnvironment() { |
| 214 ShillManagerClient::TestInterface* manager = | 175 ShillManagerClient::TestInterface* manager = |
| 215 shill_manager_client_->GetTestInterface(); | 176 shill_manager_client_->GetTestInterface(); |
| 216 if (manager) | 177 if (manager) |
| 217 manager->SetupDefaultEnvironment(); | 178 manager->SetupDefaultEnvironment(); |
| 218 } | 179 } |
| 219 | 180 |
| 220 // static | |
| 221 DBusClientBundle::DBusClientTypeMask DBusClientBundle::ParseUnstubList( | |
| 222 const std::string& unstub_list) { | |
| 223 DBusClientTypeMask unstub_mask = 0; | |
| 224 for (const std::string& cur : base::SplitString( | |
| 225 unstub_list, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) { | |
| 226 DBusClientBundle::DBusClientType client = GetDBusClientType(cur); | |
| 227 if (client != NO_CLIENT) { | |
| 228 LOG(WARNING) << "Unstubbing dbus client for " << cur; | |
| 229 unstub_mask |= client; | |
| 230 } else { | |
| 231 LOG(ERROR) << "Unknown dbus client: " << cur; | |
| 232 } | |
| 233 } | |
| 234 | |
| 235 return unstub_mask; | |
| 236 } | |
| 237 | |
| 238 } // namespace chromeos | 181 } // namespace chromeos |
| OLD | NEW |