| Index: dbus/bus.cc
|
| diff --git a/dbus/bus.cc b/dbus/bus.cc
|
| index 30b6cc31cfa8f15a888deba5fd993c1175dfc045..c7584fdf6deb18c833375b2e4b1dd6a2f4646ed4 100644
|
| --- a/dbus/bus.cc
|
| +++ b/dbus/bus.cc
|
| @@ -235,6 +235,46 @@ ObjectProxy* Bus::GetObjectProxyWithOptions(const std::string& service_name,
|
| return object_proxy.get();
|
| }
|
|
|
| +bool Bus::RemoveObjectProxy(const std::string& service_name,
|
| + const ObjectPath& object_path,
|
| + const base::Closure& callback) {
|
| + return RemoveObjectProxyWithOptions(service_name, object_path,
|
| + ObjectProxy::DEFAULT_OPTIONS,
|
| + callback);
|
| +}
|
| +
|
| +bool Bus::RemoveObjectProxyWithOptions(const std::string& service_name,
|
| + const dbus::ObjectPath& object_path,
|
| + int options,
|
| + const base::Closure& callback) {
|
| + AssertOnOriginThread();
|
| +
|
| + // Check if we have the requested object proxy.
|
| + const ObjectProxyTable::key_type key(service_name + object_path.value(),
|
| + options);
|
| + ObjectProxyTable::iterator iter = object_proxy_table_.find(key);
|
| + if (iter != object_proxy_table_.end()) {
|
| + // Object is present. Remove it now and Detach in the DBus thread.
|
| + PostTaskToDBusThread(FROM_HERE, base::Bind(
|
| + &Bus::RemoveObjectProxyInternal,
|
| + this, iter->second, callback));
|
| +
|
| + object_proxy_table_.erase(iter);
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +void Bus::RemoveObjectProxyInternal(
|
| + scoped_refptr<dbus::ObjectProxy> object_proxy,
|
| + const base::Closure& callback) {
|
| + AssertOnDBusThread();
|
| +
|
| + object_proxy.get()->Detach();
|
| +
|
| + PostTaskToOriginThread(FROM_HERE, callback);
|
| +}
|
| +
|
| ExportedObject* Bus::GetExportedObject(const ObjectPath& object_path) {
|
| AssertOnOriginThread();
|
|
|
| @@ -410,21 +450,11 @@ void Bus::RequestOwnershipInternal(const std::string& service_name,
|
| success = RequestOwnershipAndBlock(service_name);
|
|
|
| PostTaskToOriginThread(FROM_HERE,
|
| - base::Bind(&Bus::OnOwnership,
|
| - this,
|
| - on_ownership_callback,
|
| + base::Bind(on_ownership_callback,
|
| service_name,
|
| success));
|
| }
|
|
|
| -void Bus::OnOwnership(OnOwnershipCallback on_ownership_callback,
|
| - const std::string& service_name,
|
| - bool success) {
|
| - AssertOnOriginThread();
|
| -
|
| - on_ownership_callback.Run(service_name, success);
|
| -}
|
| -
|
| bool Bus::RequestOwnershipAndBlock(const std::string& service_name) {
|
| DCHECK(connection_);
|
| // dbus_bus_request_name() is a blocking call.
|
|
|