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

Unified Diff: mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl

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/tools/bindings/generators/cpp_templates/interface_definition.tmpl
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
index a23b10785770ad4ab9ec8dc59dda7a96aad10917..aba18380af7250f682a19e24850246062dcbfc17 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
@@ -169,14 +169,14 @@ bool {{proxy_name}}::{{method.name}}(
"&serialization_context")}}
bool result = false;
- mojo::MessageReceiver* responder =
+ std::unique_ptr<mojo::MessageReceiver> responder(
new {{class_name}}_{{method.name}}_HandleSyncResponse(
&result
{%- for param in method.response_parameters -%}
, param_{{param.name}}
-{%- endfor %});
- if (!receiver_->AcceptWithResponder(builder.message(), responder))
- delete responder;
+{%- endfor %}));
+ ignore_result(receiver_->AcceptWithResponder(builder.message(),
+ std::move(responder)));
return result;
}
{%- endif %}
@@ -200,15 +200,15 @@ void {{proxy_name}}::{{method.name}}(
"&serialization_context")}}
{%- if method.response_parameters != None %}
- mojo::MessageReceiver* responder =
- new {{class_name}}_{{method.name}}_ForwardToCallback(std::move(callback));
- if (!receiver_->AcceptWithResponder(builder.message(), responder))
- delete responder;
+ std::unique_ptr<mojo::MessageReceiver> responder(
+ new {{class_name}}_{{method.name}}_ForwardToCallback(
+ std::move(callback)));
+ ignore_result(receiver_->AcceptWithResponder(builder.message(),
+ std::move(responder)));
{%- else %}
- bool ok = receiver_->Accept(builder.message());
- // This return value may be ignored as !ok implies the Connector has
+ // This return value may be ignored as false implies the Connector has
// encountered an error, which will be visible through other means.
- ALLOW_UNUSED_LOCAL(ok);
+ ignore_result(receiver_->Accept(builder.message()));
{%- endif %}
}
{%- endfor %}
@@ -226,10 +226,10 @@ class {{class_name}}_{{method.name}}_ProxyToResponder {
static {{class_name}}::{{method.name}}Callback CreateCallback(
uint64_t request_id,
bool is_sync,
- mojo::MessageReceiverWithStatus* responder) {
+ std::unique_ptr<mojo::MessageReceiverWithStatus> responder) {
std::unique_ptr<{{class_name}}_{{method.name}}_ProxyToResponder> proxy(
new {{class_name}}_{{method.name}}_ProxyToResponder(
- request_id, is_sync, responder));
+ request_id, is_sync, std::move(responder)));
return base::Bind(&{{class_name}}_{{method.name}}_ProxyToResponder::Run,
base::Passed(&proxy));
}
@@ -245,17 +245,17 @@ class {{class_name}}_{{method.name}}_ProxyToResponder {
#endif
// If the Callback was dropped then deleting the responder will close
// the pipe so the calling application knows to stop waiting for a reply.
- delete responder_;
+ responder_ = nullptr;
}
private:
{{class_name}}_{{method.name}}_ProxyToResponder(
uint64_t request_id,
bool is_sync,
- mojo::MessageReceiverWithStatus* responder)
+ std::unique_ptr<mojo::MessageReceiverWithStatus> responder)
: request_id_(request_id),
is_sync_(is_sync),
- responder_(responder) {
+ responder_(std::move(responder)) {
}
void Run(
@@ -264,7 +264,7 @@ class {{class_name}}_{{method.name}}_ProxyToResponder {
uint64_t request_id_;
bool is_sync_;
- mojo::MessageReceiverWithStatus* responder_;
+ std::unique_ptr<mojo::MessageReceiverWithStatus> responder_;
DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder);
};
@@ -285,12 +285,10 @@ void {{class_name}}_{{method.name}}_ProxyToResponder::Run(
{{build_message(response_params_struct, "in_%s", params_description,
"&serialization_context")}}
- bool ok = responder_->Accept(builder.message());
- ALLOW_UNUSED_LOCAL(ok);
- // TODO(darin): !ok returned here indicates a malformed message, and that may
- // be good reason to close the connection. However, we don't have a way to do
- // that from here. We should add a way.
- delete responder_;
+ ignore_result(responder_->Accept(builder.message()));
+ // TODO(darin): Accept() returning false indicates a malformed message, and
+ // that may be good reason to close the connection. However, we don't have a
+ // way to do that from here. We should add a way.
responder_ = nullptr;
}
{%- endif -%}
@@ -334,7 +332,7 @@ bool {{class_name}}StubDispatch::Accept(
bool {{class_name}}StubDispatch::AcceptWithResponder(
{{interface.name}}* impl,
mojo::Message* message,
- mojo::MessageReceiverWithStatus* responder) {
+ std::unique_ptr<mojo::MessageReceiverWithStatus> responder) {
{%- if interface.methods %}
switch (message->header()->name) {
{%- for method in interface.methods %}
@@ -350,7 +348,8 @@ bool {{class_name}}StubDispatch::AcceptWithResponder(
{{class_name}}::{{method.name}}Callback callback =
{{class_name}}_{{method.name}}_ProxyToResponder::CreateCallback(
message->request_id(),
- message->has_flag(mojo::Message::kFlagIsSync), responder);
+ message->has_flag(mojo::Message::kFlagIsSync),
+ std::move(responder));
// A null |impl| means no implementation was bound.
assert(impl);
TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}");

Powered by Google App Engine
This is Rietveld 408576698