Chromium Code Reviews| 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_device_client.h" | 5 #include "chromeos/dbus/shill_device_client.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 225 ShillDeviceClientStubImpl() : weak_ptr_factory_(this) { | 225 ShillDeviceClientStubImpl() : weak_ptr_factory_(this) { |
| 226 SetDefaultProperties(); | 226 SetDefaultProperties(); |
| 227 } | 227 } |
| 228 | 228 |
| 229 virtual ~ShillDeviceClientStubImpl() {} | 229 virtual ~ShillDeviceClientStubImpl() {} |
| 230 | 230 |
| 231 // ShillDeviceClient overrides. | 231 // ShillDeviceClient overrides. |
| 232 | 232 |
| 233 virtual void AddPropertyChangedObserver( | 233 virtual void AddPropertyChangedObserver( |
| 234 const dbus::ObjectPath& device_path, | 234 const dbus::ObjectPath& device_path, |
| 235 ShillPropertyChangedObserver* observer) OVERRIDE {} | 235 ShillPropertyChangedObserver* observer) OVERRIDE { |
| 236 observer_list_.AddObserver(observer); | |
|
hashimoto
2012/11/05 04:03:03
You might need to change the type of observer_list
stevenjb
2012/11/05 22:42:35
Good catch, fixed.
| |
| 237 } | |
| 236 | 238 |
| 237 virtual void RemovePropertyChangedObserver( | 239 virtual void RemovePropertyChangedObserver( |
| 238 const dbus::ObjectPath& device_path, | 240 const dbus::ObjectPath& device_path, |
| 239 ShillPropertyChangedObserver* observer) OVERRIDE {} | 241 ShillPropertyChangedObserver* observer) OVERRIDE { |
| 242 observer_list_.RemoveObserver(observer); | |
| 243 } | |
| 240 | 244 |
| 241 virtual void GetProperties(const dbus::ObjectPath& device_path, | 245 virtual void GetProperties(const dbus::ObjectPath& device_path, |
| 242 const DictionaryValueCallback& callback) OVERRIDE { | 246 const DictionaryValueCallback& callback) OVERRIDE { |
| 243 MessageLoop::current()->PostTask( | 247 MessageLoop::current()->PostTask( |
| 244 FROM_HERE, | 248 FROM_HERE, |
| 245 base::Bind(&ShillDeviceClientStubImpl::PassStubDeviceProperties, | 249 base::Bind(&ShillDeviceClientStubImpl::PassStubDeviceProperties, |
| 246 weak_ptr_factory_.GetWeakPtr(), | 250 weak_ptr_factory_.GetWeakPtr(), |
| 247 device_path, callback)); | 251 device_path, callback)); |
| 248 } | 252 } |
| 249 | 253 |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 270 std::string error_name("org.chromium.flimflam.Error.Failure"); | 274 std::string error_name("org.chromium.flimflam.Error.Failure"); |
| 271 std::string error_message("Failed"); | 275 std::string error_message("Failed"); |
| 272 MessageLoop::current()->PostTask(FROM_HERE, | 276 MessageLoop::current()->PostTask(FROM_HERE, |
| 273 base::Bind(error_callback, | 277 base::Bind(error_callback, |
| 274 error_name, | 278 error_name, |
| 275 error_message)); | 279 error_message)); |
| 276 return; | 280 return; |
| 277 } | 281 } |
| 278 device_properties->Set(name, value.DeepCopy()); | 282 device_properties->Set(name, value.DeepCopy()); |
| 279 MessageLoop::current()->PostTask(FROM_HERE, callback); | 283 MessageLoop::current()->PostTask(FROM_HERE, callback); |
| 284 MessageLoop::current()->PostTask( | |
| 285 FROM_HERE, | |
| 286 base::Bind(&ShillDeviceClientStubImpl::NotifyObserversPropertyChanged, | |
| 287 weak_ptr_factory_.GetWeakPtr(), device_path, name)); | |
| 280 } | 288 } |
| 281 | 289 |
| 282 virtual void ClearProperty(const dbus::ObjectPath& device_path, | 290 virtual void ClearProperty(const dbus::ObjectPath& device_path, |
| 283 const std::string& name, | 291 const std::string& name, |
| 284 const VoidDBusMethodCallback& callback) OVERRIDE { | 292 const VoidDBusMethodCallback& callback) OVERRIDE { |
| 285 base::DictionaryValue* device_properties = NULL; | 293 base::DictionaryValue* device_properties = NULL; |
| 286 if (!stub_devices_.GetDictionary(device_path.value(), &device_properties)) { | 294 if (!stub_devices_.GetDictionary(device_path.value(), &device_properties)) { |
| 287 PostVoidCallback(callback, DBUS_METHOD_CALL_FAILURE); | 295 PostVoidCallback(callback, DBUS_METHOD_CALL_FAILURE); |
| 288 return; | 296 return; |
| 289 } | 297 } |
| 290 device_properties->Remove(name, NULL); | 298 device_properties->Remove(name, NULL); |
| 291 PostVoidCallback(callback, DBUS_METHOD_CALL_SUCCESS); | 299 PostVoidCallback(callback, DBUS_METHOD_CALL_SUCCESS); |
|
hashimoto
2012/11/05 04:03:03
Is there no need to notify observers about the cle
stevenjb
2012/11/05 22:42:35
The dbus impl calls ShillClientHelper::CallVoidMet
| |
| 292 } | 300 } |
| 293 | 301 |
| 294 virtual void AddIPConfig( | 302 virtual void AddIPConfig( |
| 295 const dbus::ObjectPath& device_path, | 303 const dbus::ObjectPath& device_path, |
| 296 const std::string& method, | 304 const std::string& method, |
| 297 const ObjectPathDBusMethodCallback& callback) OVERRIDE { | 305 const ObjectPathDBusMethodCallback& callback) OVERRIDE { |
| 298 MessageLoop::current()->PostTask(FROM_HERE, | 306 MessageLoop::current()->PostTask(FROM_HERE, |
| 299 base::Bind(callback, | 307 base::Bind(callback, |
| 300 DBUS_METHOD_CALL_SUCCESS, | 308 DBUS_METHOD_CALL_SUCCESS, |
| 301 dbus::ObjectPath())); | 309 dbus::ObjectPath())); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 406 callback.Run(DBUS_METHOD_CALL_SUCCESS, *device_properties); | 414 callback.Run(DBUS_METHOD_CALL_SUCCESS, *device_properties); |
| 407 } | 415 } |
| 408 | 416 |
| 409 // Posts a task to run a void callback with status code |status|. | 417 // Posts a task to run a void callback with status code |status|. |
| 410 void PostVoidCallback(const VoidDBusMethodCallback& callback, | 418 void PostVoidCallback(const VoidDBusMethodCallback& callback, |
| 411 DBusMethodCallStatus status) { | 419 DBusMethodCallStatus status) { |
| 412 MessageLoop::current()->PostTask(FROM_HERE, | 420 MessageLoop::current()->PostTask(FROM_HERE, |
| 413 base::Bind(callback, status)); | 421 base::Bind(callback, status)); |
| 414 } | 422 } |
| 415 | 423 |
| 424 void NotifyObserversPropertyChanged(const dbus::ObjectPath& device_path, | |
| 425 const std::string& property) { | |
| 426 base::DictionaryValue* dict = NULL; | |
| 427 std::string path = device_path.value(); | |
| 428 if (!stub_devices_.GetDictionaryWithoutPathExpansion(path, &dict)) { | |
| 429 LOG(ERROR) << "Notify for unknown service: " << path; | |
| 430 return; | |
| 431 } | |
| 432 base::Value* value = NULL; | |
| 433 if (!dict->GetWithoutPathExpansion(property, &value)) { | |
| 434 LOG(ERROR) << "Notify for unknown property: " | |
| 435 << path << " : " << property; | |
| 436 return; | |
| 437 } | |
| 438 FOR_EACH_OBSERVER(ShillPropertyChangedObserver, | |
| 439 observer_list_, | |
| 440 OnPropertyChanged(property, *value)); | |
| 441 } | |
| 442 | |
| 416 base::DictionaryValue* GetDeviceProperties(const std::string& device_path) { | 443 base::DictionaryValue* GetDeviceProperties(const std::string& device_path) { |
| 417 base::DictionaryValue* properties = NULL; | 444 base::DictionaryValue* properties = NULL; |
| 418 if (!stub_devices_.GetDictionaryWithoutPathExpansion( | 445 if (!stub_devices_.GetDictionaryWithoutPathExpansion( |
| 419 device_path, &properties)) { | 446 device_path, &properties)) { |
| 420 properties = new base::DictionaryValue; | 447 properties = new base::DictionaryValue; |
| 421 stub_devices_.Set(device_path, properties); | 448 stub_devices_.Set(device_path, properties); |
| 422 } | 449 } |
| 423 return properties; | 450 return properties; |
| 424 } | 451 } |
| 425 | 452 |
| 426 // Dictionary of <device_name, Dictionary>. | 453 // Dictionary of <device_name, Dictionary>. |
| 427 base::DictionaryValue stub_devices_; | 454 base::DictionaryValue stub_devices_; |
| 455 ObserverList<ShillPropertyChangedObserver> observer_list_; | |
| 428 | 456 |
| 429 // Note: This should remain the last member so it'll be destroyed and | 457 // Note: This should remain the last member so it'll be destroyed and |
| 430 // invalidate its weak pointers before any other members are destroyed. | 458 // invalidate its weak pointers before any other members are destroyed. |
| 431 base::WeakPtrFactory<ShillDeviceClientStubImpl> weak_ptr_factory_; | 459 base::WeakPtrFactory<ShillDeviceClientStubImpl> weak_ptr_factory_; |
| 432 | 460 |
| 433 DISALLOW_COPY_AND_ASSIGN(ShillDeviceClientStubImpl); | 461 DISALLOW_COPY_AND_ASSIGN(ShillDeviceClientStubImpl); |
| 434 }; | 462 }; |
| 435 | 463 |
| 436 } // namespace | 464 } // namespace |
| 437 | 465 |
| 438 ShillDeviceClient::ShillDeviceClient() {} | 466 ShillDeviceClient::ShillDeviceClient() {} |
| 439 | 467 |
| 440 ShillDeviceClient::~ShillDeviceClient() {} | 468 ShillDeviceClient::~ShillDeviceClient() {} |
| 441 | 469 |
| 442 // static | 470 // static |
| 443 ShillDeviceClient* ShillDeviceClient::Create( | 471 ShillDeviceClient* ShillDeviceClient::Create( |
| 444 DBusClientImplementationType type, | 472 DBusClientImplementationType type, |
| 445 dbus::Bus* bus) { | 473 dbus::Bus* bus) { |
| 446 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | 474 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) |
| 447 return new ShillDeviceClientImpl(bus); | 475 return new ShillDeviceClientImpl(bus); |
| 448 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); | 476 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); |
| 449 return new ShillDeviceClientStubImpl(); | 477 return new ShillDeviceClientStubImpl(); |
| 450 } | 478 } |
| 451 | 479 |
| 452 } // namespace chromeos | 480 } // namespace chromeos |
| OLD | NEW |