| Index: dbus/bus.h
|
| ===================================================================
|
| --- dbus/bus.h (revision 204929)
|
| +++ dbus/bus.h (working copy)
|
| @@ -11,6 +11,7 @@
|
| #include <set>
|
| #include <string>
|
| #include <utility>
|
| +#include <vector>
|
|
|
| #include "base/callback.h"
|
| #include "base/memory/ref_counted.h"
|
| @@ -22,7 +23,6 @@
|
| namespace base {
|
| class SequencedTaskRunner;
|
| class SingleThreadTaskRunner;
|
| -class Thread;
|
| }
|
|
|
| namespace tracked_objects {
|
| @@ -563,6 +563,28 @@
|
| virtual void GetServiceOwner(const std::string& service_name,
|
| const GetServiceOwnerCallback& callback);
|
|
|
| + // Whenever the owner for |service_name| changes, run |callback| with the
|
| + // name of the new owner. If the owner goes away, then |callback| receives
|
| + // an empty string.
|
| + //
|
| + // Any unique (service_name, callback) can be used. Duplicate are ignored.
|
| + // |service_name| must not be empty and |callback| must not be null.
|
| + //
|
| + // Must be called in the origin thread.
|
| + virtual void ListenForServiceOwnerChange(
|
| + const std::string& service_name,
|
| + const GetServiceOwnerCallback& callback);
|
| +
|
| + // Stop listening for |service_name| owner changes for |callback|.
|
| + // Any unique (service_name, callback) can be used. Non-registered callbacks
|
| + // for a given service name are ignored.
|
| + // |service_name| must not be empty and |callback| must not be null.
|
| + //
|
| + // Must be called in the origin thread.
|
| + virtual void UnlistenForServiceOwnerChange(
|
| + const std::string& service_name,
|
| + const GetServiceOwnerCallback& callback);
|
| +
|
| // Returns true if the bus is connected to D-Bus.
|
| bool is_connected() { return connection_ != NULL; }
|
|
|
| @@ -592,6 +614,16 @@
|
| void GetServiceOwnerInternal(const std::string& service_name,
|
| const GetServiceOwnerCallback& callback);
|
|
|
| + // Helper function used for ListenForServiceOwnerChange().
|
| + void ListenForServiceOwnerChangeInternal(
|
| + const std::string& service_name,
|
| + const GetServiceOwnerCallback& callback);
|
| +
|
| + // Helper function used for UnListenForServiceOwnerChange().
|
| + void UnlistenForServiceOwnerChangeInternal(
|
| + const std::string& service_name,
|
| + const GetServiceOwnerCallback& callback);
|
| +
|
| // Processes the all incoming data to the connection, if any.
|
| //
|
| // BLOCKING CALL.
|
| @@ -625,6 +657,9 @@
|
| // Called when the connection is diconnected.
|
| void OnConnectionDisconnected(DBusConnection* connection);
|
|
|
| + // Called when a service owner change occurs.
|
| + void OnServiceOwnerChanged(DBusMessage* message);
|
| +
|
| // Callback helper functions. Redirects to the corresponding member function.
|
| static dbus_bool_t OnAddWatchThunk(DBusWatch* raw_watch, void* data);
|
| static void OnRemoveWatchThunk(DBusWatch* raw_watch, void* data);
|
| @@ -636,12 +671,18 @@
|
| DBusDispatchStatus status,
|
| void* data);
|
|
|
| - // Calls OnConnectionDisconnected if the Diconnected signal is received.
|
| + // Calls OnConnectionDisconnected if the Disconnected signal is received.
|
| static DBusHandlerResult OnConnectionDisconnectedFilter(
|
| DBusConnection* connection,
|
| DBusMessage* message,
|
| void* user_data);
|
|
|
| + // Calls OnServiceOwnerChanged for a NameOwnerChanged signal.
|
| + static DBusHandlerResult OnServiceOwnerChangedFilter(
|
| + DBusConnection* connection,
|
| + DBusMessage* message,
|
| + void* user_data);
|
| +
|
| const BusType bus_type_;
|
| const ConnectionType connection_type_;
|
| scoped_refptr<base::SequencedTaskRunner> dbus_task_runner_;
|
| @@ -684,6 +725,16 @@
|
| scoped_refptr<dbus::ObjectManager> > ObjectManagerTable;
|
| ObjectManagerTable object_manager_table_;
|
|
|
| + // A map of NameOwnerChanged signals to listen for and the callbacks to run
|
| + // on the origin thread when the owner changes.
|
| + // Only accessed on the DBus thread.
|
| + // Key: Service name
|
| + // Value: Vector of callbacks. Unique and expected to be small. Not using
|
| + // std::set here because base::Callbacks don't have a '<' operator.
|
| + typedef std::map<std::string, std::vector<GetServiceOwnerCallback> >
|
| + ServiceOwnerChangedListenerMap;
|
| + ServiceOwnerChangedListenerMap service_owner_changed_listener_map_;
|
| +
|
| bool async_operations_set_up_;
|
| bool shutdown_completed_;
|
|
|
|
|