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

Unified Diff: dbus/object_proxy.cc

Issue 14568005: Add a method to check if a D-Bus service has an owner. Use it for mtpd. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix cros compile Created 7 years, 8 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 | « dbus/bus.cc ('k') | device/media_transfer_protocol/media_transfer_protocol_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dbus/object_proxy.cc
===================================================================
--- dbus/object_proxy.cc (revision 197465)
+++ dbus/object_proxy.cc (working copy)
@@ -18,6 +18,8 @@
#include "dbus/object_proxy.h"
#include "dbus/scoped_dbus_error.h"
+namespace dbus {
+
namespace {
const char kErrorServiceUnknown[] = "org.freedesktop.DBus.Error.ServiceUnknown";
@@ -28,6 +30,15 @@
// The path of D-Bus Object sending NameOwnerChanged signal.
const char kDBusSystemObjectPath[] = "/org/freedesktop/DBus";
+// The D-Bus Object interface.
+const char kDBusSystemObjectInterface[] = "org.freedesktop.DBus";
+
+// The D-Bus Object address.
+const char kDBusSystemObjectAddress[] = "org.freedesktop.DBus";
+
+// The NameOwnerChanged member in |kDBusSystemObjectInterface|.
+const char kNameOwnerChangedMember[] = "NameOwnerChanged";
+
// Gets the absolute signal name by concatenating the interface name and
// the signal name. Used for building keys for method_table_ in
// ObjectProxy.
@@ -38,13 +49,11 @@
}
// An empty function used for ObjectProxy::EmptyResponseCallback().
-void EmptyResponseCallbackBody(dbus::Response* unused_response) {
+void EmptyResponseCallbackBody(Response* /*response*/) {
}
} // namespace
-namespace dbus {
-
ObjectProxy::ObjectProxy(Bus* bus,
const std::string& service_name,
const ObjectPath& object_path,
@@ -285,18 +294,17 @@
} else if (dbus_message_get_type(response_message) ==
DBUS_MESSAGE_TYPE_ERROR) {
// This will take |response_message| and release (unref) it.
- scoped_ptr<dbus::ErrorResponse> error_response(
- dbus::ErrorResponse::FromRawMessage(response_message));
+ scoped_ptr<ErrorResponse> error_response(
+ ErrorResponse::FromRawMessage(response_message));
error_callback.Run(error_response.get());
// Delete the message on the D-Bus thread. See below for why.
bus_->PostTaskToDBusThread(
FROM_HERE,
- base::Bind(&base::DeletePointer<dbus::ErrorResponse>,
+ base::Bind(&base::DeletePointer<ErrorResponse>,
error_response.release()));
} else {
// This will take |response_message| and release (unref) it.
- scoped_ptr<dbus::Response> response(
- dbus::Response::FromRawMessage(response_message));
+ scoped_ptr<Response> response(Response::FromRawMessage(response_message));
// The response is successfully received.
response_callback.Run(response.get());
// The message should be deleted on the D-Bus thread for a complicated
@@ -319,8 +327,7 @@
// thread, not from the current thread here, which is likely UI thread.
bus_->PostTaskToDBusThread(
FROM_HERE,
- base::Bind(&base::DeletePointer<dbus::Response>,
- response.release()));
+ base::Bind(&base::DeletePointer<Response>, response.release()));
method_call_successful = true;
// Record time spent for the method call. Don't include failures.
@@ -439,10 +446,10 @@
// Verify the signal comes from the object we're proxying for, this is
// our last chance to return DBUS_HANDLER_RESULT_NOT_YET_HANDLED and
// allow other object proxies to handle instead.
- const dbus::ObjectPath path = signal->GetPath();
+ const ObjectPath path = signal->GetPath();
if (path != object_path_) {
if (path.value() == kDBusSystemObjectPath &&
- signal->GetMember() == "NameOwnerChanged") {
+ signal->GetMember() == kNameOwnerChangedMember) {
// Handle NameOwnerChanged separately
return HandleNameOwnerChanged(signal.Pass());
}
@@ -507,7 +514,7 @@
// RunResponseCallback().
bus_->PostTaskToDBusThread(
FROM_HERE,
- base::Bind(&base::DeletePointer<dbus::Signal>, signal));
+ base::Bind(&base::DeletePointer<Signal>, signal));
// Record time spent for handling the signal.
UMA_HISTOGRAM_TIMES("DBus.SignalHandleTime",
@@ -541,7 +548,7 @@
ErrorResponse* error_response) {
if (error_response) {
// Error message may contain the error message as string.
- dbus::MessageReader reader(error_response);
+ MessageReader reader(error_response);
std::string error_message;
reader.PopString(&error_message);
LogMethodCallFailure(interface_name,
@@ -564,8 +571,8 @@
ScopedDBusError error;
bus_->AddMatch(match_rule, error.get());
if (error.is_set()) {
- LOG(ERROR) << "Failed to add match rule \"" << match_rule << "\". Got " <<
- error.name() << ": " << error.message();
+ LOG(ERROR) << "Failed to add match rule \"" << match_rule << "\". Got "
+ << error.name() << ": " << error.message();
return false;
} else {
// Store the match rule, so that we can remove this in Detach().
@@ -594,8 +601,8 @@
ScopedDBusError error;
bus_->AddMatch(match_rule, error.get());
if (error.is_set()) {
- LOG(ERROR) << "Failed to add match rule \"" << match_rule << "\". Got " <<
- error.name() << ": " << error.message();
+ LOG(ERROR) << "Failed to add match rule \"" << match_rule << "\". Got "
+ << error.name() << ": " << error.message();
return false;
}
// Store the match rule, so that we can remove this in Detach().
@@ -605,37 +612,8 @@
void ObjectProxy::UpdateNameOwnerAndBlock() {
bus_->AssertOnDBusThread();
-
- MethodCall get_name_owner_call("org.freedesktop.DBus", "GetNameOwner");
- MessageWriter writer(&get_name_owner_call);
- writer.AppendString(service_name_);
- VLOG(1) << "Method call: " << get_name_owner_call.ToString();
-
- const dbus::ObjectPath obj_path("/org/freedesktop/DBus");
- ScopedDBusError error;
- if (!get_name_owner_call.SetDestination("org.freedesktop.DBus") ||
- !get_name_owner_call.SetPath(obj_path)) {
- LOG(ERROR) << "Failed to get name owner.";
- return;
- }
-
- DBusMessage* response_message = bus_->SendWithReplyAndBlock(
- get_name_owner_call.raw_message(),
- TIMEOUT_USE_DEFAULT,
- error.get());
- if (!response_message) {
- LOG(ERROR) << "Failed to get name owner. Got " << error.name() << ": " <<
- error.message();
- return;
- }
- scoped_ptr<Response> response(Response::FromRawMessage(response_message));
- MessageReader reader(response.get());
-
- std::string new_service_name_owner;
- if (reader.PopString(&new_service_name_owner))
- service_name_owner_ = new_service_name_owner;
- else
- service_name_owner_.clear();
+ service_name_owner_ =
+ bus_->GetServiceOwnerAndBlock(service_name_, Bus::SUPPRESS_ERRORS);
}
DBusHandlerResult ObjectProxy::HandleNameOwnerChanged(
@@ -644,9 +622,9 @@
bus_->AssertOnDBusThread();
// Confirm the validity of the NameOwnerChanged signal.
- if (signal->GetMember() == "NameOwnerChanged" &&
- signal->GetInterface() == "org.freedesktop.DBus" &&
- signal->GetSender() == "org.freedesktop.DBus") {
+ if (signal->GetMember() == kNameOwnerChangedMember &&
+ signal->GetInterface() == kDBusSystemObjectInterface &&
+ signal->GetSender() == kDBusSystemObjectAddress) {
MessageReader reader(signal.get());
std::string name, old_owner, new_owner;
if (reader.PopString(&name) &&
« no previous file with comments | « dbus/bus.cc ('k') | device/media_transfer_protocol/media_transfer_protocol_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698