OLD | NEW |
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 #include "chromeos/dbus/shill_manager_client.h" | 5 #include "chromeos/dbus/shill_manager_client.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/chromeos/chromeos_version.h" | 8 #include "base/chromeos/chromeos_version.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 } | 162 } |
163 | 163 |
164 private: | 164 private: |
165 dbus::ObjectProxy* proxy_; | 165 dbus::ObjectProxy* proxy_; |
166 ShillClientHelper helper_; | 166 ShillClientHelper helper_; |
167 | 167 |
168 DISALLOW_COPY_AND_ASSIGN(ShillManagerClientImpl); | 168 DISALLOW_COPY_AND_ASSIGN(ShillManagerClientImpl); |
169 }; | 169 }; |
170 | 170 |
171 // A stub implementation of ShillManagerClient. | 171 // A stub implementation of ShillManagerClient. |
172 // Implemented: Stub cellular DeviceList entry for SMS testing. | 172 // Implemented: Stub devices and services for NetworkStateManager tests. |
| 173 // Implemented: Stub cellular device entry for SMS tests. |
173 class ShillManagerClientStubImpl : public ShillManagerClient { | 174 class ShillManagerClientStubImpl : public ShillManagerClient { |
174 public: | 175 public: |
175 ShillManagerClientStubImpl() : weak_ptr_factory_(this) { | 176 ShillManagerClientStubImpl() : weak_ptr_factory_(this) { |
| 177 // Stub Devices |
176 base::ListValue* device_list = new base::ListValue; | 178 base::ListValue* device_list = new base::ListValue; |
177 // Note: names match Device stub map. | 179 // Note: names match Device stub map. |
178 const char kStubCellular1[] = "stub_cellular1"; | 180 device_list->Append( |
179 const char kStubCellular2[] = "stub_cellular2"; | 181 base::Value::CreateStringValue("stub_wifi_device1")); |
180 device_list->Append(base::Value::CreateStringValue(kStubCellular1)); | 182 device_list->Append( |
181 device_list->Append(base::Value::CreateStringValue(kStubCellular2)); | 183 base::Value::CreateStringValue("stub_cellular_device1")); |
| 184 device_list->Append( |
| 185 base::Value::CreateStringValue("stub_cellular_device2")); |
182 stub_properties_.Set(flimflam::kDevicesProperty, device_list); | 186 stub_properties_.Set(flimflam::kDevicesProperty, device_list); |
| 187 |
| 188 // Stub Services |
| 189 base::ListValue* service_list = new base::ListValue; |
| 190 // Note: names match Service stub map. |
| 191 service_list->Append(base::Value::CreateStringValue("stub_ethernet")); |
| 192 service_list->Append(base::Value::CreateStringValue("stub_wifi1")); |
| 193 service_list->Append(base::Value::CreateStringValue("stub_wifi2")); |
| 194 service_list->Append(base::Value::CreateStringValue("stub_cellular1")); |
| 195 stub_properties_.Set(flimflam::kServicesProperty, service_list); |
| 196 |
| 197 // Stub Technologies |
| 198 base::ListValue* available_list = new base::ListValue; |
| 199 available_list->Append( |
| 200 base::Value::CreateStringValue(flimflam::kTypeEthernet)); |
| 201 available_list->Append( |
| 202 base::Value::CreateStringValue(flimflam::kTypeWifi)); |
| 203 available_list->Append( |
| 204 base::Value::CreateStringValue(flimflam::kTypeCellular)); |
| 205 stub_properties_.Set(flimflam::kAvailableTechnologiesProperty, |
| 206 available_list); |
| 207 |
| 208 base::ListValue* enabled_list = new base::ListValue; |
| 209 enabled_list->Append( |
| 210 base::Value::CreateStringValue(flimflam::kTypeEthernet)); |
| 211 enabled_list->Append( |
| 212 base::Value::CreateStringValue(flimflam::kTypeWifi)); |
| 213 enabled_list->Append( |
| 214 base::Value::CreateStringValue(flimflam::kTypeCellular)); |
| 215 stub_properties_.Set(flimflam::kEnabledTechnologiesProperty, enabled_list); |
183 } | 216 } |
184 | 217 |
185 virtual ~ShillManagerClientStubImpl() {} | 218 virtual ~ShillManagerClientStubImpl() {} |
186 | 219 |
187 ////////////////////////////////// | 220 ////////////////////////////////// |
188 // ShillManagerClient overrides. | 221 // ShillManagerClient overrides. |
189 virtual void AddPropertyChangedObserver( | 222 virtual void AddPropertyChangedObserver( |
190 ShillPropertyChangedObserver* observer) OVERRIDE {} | 223 ShillPropertyChangedObserver* observer) OVERRIDE { |
| 224 observer_list_.AddObserver(observer); |
| 225 } |
191 | 226 |
192 virtual void RemovePropertyChangedObserver( | 227 virtual void RemovePropertyChangedObserver( |
193 ShillPropertyChangedObserver* observer) OVERRIDE {} | 228 ShillPropertyChangedObserver* observer) OVERRIDE { |
| 229 observer_list_.RemoveObserver(observer); |
| 230 } |
194 | 231 |
195 // ShillManagerClient override. | 232 // ShillManagerClient override. |
196 virtual void GetProperties(const DictionaryValueCallback& callback) OVERRIDE { | 233 virtual void GetProperties(const DictionaryValueCallback& callback) OVERRIDE { |
197 MessageLoop::current()->PostTask( | 234 MessageLoop::current()->PostTask( |
198 FROM_HERE, base::Bind( | 235 FROM_HERE, base::Bind( |
199 &ShillManagerClientStubImpl::PassStubProperties, | 236 &ShillManagerClientStubImpl::PassStubProperties, |
200 weak_ptr_factory_.GetWeakPtr(), | 237 weak_ptr_factory_.GetWeakPtr(), |
201 callback)); | 238 callback)); |
202 } | 239 } |
203 | 240 |
204 // ShillManagerClient override. | 241 // ShillManagerClient override. |
205 virtual base::DictionaryValue* CallGetPropertiesAndBlock() OVERRIDE { | 242 virtual base::DictionaryValue* CallGetPropertiesAndBlock() OVERRIDE { |
206 return new base::DictionaryValue; | 243 return stub_properties_.DeepCopy(); |
207 } | 244 } |
208 | 245 |
209 // ShillManagerClient override. | 246 // ShillManagerClient override. |
210 virtual void SetProperty(const std::string& name, | 247 virtual void SetProperty(const std::string& name, |
211 const base::Value& value, | 248 const base::Value& value, |
212 const base::Closure& callback, | 249 const base::Closure& callback, |
213 const ErrorCallback& error_callback) OVERRIDE { | 250 const ErrorCallback& error_callback) OVERRIDE { |
214 stub_properties_.Set(name, value.DeepCopy()); | 251 stub_properties_.Set(name, value.DeepCopy()); |
215 MessageLoop::current()->PostTask(FROM_HERE, callback); | 252 MessageLoop::current()->PostTask(FROM_HERE, callback); |
216 } | 253 } |
217 | 254 |
218 // ShillManagerClient override. | 255 // ShillManagerClient override. |
219 virtual void RequestScan(const std::string& type, | 256 virtual void RequestScan(const std::string& type, |
220 const base::Closure& callback, | 257 const base::Closure& callback, |
221 const ErrorCallback& error_callback) OVERRIDE { | 258 const ErrorCallback& error_callback) OVERRIDE { |
222 MessageLoop::current()->PostTask(FROM_HERE, callback); | 259 MessageLoop::current()->PostTask(FROM_HERE, callback); |
| 260 const int kScanDelaySeconds = 3; |
| 261 MessageLoop::current()->PostDelayedTask( |
| 262 FROM_HERE, |
| 263 base::Bind(&ShillManagerClientStubImpl::NotifyObserversPropertyChanged, |
| 264 weak_ptr_factory_.GetWeakPtr(), |
| 265 flimflam::kServicesProperty), |
| 266 base::TimeDelta::FromSeconds(kScanDelaySeconds)); |
223 } | 267 } |
224 | 268 |
225 // ShillManagerClient override. | 269 // ShillManagerClient override. |
226 virtual void EnableTechnology( | 270 virtual void EnableTechnology( |
227 const std::string& type, | 271 const std::string& type, |
228 const base::Closure& callback, | 272 const base::Closure& callback, |
229 const ErrorCallback& error_callback) OVERRIDE { | 273 const ErrorCallback& error_callback) OVERRIDE { |
| 274 base::ListValue* enabled_list; |
| 275 if (!stub_properties_.GetListWithoutPathExpansion( |
| 276 flimflam::kEnabledTechnologiesProperty, &enabled_list)) { |
| 277 MessageLoop::current()->PostTask( |
| 278 FROM_HERE, |
| 279 base::Bind(error_callback, "StubError", "Property not found")); |
| 280 return; |
| 281 } |
230 MessageLoop::current()->PostTask(FROM_HERE, callback); | 282 MessageLoop::current()->PostTask(FROM_HERE, callback); |
| 283 enabled_list->AppendIfNotPresent(new base::StringValue(type)); |
| 284 MessageLoop::current()->PostTask( |
| 285 FROM_HERE, |
| 286 base::Bind(&ShillManagerClientStubImpl::NotifyObserversPropertyChanged, |
| 287 weak_ptr_factory_.GetWeakPtr(), |
| 288 flimflam::kEnabledTechnologiesProperty)); |
231 } | 289 } |
232 | 290 |
233 // ShillManagerClient override. | 291 // ShillManagerClient override. |
234 virtual void DisableTechnology( | 292 virtual void DisableTechnology( |
235 const std::string& type, | 293 const std::string& type, |
236 const base::Closure& callback, | 294 const base::Closure& callback, |
237 const ErrorCallback& error_callback) OVERRIDE { | 295 const ErrorCallback& error_callback) OVERRIDE { |
| 296 base::ListValue* enabled_list; |
| 297 if (!stub_properties_.GetListWithoutPathExpansion( |
| 298 flimflam::kEnabledTechnologiesProperty, &enabled_list)) { |
| 299 MessageLoop::current()->PostTask( |
| 300 FROM_HERE, |
| 301 base::Bind(error_callback, "StubError", "Property not found")); |
| 302 return; |
| 303 } |
238 MessageLoop::current()->PostTask(FROM_HERE, callback); | 304 MessageLoop::current()->PostTask(FROM_HERE, callback); |
| 305 enabled_list->Remove(base::StringValue(type), NULL); |
| 306 MessageLoop::current()->PostTask( |
| 307 FROM_HERE, |
| 308 base::Bind(&ShillManagerClientStubImpl::NotifyObserversPropertyChanged, |
| 309 weak_ptr_factory_.GetWeakPtr(), |
| 310 flimflam::kEnabledTechnologiesProperty)); |
239 } | 311 } |
240 | 312 |
241 // ShillManagerClient override. | 313 // ShillManagerClient override. |
242 virtual void ConfigureService( | 314 virtual void ConfigureService( |
243 const base::DictionaryValue& properties, | 315 const base::DictionaryValue& properties, |
244 const base::Closure& callback, | 316 const base::Closure& callback, |
245 const ErrorCallback& error_callback) OVERRIDE { | 317 const ErrorCallback& error_callback) OVERRIDE { |
246 MessageLoop::current()->PostTask(FROM_HERE, callback); | 318 MessageLoop::current()->PostTask(FROM_HERE, callback); |
247 } | 319 } |
248 | 320 |
249 // ShillManagerClient override. | 321 // ShillManagerClient override. |
250 virtual void GetService( | 322 virtual void GetService( |
251 const base::DictionaryValue& properties, | 323 const base::DictionaryValue& properties, |
252 const ObjectPathCallback& callback, | 324 const ObjectPathCallback& callback, |
253 const ErrorCallback& error_callback) OVERRIDE { | 325 const ErrorCallback& error_callback) OVERRIDE { |
254 MessageLoop::current()->PostTask(FROM_HERE, | 326 MessageLoop::current()->PostTask( |
255 base::Bind(callback, | 327 FROM_HERE, base::Bind(callback, dbus::ObjectPath())); |
256 dbus::ObjectPath())); | |
257 } | 328 } |
258 | 329 |
259 private: | 330 private: |
260 void PassStubProperties(const DictionaryValueCallback& callback) const { | 331 void PassStubProperties(const DictionaryValueCallback& callback) const { |
261 callback.Run(DBUS_METHOD_CALL_SUCCESS, stub_properties_); | 332 callback.Run(DBUS_METHOD_CALL_SUCCESS, stub_properties_); |
262 } | 333 } |
263 | 334 |
| 335 void NotifyObserversPropertyChanged(const std::string& property) { |
| 336 base::Value* value; |
| 337 if (!stub_properties_.GetWithoutPathExpansion(property, &value)) { |
| 338 LOG(ERROR) << "Notify for unknown property: " << property; |
| 339 return; |
| 340 } |
| 341 FOR_EACH_OBSERVER(ShillPropertyChangedObserver, |
| 342 observer_list_, |
| 343 OnPropertyChanged(property, *value)); |
| 344 } |
| 345 |
264 base::DictionaryValue stub_properties_; | 346 base::DictionaryValue stub_properties_; |
| 347 ObserverList<ShillPropertyChangedObserver> observer_list_; |
265 | 348 |
266 // Note: This should remain the last member so it'll be destroyed and | 349 // Note: This should remain the last member so it'll be destroyed and |
267 // invalidate its weak pointers before any other members are destroyed. | 350 // invalidate its weak pointers before any other members are destroyed. |
268 base::WeakPtrFactory<ShillManagerClientStubImpl> weak_ptr_factory_; | 351 base::WeakPtrFactory<ShillManagerClientStubImpl> weak_ptr_factory_; |
269 | 352 |
270 DISALLOW_COPY_AND_ASSIGN(ShillManagerClientStubImpl); | 353 DISALLOW_COPY_AND_ASSIGN(ShillManagerClientStubImpl); |
271 }; | 354 }; |
272 | 355 |
273 } // namespace | 356 } // namespace |
274 | 357 |
275 ShillManagerClient::ShillManagerClient() {} | 358 ShillManagerClient::ShillManagerClient() {} |
276 | 359 |
277 ShillManagerClient::~ShillManagerClient() {} | 360 ShillManagerClient::~ShillManagerClient() {} |
278 | 361 |
279 // static | 362 // static |
280 ShillManagerClient* ShillManagerClient::Create( | 363 ShillManagerClient* ShillManagerClient::Create( |
281 DBusClientImplementationType type, | 364 DBusClientImplementationType type, |
282 dbus::Bus* bus) { | 365 dbus::Bus* bus) { |
283 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | 366 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) |
284 return new ShillManagerClientImpl(bus); | 367 return new ShillManagerClientImpl(bus); |
285 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); | 368 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); |
286 return new ShillManagerClientStubImpl(); | 369 return new ShillManagerClientStubImpl(); |
287 } | 370 } |
288 | 371 |
289 } // namespace chromeos | 372 } // namespace chromeos |
OLD | NEW |