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..c0c5890712cf9bda4533edcd3611ed475b25897e 100644 |
--- a/chromeos/dbus/shill_client_helper.cc |
+++ b/chromeos/dbus/shill_client_helper.cc |
@@ -35,6 +35,14 @@ ShillClientHelper::~ShillClientHelper() { |
void ShillClientHelper::AddPropertyChangedObserver( |
ShillPropertyChangedObserver* observer) { |
+ // Excecutes all the pending MonitorPropertyChanged calls. |
hashimoto
2013/02/13 05:56:00
nitty-nit: s/Executes/Execute/
Our style guide doe
deymo
2013/02/13 19:18:11
Done.
|
+ for (std::vector<std::string>::iterator it = |
hashimoto
2013/02/13 05:56:00
nit: "for (size_t i = 0; i < interfaces_to_be_moni
deymo
2013/02/13 19:18:11
Done.
|
+ interfaces_to_be_monitored_.begin(); |
+ it != interfaces_to_be_monitored_.end(); ++it) { |
+ MonitorPropertyChangedInternal(*it); |
+ } |
+ interfaces_to_be_monitored_.clear(); |
+ |
observer_list_.AddObserver(observer); |
} |
@@ -45,6 +53,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, |