| Index: dbus/test_service.cc | 
| diff --git a/dbus/test_service.cc b/dbus/test_service.cc | 
| index 21a885d0b67fa4a4ede39046fb3d8116cb26ecac..064b91ee60441eeb30563d65865a481c3299e9cc 100644 | 
| --- a/dbus/test_service.cc | 
| +++ b/dbus/test_service.cc | 
| @@ -142,6 +142,24 @@ void TestService::OnOwnership(base::Callback<void(bool)> callback, | 
| on_name_obtained_.Signal(); | 
| } | 
|  | 
| +void TestService::ReleaseOwnership(base::Closure callback) { | 
| +  bus_->GetDBusTaskRunner()->PostTask( | 
| +      FROM_HERE, | 
| +      base::Bind(&TestService::ReleaseOwnershipInternal, | 
| +                 base::Unretained(this), | 
| +                 callback)); | 
| +} | 
| + | 
| +void TestService::ReleaseOwnershipInternal( | 
| +    base::Closure callback) { | 
| +  bus_->ReleaseOwnership("org.chromium.TestService"); | 
| +  has_ownership_ = false; | 
| + | 
| +  bus_->GetOriginTaskRunner()->PostTask( | 
| +      FROM_HERE, | 
| +      callback); | 
| +} | 
| + | 
| void TestService::OnExported(const std::string& interface_name, | 
| const std::string& method_name, | 
| bool success) { | 
| @@ -443,11 +461,46 @@ void TestService::PerformAction( | 
| AddObject(object_path); | 
| else if (action == "RemoveObject") | 
| RemoveObject(object_path); | 
| +  else if (action == "ReleaseOwnership") { | 
| +    ReleaseOwnership(base::Bind(&TestService::PerformActionResponse, | 
| +                                base::Unretained(this), | 
| +                                method_call, response_sender)); | 
| +    return; | 
| +  } else if (action == "Ownership") { | 
| +    ReleaseOwnership(base::Bind(&TestService::OwnershipReleased, | 
| +                                base::Unretained(this), | 
| +                                method_call, response_sender)); | 
| +    return; | 
| +  } | 
|  | 
| scoped_ptr<Response> response = Response::FromMethodCall(method_call); | 
| response_sender.Run(response.Pass()); | 
| } | 
|  | 
| +void TestService::PerformActionResponse( | 
| +    MethodCall* method_call, | 
| +    ExportedObject::ResponseSender response_sender) { | 
| +  scoped_ptr<Response> response = Response::FromMethodCall(method_call); | 
| +  response_sender.Run(response.Pass()); | 
| +} | 
| + | 
| +void TestService::OwnershipReleased( | 
| +    MethodCall* method_call, | 
| +    ExportedObject::ResponseSender response_sender) { | 
| +  RequestOwnership(base::Bind(&TestService::OwnershipRegained, | 
| +                              base::Unretained(this), | 
| +                              method_call, response_sender)); | 
| +} | 
| + | 
| + | 
| +void TestService::OwnershipRegained( | 
| +    MethodCall* method_call, | 
| +    ExportedObject::ResponseSender response_sender, | 
| +    bool success) { | 
| +  PerformActionResponse(method_call, response_sender); | 
| +} | 
| + | 
| + | 
| void TestService::GetManagedObjects( | 
| MethodCall* method_call, | 
| ExportedObject::ResponseSender response_sender) { | 
|  |