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

Side by Side Diff: dbus/object_proxy.cc

Issue 10409065: Change setters of dbus::Message to return false instead of aborting on errors (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: _ Created 8 years, 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « dbus/message_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "dbus/bus.h" 5 #include "dbus/bus.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 ObjectProxy::~ObjectProxy() { 56 ObjectProxy::~ObjectProxy() {
57 } 57 }
58 58
59 // Originally we tried to make |method_call| a const reference, but we 59 // Originally we tried to make |method_call| a const reference, but we
60 // gave up as dbus_connection_send_with_reply_and_block() takes a 60 // gave up as dbus_connection_send_with_reply_and_block() takes a
61 // non-const pointer of DBusMessage as the second parameter. 61 // non-const pointer of DBusMessage as the second parameter.
62 Response* ObjectProxy::CallMethodAndBlock(MethodCall* method_call, 62 Response* ObjectProxy::CallMethodAndBlock(MethodCall* method_call,
63 int timeout_ms) { 63 int timeout_ms) {
64 bus_->AssertOnDBusThread(); 64 bus_->AssertOnDBusThread();
65 65
66 if (!bus_->Connect()) 66 if (!bus_->Connect() ||
67 !method_call->SetDestination(service_name_) ||
68 !method_call->SetPath(object_path_))
67 return NULL; 69 return NULL;
68 70
69 method_call->SetDestination(service_name_);
70 method_call->SetPath(object_path_);
71 DBusMessage* request_message = method_call->raw_message(); 71 DBusMessage* request_message = method_call->raw_message();
72 72
73 ScopedDBusError error; 73 ScopedDBusError error;
74 74
75 // Send the message synchronously. 75 // Send the message synchronously.
76 const base::TimeTicks start_time = base::TimeTicks::Now(); 76 const base::TimeTicks start_time = base::TimeTicks::Now();
77 DBusMessage* response_message = 77 DBusMessage* response_message =
78 bus_->SendWithReplyAndBlock(request_message, timeout_ms, error.get()); 78 bus_->SendWithReplyAndBlock(request_message, timeout_ms, error.get());
79 // Record if the method call is successful, or not. 1 if successful. 79 // Record if the method call is successful, or not. 1 if successful.
80 UMA_HISTOGRAM_ENUMERATION("DBus.SyncMethodCallSuccess", 80 UMA_HISTOGRAM_ENUMERATION("DBus.SyncMethodCallSuccess",
(...skipping 20 matching lines...) Expand all
101 this, 101 this,
102 callback)); 102 callback));
103 } 103 }
104 104
105 void ObjectProxy::CallMethodWithErrorCallback(MethodCall* method_call, 105 void ObjectProxy::CallMethodWithErrorCallback(MethodCall* method_call,
106 int timeout_ms, 106 int timeout_ms,
107 ResponseCallback callback, 107 ResponseCallback callback,
108 ErrorCallback error_callback) { 108 ErrorCallback error_callback) {
109 bus_->AssertOnOriginThread(); 109 bus_->AssertOnOriginThread();
110 110
111 method_call->SetDestination(service_name_); 111 const base::TimeTicks start_time = base::TimeTicks::Now();
112 method_call->SetPath(object_path_); 112
113 if (!method_call->SetDestination(service_name_) ||
114 !method_call->SetPath(object_path_)) {
115 // In case of a failure, run the error callback with NULL.
116 DBusMessage* response_message = NULL;
117 base::Closure task = base::Bind(&ObjectProxy::RunResponseCallback,
118 this,
119 callback,
120 error_callback,
121 start_time,
122 response_message);
123 bus_->PostTaskToOriginThread(FROM_HERE, task);
124 return;
125 }
126
113 // Increment the reference count so we can safely reference the 127 // Increment the reference count so we can safely reference the
114 // underlying request message until the method call is complete. This 128 // underlying request message until the method call is complete. This
115 // will be unref'ed in StartAsyncMethodCall(). 129 // will be unref'ed in StartAsyncMethodCall().
116 DBusMessage* request_message = method_call->raw_message(); 130 DBusMessage* request_message = method_call->raw_message();
117 dbus_message_ref(request_message); 131 dbus_message_ref(request_message);
118 132
119 const base::TimeTicks start_time = base::TimeTicks::Now();
120 base::Closure task = base::Bind(&ObjectProxy::StartAsyncMethodCall, 133 base::Closure task = base::Bind(&ObjectProxy::StartAsyncMethodCall,
121 this, 134 this,
122 timeout_ms, 135 timeout_ms,
123 request_message, 136 request_message,
124 callback, 137 callback,
125 error_callback, 138 error_callback,
126 start_time); 139 start_time);
127 // Wait for the response in the D-Bus thread. 140 // Wait for the response in the D-Bus thread.
128 bus_->PostTaskToDBusThread(FROM_HERE, task); 141 bus_->PostTaskToDBusThread(FROM_HERE, task);
129 } 142 }
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 // Error message may contain the error message as string. 463 // Error message may contain the error message as string.
451 dbus::MessageReader reader(error_response); 464 dbus::MessageReader reader(error_response);
452 std::string error_message; 465 std::string error_message;
453 reader.PopString(&error_message); 466 reader.PopString(&error_message);
454 LogMethodCallFailure(error_response->GetErrorName(), error_message); 467 LogMethodCallFailure(error_response->GetErrorName(), error_message);
455 } 468 }
456 response_callback.Run(NULL); 469 response_callback.Run(NULL);
457 } 470 }
458 471
459 } // namespace dbus 472 } // namespace dbus
OLDNEW
« no previous file with comments | « dbus/message_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698