Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2227)

Unified Diff: dbus/bus.h

Issue 15741025: Linux/CrOS: Retry connecting to mtpd. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: address nits Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | dbus/bus.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_;
« no previous file with comments | « no previous file | dbus/bus.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698