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

Unified Diff: mojo/public/cpp/bindings/lib/interface_endpoint_client.cc

Issue 2766523002: mojo: MessageReceiver*::AcceptWithResponder() now take a unique_ptr to the responder (Closed)
Patch Set: comments Created 3 years, 9 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
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();
« no previous file with comments | « mojo/public/cpp/bindings/lib/control_message_proxy.cc ('k') | mojo/public/cpp/bindings/lib/interface_ptr_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698