| OLD | NEW | 
|---|
| 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/message_loop.h" | 9 #include "base/message_loop/message_loop.h" | 
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 59       ignore_service_unknown_errors_( | 59       ignore_service_unknown_errors_( | 
| 60           options & IGNORE_SERVICE_UNKNOWN_ERRORS) { | 60           options & IGNORE_SERVICE_UNKNOWN_ERRORS) { | 
| 61 } | 61 } | 
| 62 | 62 | 
| 63 ObjectProxy::~ObjectProxy() { | 63 ObjectProxy::~ObjectProxy() { | 
| 64 } | 64 } | 
| 65 | 65 | 
| 66 // Originally we tried to make |method_call| a const reference, but we | 66 // Originally we tried to make |method_call| a const reference, but we | 
| 67 // gave up as dbus_connection_send_with_reply_and_block() takes a | 67 // gave up as dbus_connection_send_with_reply_and_block() takes a | 
| 68 // non-const pointer of DBusMessage as the second parameter. | 68 // non-const pointer of DBusMessage as the second parameter. | 
| 69 scoped_ptr<Response> ObjectProxy::CallMethodAndBlock(MethodCall* method_call, | 69 scoped_ptr<Response> ObjectProxy::CallMethodAndBlockWithErrorDetails( | 
| 70                                                      int timeout_ms) { | 70     MethodCall* method_call, int timeout_ms, ScopedDBusError* error) { | 
| 71   bus_->AssertOnDBusThread(); | 71   bus_->AssertOnDBusThread(); | 
| 72 | 72 | 
| 73   if (!bus_->Connect() || | 73   if (!bus_->Connect() || | 
| 74       !method_call->SetDestination(service_name_) || | 74       !method_call->SetDestination(service_name_) || | 
| 75       !method_call->SetPath(object_path_)) | 75       !method_call->SetPath(object_path_)) | 
| 76     return scoped_ptr<Response>(); | 76     return scoped_ptr<Response>(); | 
| 77 | 77 | 
| 78   DBusMessage* request_message = method_call->raw_message(); | 78   DBusMessage* request_message = method_call->raw_message(); | 
| 79 | 79 | 
| 80   ScopedDBusError error; |  | 
| 81 |  | 
| 82   // Send the message synchronously. | 80   // Send the message synchronously. | 
| 83   const base::TimeTicks start_time = base::TimeTicks::Now(); | 81   const base::TimeTicks start_time = base::TimeTicks::Now(); | 
| 84   DBusMessage* response_message = | 82   DBusMessage* response_message = | 
| 85       bus_->SendWithReplyAndBlock(request_message, timeout_ms, error.get()); | 83       bus_->SendWithReplyAndBlock(request_message, timeout_ms, error->get()); | 
| 86   // Record if the method call is successful, or not. 1 if successful. | 84   // Record if the method call is successful, or not. 1 if successful. | 
| 87   UMA_HISTOGRAM_ENUMERATION("DBus.SyncMethodCallSuccess", | 85   UMA_HISTOGRAM_ENUMERATION("DBus.SyncMethodCallSuccess", | 
| 88                             response_message ? 1 : 0, | 86                             response_message ? 1 : 0, | 
| 89                             kSuccessRatioHistogramMaxValue); | 87                             kSuccessRatioHistogramMaxValue); | 
| 90   statistics::AddBlockingSentMethodCall(service_name_, | 88   statistics::AddBlockingSentMethodCall(service_name_, | 
| 91                                         method_call->GetInterface(), | 89                                         method_call->GetInterface(), | 
| 92                                         method_call->GetMember()); | 90                                         method_call->GetMember()); | 
| 93 | 91 | 
| 94   if (!response_message) { | 92   if (!response_message) { | 
| 95     LogMethodCallFailure(method_call->GetInterface(), | 93     LogMethodCallFailure(method_call->GetInterface(), | 
| 96                          method_call->GetMember(), | 94                          method_call->GetMember(), | 
| 97                          error.is_set() ? error.name() : "unknown error type", | 95                          error->is_set() ? error->name() : "unknown error type", | 
| 98                          error.is_set() ? error.message() : ""); | 96                          error->is_set() ? error->message() : ""); | 
| 99     return scoped_ptr<Response>(); | 97     return scoped_ptr<Response>(); | 
| 100   } | 98   } | 
| 101   // Record time spent for the method call. Don't include failures. | 99   // Record time spent for the method call. Don't include failures. | 
| 102   UMA_HISTOGRAM_TIMES("DBus.SyncMethodCallTime", | 100   UMA_HISTOGRAM_TIMES("DBus.SyncMethodCallTime", | 
| 103                       base::TimeTicks::Now() - start_time); | 101                       base::TimeTicks::Now() - start_time); | 
| 104 | 102 | 
| 105   return Response::FromRawMessage(response_message); | 103   return Response::FromRawMessage(response_message); | 
| 106 } | 104 } | 
| 107 | 105 | 
|  | 106 scoped_ptr<Response> ObjectProxy::CallMethodAndBlock(MethodCall* method_call, | 
|  | 107                                                      int timeout_ms) { | 
|  | 108   ScopedDBusError error; | 
|  | 109   return CallMethodAndBlockWithErrorDetails(method_call, timeout_ms, &error); | 
|  | 110 } | 
|  | 111 | 
| 108 void ObjectProxy::CallMethod(MethodCall* method_call, | 112 void ObjectProxy::CallMethod(MethodCall* method_call, | 
| 109                              int timeout_ms, | 113                              int timeout_ms, | 
| 110                              ResponseCallback callback) { | 114                              ResponseCallback callback) { | 
| 111   CallMethodWithErrorCallback(method_call, timeout_ms, callback, | 115   CallMethodWithErrorCallback(method_call, timeout_ms, callback, | 
| 112                               base::Bind(&ObjectProxy::OnCallMethodError, | 116                               base::Bind(&ObjectProxy::OnCallMethodError, | 
| 113                                          this, | 117                                          this, | 
| 114                                          method_call->GetInterface(), | 118                                          method_call->GetInterface(), | 
| 115                                          method_call->GetMember(), | 119                                          method_call->GetMember(), | 
| 116                                          callback)); | 120                                          callback)); | 
| 117 } | 121 } | 
| (...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 695     bool service_is_available) { | 699     bool service_is_available) { | 
| 696   bus_->AssertOnOriginThread(); | 700   bus_->AssertOnOriginThread(); | 
| 697 | 701 | 
| 698   std::vector<WaitForServiceToBeAvailableCallback> callbacks; | 702   std::vector<WaitForServiceToBeAvailableCallback> callbacks; | 
| 699   callbacks.swap(wait_for_service_to_be_available_callbacks_); | 703   callbacks.swap(wait_for_service_to_be_available_callbacks_); | 
| 700   for (size_t i = 0; i < callbacks.size(); ++i) | 704   for (size_t i = 0; i < callbacks.size(); ++i) | 
| 701     callbacks[i].Run(service_is_available); | 705     callbacks[i].Run(service_is_available); | 
| 702 } | 706 } | 
| 703 | 707 | 
| 704 }  // namespace dbus | 708 }  // namespace dbus | 
| OLD | NEW | 
|---|