Index: chromeos/dbus/shill_client_helper.cc |
diff --git a/chromeos/dbus/shill_client_helper.cc b/chromeos/dbus/shill_client_helper.cc |
index c83bfe0b9d3530f1c9f859eeba37beb225e625d7..e7c6dc812ff14842feca67c1ffb0ef2beea5a541 100644 |
--- a/chromeos/dbus/shill_client_helper.cc |
+++ b/chromeos/dbus/shill_client_helper.cc |
@@ -35,6 +35,12 @@ ShillClientHelper::~ShillClientHelper() { |
void ShillClientHelper::AddPropertyChangedObserver( |
ShillPropertyChangedObserver* observer) { |
+ // Excecute all the pending MonitorPropertyChanged calls. |
+ for (size_t i = 0; i < interfaces_to_be_monitored_.size(); ++i) { |
+ MonitorPropertyChangedInternal(interfaces_to_be_monitored_[i]); |
+ } |
+ interfaces_to_be_monitored_.clear(); |
+ |
observer_list_.AddObserver(observer); |
} |
@@ -45,6 +51,17 @@ void ShillClientHelper::RemovePropertyChangedObserver( |
void ShillClientHelper::MonitorPropertyChanged( |
const std::string& interface_name) { |
+ if (observer_list_.size() > 0) { |
+ // Effectively monitor the PropertyChanged now. |
+ MonitorPropertyChangedInternal(interface_name); |
+ } else { |
+ // Delay the ConnectToSignal until an observer is added. |
+ interfaces_to_be_monitored_.push_back(interface_name); |
+ } |
+} |
+ |
+void ShillClientHelper::MonitorPropertyChangedInternal( |
+ const std::string& interface_name) { |
// We are not using dbus::PropertySet to monitor PropertyChanged signal |
// because the interface is not "org.freedesktop.DBus.Properties". |
proxy_->ConnectToSignal(interface_name, |