| 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();
|
|
|
|
|