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 |