| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 #ifndef DBUS_OBJECT_MANAGER_H_ | 5 #ifndef DBUS_OBJECT_MANAGER_H_ |
| 6 #define DBUS_OBJECT_MANAGER_H_ | 6 #define DBUS_OBJECT_MANAGER_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 // : bus_(bus), | 64 // : bus_(bus), |
| 65 // weak_ptr_factory_(this) { | 65 // weak_ptr_factory_(this) { |
| 66 // object_manager_ = bus_->GetObjectManager(kServiceName, kManagerPath); | 66 // object_manager_ = bus_->GetObjectManager(kServiceName, kManagerPath); |
| 67 // object_manager_->RegisterInterface(kInterface, this); | 67 // object_manager_->RegisterInterface(kInterface, this); |
| 68 // } | 68 // } |
| 69 // | 69 // |
| 70 // virtual ExampleClient::~ExampleClient() { | 70 // virtual ExampleClient::~ExampleClient() { |
| 71 // object_manager_->UnregisterInterface(kInterface); | 71 // object_manager_->UnregisterInterface(kInterface); |
| 72 // } | 72 // } |
| 73 // | 73 // |
| 74 // The D-Bus thread manager takes care of issuing the necessary call to | 74 // This class calls GetManagedObjects() asynchronously after the remote service |
| 75 // GetManagedObjects() after the implementation classes have been set up. | 75 // becomes available and additionally refreshes managed objects after the |
| 76 // service stops or restarts. |
| 76 // | 77 // |
| 77 // The object manager interface class has one abstract method that must be | 78 // The object manager interface class has one abstract method that must be |
| 78 // implemented by the class to create Properties structures on demand. As well | 79 // implemented by the class to create Properties structures on demand. As well |
| 79 // as implementing this, you will want to implement a public GetProperties() | 80 // as implementing this, you will want to implement a public GetProperties() |
| 80 // method. | 81 // method. |
| 81 // | 82 // |
| 82 // Example: | 83 // Example: |
| 83 // dbus::PropertySet* CreateProperties(dbus::ObjectProxy* object_proxy, | 84 // dbus::PropertySet* CreateProperties(dbus::ObjectProxy* object_proxy, |
| 84 // const std::string& interface_name) | 85 // const std::string& interface_name) |
| 85 // override { | 86 // override { |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 // | 232 // |
| 232 // BLOCKING CALL. | 233 // BLOCKING CALL. |
| 233 void CleanUp(); | 234 void CleanUp(); |
| 234 | 235 |
| 235 protected: | 236 protected: |
| 236 virtual ~ObjectManager(); | 237 virtual ~ObjectManager(); |
| 237 | 238 |
| 238 private: | 239 private: |
| 239 friend class base::RefCountedThreadSafe<ObjectManager>; | 240 friend class base::RefCountedThreadSafe<ObjectManager>; |
| 240 | 241 |
| 242 // Callback for ObjectProxy::WaitForServiceToBeAvailable() that refreshes |
| 243 // objects when the service becomes initially available if |
| 244 // |signals_are_connected_| is already true. |
| 245 void OnServiceInitiallyAvailable(bool service_is_available); |
| 246 |
| 241 // Connects the InterfacesAdded and InterfacesRemoved signals and calls | 247 // Connects the InterfacesAdded and InterfacesRemoved signals and calls |
| 242 // GetManagedObjects. Called from OnSetupMatchRuleAndFilterComplete. | 248 // GetManagedObjects if |service_initially_available_| is already true. Called |
| 249 // from OnSetupMatchRuleAndFilterComplete. |
| 243 void InitializeObjects(); | 250 void InitializeObjects(); |
| 244 | 251 |
| 245 // Called from the constructor to add a match rule for PropertiesChanged | 252 // Called from the constructor to add a match rule for PropertiesChanged |
| 246 // signals on the DBus thread and set up a corresponding filter function. | 253 // signals on the DBus thread and set up a corresponding filter function. |
| 247 bool SetupMatchRuleAndFilter(); | 254 bool SetupMatchRuleAndFilter(); |
| 248 | 255 |
| 249 // Called on the origin thread once the match rule and filter have been set | 256 // Called on the origin thread once the match rule and filter have been set |
| 250 // up. |success| is false, if an error occurred during set up; it's true | 257 // up. |success| is false, if an error occurred during set up; it's true |
| 251 // otherwise. | 258 // otherwise. |
| 252 void OnSetupMatchRuleAndFilterComplete(bool success); | 259 void OnSetupMatchRuleAndFilterComplete(bool success); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 | 326 |
| 320 Bus* bus_; | 327 Bus* bus_; |
| 321 std::string service_name_; | 328 std::string service_name_; |
| 322 std::string service_name_owner_; | 329 std::string service_name_owner_; |
| 323 std::string match_rule_; | 330 std::string match_rule_; |
| 324 ObjectPath object_path_; | 331 ObjectPath object_path_; |
| 325 ObjectProxy* object_proxy_; | 332 ObjectProxy* object_proxy_; |
| 326 bool setup_success_; | 333 bool setup_success_; |
| 327 bool cleanup_called_; | 334 bool cleanup_called_; |
| 328 | 335 |
| 336 // Set to true by OnServiceInitiallyAvailable() once the service becomes |
| 337 // initially available. |
| 338 bool service_initially_available_; |
| 339 |
| 340 // Set to true by InitializeObjects() once signals are connected. |
| 341 bool signals_are_connected_; |
| 342 |
| 329 // Maps the name of an interface to the implementation class used for | 343 // Maps the name of an interface to the implementation class used for |
| 330 // instantiating PropertySet structures for that interface's properties. | 344 // instantiating PropertySet structures for that interface's properties. |
| 331 typedef std::map<std::string, Interface*> InterfaceMap; | 345 typedef std::map<std::string, Interface*> InterfaceMap; |
| 332 InterfaceMap interface_map_; | 346 InterfaceMap interface_map_; |
| 333 | 347 |
| 334 // Each managed object consists of a ObjectProxy used to make calls | 348 // Each managed object consists of a ObjectProxy used to make calls |
| 335 // against that object and a collection of D-Bus interface names and their | 349 // against that object and a collection of D-Bus interface names and their |
| 336 // associated PropertySet structures. | 350 // associated PropertySet structures. |
| 337 struct Object { | 351 struct Object { |
| 338 Object(); | 352 Object(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 355 // Note: This should remain the last member so it'll be destroyed and | 369 // Note: This should remain the last member so it'll be destroyed and |
| 356 // invalidate its weak pointers before any other members are destroyed. | 370 // invalidate its weak pointers before any other members are destroyed. |
| 357 base::WeakPtrFactory<ObjectManager> weak_ptr_factory_; | 371 base::WeakPtrFactory<ObjectManager> weak_ptr_factory_; |
| 358 | 372 |
| 359 DISALLOW_COPY_AND_ASSIGN(ObjectManager); | 373 DISALLOW_COPY_AND_ASSIGN(ObjectManager); |
| 360 }; | 374 }; |
| 361 | 375 |
| 362 } // namespace dbus | 376 } // namespace dbus |
| 363 | 377 |
| 364 #endif // DBUS_OBJECT_MANAGER_H_ | 378 #endif // DBUS_OBJECT_MANAGER_H_ |
| OLD | NEW |