Chromium Code Reviews| Index: dbus/object_manager.cc |
| diff --git a/dbus/object_manager.cc b/dbus/object_manager.cc |
| index 56143c758b4bb9b40f72e0f55075e0caa1f77ddc..1e165af141c07496805ae65de0d9314a8bd880e7 100644 |
| --- a/dbus/object_manager.cc |
| +++ b/dbus/object_manager.cc |
| @@ -37,12 +37,17 @@ ObjectManager::ObjectManager(Bus* bus, |
| object_path_(object_path), |
| setup_success_(false), |
| cleanup_called_(false), |
| + service_initially_available_(false), |
| + signals_are_connected_(false), |
| weak_ptr_factory_(this) { |
| DVLOG(1) << "Creating ObjectManager for " << service_name_ |
| << " " << object_path_.value(); |
| DCHECK(bus_); |
| bus_->AssertOnOriginThread(); |
| object_proxy_ = bus_->GetObjectProxy(service_name_, object_path_); |
| + object_proxy_->WaitForServiceToBeAvailable( |
| + base::Bind(&ObjectManager::OnServiceInitiallyAvailable, |
| + weak_ptr_factory_.GetWeakPtr())); |
| object_proxy_->SetNameOwnerChangedCallback( |
| base::Bind(&ObjectManager::NameOwnerChanged, |
| weak_ptr_factory_.GetWeakPtr())); |
| @@ -167,6 +172,18 @@ void ObjectManager::CleanUp() { |
| match_rule_.clear(); |
| } |
| +void ObjectManager::OnServiceInitiallyAvailable(bool service_is_available) { |
| + if (!service_is_available) { |
| + LOG(WARNING) << service_name_ << " " << object_path_.value() |
| + << ": Failed to wait for service to become available"; |
| + return; |
| + } |
| + |
| + service_initially_available_ = true; |
| + if (signals_are_connected_) |
| + GetManagedObjects(); |
| +} |
| + |
| void ObjectManager::InitializeObjects() { |
| DCHECK(bus_); |
| DCHECK(object_proxy_); |
| @@ -193,7 +210,9 @@ void ObjectManager::InitializeObjects() { |
| base::Bind(&ObjectManager::InterfacesRemovedConnected, |
| weak_ptr_factory_.GetWeakPtr())); |
| - GetManagedObjects(); |
| + signals_are_connected_ = true; |
| + if (service_initially_available_) |
| + GetManagedObjects(); |
|
hashimoto
2016/09/01 03:26:07
How about calling WaitForServiceToBeAvailable() he
Daniel Erat
2016/09/01 04:15:55
thanks, that seems like a good suggestion! and no,
|
| } |
| bool ObjectManager::SetupMatchRuleAndFilter() { |