Index: dbus/object_proxy.h |
diff --git a/dbus/object_proxy.h b/dbus/object_proxy.h |
index eb09b8c0e0418035439aeb5490b96275694fac73..620622f076186bc831280c76bfafcff5f1569d80 100644 |
--- a/dbus/object_proxy.h |
+++ b/dbus/object_proxy.h |
@@ -21,6 +21,7 @@ |
namespace dbus { |
class Bus; |
+class ErrorResponse; |
class MethodCall; |
class Response; |
class Signal; |
@@ -59,6 +60,10 @@ class ObjectProxy : public base::RefCountedThreadSafe<ObjectProxy> { |
TIMEOUT_INFINITE = 0x7fffffff, |
}; |
+ // Called when an error response is returned or no response is returned. |
+ // Used for CallMethodWithErrorCallback(). |
+ typedef base::Callback<void(ErrorResponse*)> ErrorCallback; |
+ |
// Called when the response is returned. Used for CallMethod(). |
typedef base::Callback<void(Response*)> ResponseCallback; |
@@ -99,6 +104,26 @@ class ObjectProxy : public base::RefCountedThreadSafe<ObjectProxy> { |
int timeout_ms, |
ResponseCallback callback); |
+ // Requests to call the method of the remote object. |
+ // |
+ // |callback| and |error_callback| will be called in the origin thread, once |
+ // the method call is complete. As it's called in the origin thread, |
+ // |callback| can safely reference objects in the origin thread (i.e. |
+ // UI thread in most cases). If the caller is not interested in the response |
+ // from the method (i.e. calling a method that does not return a value), |
+ // EmptyResponseCallback() can be passed to the |callback| parameter. |
+ // |
+ // If the method call is successful, a pointer to Response object will |
+ // be passed to the callback. If unsuccessful, the error callback will be |
+ // called and a pointer to ErrorResponse object will be passed to the error |
+ // callback if available, otherwise NULL will be passed. |
+ // |
+ // Must be called in the origin thread. |
+ virtual void CallMethodWithErrorCallback(MethodCall* method_call, |
+ int timeout_ms, |
+ ResponseCallback callback, |
+ ErrorCallback error_callback); |
+ |
// Requests to connect to the signal from the remote object, replacing |
// any previous |signal_callback| connected to that signal. |
// |
@@ -138,11 +163,13 @@ class ObjectProxy : public base::RefCountedThreadSafe<ObjectProxy> { |
struct OnPendingCallIsCompleteData { |
OnPendingCallIsCompleteData(ObjectProxy* in_object_proxy, |
ResponseCallback in_response_callback, |
+ ErrorCallback error_callback, |
base::TimeTicks start_time); |
~OnPendingCallIsCompleteData(); |
ObjectProxy* object_proxy; |
ResponseCallback response_callback; |
+ ErrorCallback error_callback; |
base::TimeTicks start_time; |
}; |
@@ -151,15 +178,18 @@ class ObjectProxy : public base::RefCountedThreadSafe<ObjectProxy> { |
void StartAsyncMethodCall(int timeout_ms, |
DBusMessage* request_message, |
ResponseCallback response_callback, |
+ ErrorCallback error_callback, |
base::TimeTicks start_time); |
// Called when the pending call is complete. |
void OnPendingCallIsComplete(DBusPendingCall* pending_call, |
ResponseCallback response_callback, |
+ ErrorCallback error_callback, |
base::TimeTicks start_time); |
// Runs the response callback with the given response object. |
void RunResponseCallback(ResponseCallback response_callback, |
+ ErrorCallback error_callback, |
base::TimeTicks start_time, |
DBusMessage* response_message); |
@@ -199,6 +229,10 @@ class ObjectProxy : public base::RefCountedThreadSafe<ObjectProxy> { |
void LogMethodCallFailure(const base::StringPiece& error_name, |
const base::StringPiece& error_message) const; |
+ // Used as ErrorCallback by CallMethod(). |
+ void OnCallMethodError(ResponseCallback response_callback, |
+ ErrorResponse* error_response); |
+ |
scoped_refptr<Bus> bus_; |
std::string service_name_; |
ObjectPath object_path_; |