| Index: mojo/public/cpp/bindings/lib/interface_endpoint_client.cc | 
| diff --git a/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc b/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc | 
| index 3eca5a16fe165b718bd93add4d0e6d74669cfc9a..4682e72fadc43f1b905f00037d19a6124a55dfdc 100644 | 
| --- a/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc | 
| +++ b/mojo/public/cpp/bindings/lib/interface_endpoint_client.cc | 
| @@ -234,8 +234,9 @@ bool InterfaceEndpointClient::Accept(Message* message) { | 
| return controller_->SendMessage(message); | 
| } | 
|  | 
| -bool InterfaceEndpointClient::AcceptWithResponder(Message* message, | 
| -                                                  MessageReceiver* responder) { | 
| +bool InterfaceEndpointClient::AcceptWithResponder( | 
| +    Message* message, | 
| +    std::unique_ptr<MessageReceiver> responder) { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| DCHECK(message->has_flag(Message::kFlagExpectsResponse)); | 
| DCHECK(!handle_.pending_association()); | 
| @@ -261,15 +262,13 @@ bool InterfaceEndpointClient::AcceptWithResponder(Message* message, | 
| return false; | 
|  | 
| if (!is_sync) { | 
| -    // We assume ownership of |responder|. | 
| -    async_responders_[request_id] = base::WrapUnique(responder); | 
| +    async_responders_[request_id] = std::move(responder); | 
| return true; | 
| } | 
|  | 
| SyncCallRestrictions::AssertSyncCallAllowed(); | 
|  | 
| bool response_received = false; | 
| -  std::unique_ptr<MessageReceiver> sync_responder(responder); | 
| sync_responses_.insert(std::make_pair( | 
| request_id, base::MakeUnique<SyncResponseInfo>(&response_received))); | 
|  | 
| @@ -282,11 +281,10 @@ bool InterfaceEndpointClient::AcceptWithResponder(Message* message, | 
| auto iter = sync_responses_.find(request_id); | 
| DCHECK_EQ(&response_received, iter->second->response_received); | 
| if (response_received) | 
| -      ignore_result(sync_responder->Accept(&iter->second->response)); | 
| +      ignore_result(responder->Accept(&iter->second->response)); | 
| sync_responses_.erase(iter); | 
| } | 
|  | 
| -  // Return true means that we take ownership of |responder|. | 
| return true; | 
| } | 
|  | 
| @@ -375,17 +373,16 @@ bool InterfaceEndpointClient::HandleValidatedMessage(Message* message) { | 
| } | 
|  | 
| if (message->has_flag(Message::kFlagExpectsResponse)) { | 
| -    MessageReceiverWithStatus* responder = | 
| -        new ResponderThunk(weak_ptr_factory_.GetWeakPtr(), task_runner_); | 
| -    bool ok = false; | 
| +    std::unique_ptr<MessageReceiverWithStatus> responder = | 
| +        base::MakeUnique<ResponderThunk>(weak_ptr_factory_.GetWeakPtr(), | 
| +                                         task_runner_); | 
| if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { | 
| -      ok = control_message_handler_.AcceptWithResponder(message, responder); | 
| +      return control_message_handler_.AcceptWithResponder(message, | 
| +                                                          std::move(responder)); | 
| } else { | 
| -      ok = incoming_receiver_->AcceptWithResponder(message, responder); | 
| +      return incoming_receiver_->AcceptWithResponder(message, | 
| +                                                     std::move(responder)); | 
| } | 
| -    if (!ok) | 
| -      delete responder; | 
| -    return ok; | 
| } else if (message->has_flag(Message::kFlagIsResponse)) { | 
| uint64_t request_id = message->request_id(); | 
|  | 
|  |