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

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

Issue 2660733002: Mojo C++ bindings: introduce an optional array to store transferred interface IDs in messages. (Closed)
Patch Set: . Created 3 years, 11 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 97044cafabd22f4950f11a9340fe990ac2d5d764..a23b10785770ad4ab9ec8dc59dda7a96aad10917 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
@@ -5,15 +5,16 @@
{%- set proxy_name = interface.name ~ "Proxy" %}
{%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %}
-{%- macro alloc_params(struct, params, message, serialization_context,
- description) %}
- ({{serialization_context}})->handles.Swap(({{message}})->mutable_handles());
+{%- macro alloc_params(struct, params, message, description) %}
+ mojo::internal::SerializationContext serialization_context;
+ serialization_context.handles.Swap(({{message}})->mutable_handles());
+ serialization_context.associated_endpoint_handles.swap(
+ *({{message}})->mutable_associated_endpoint_handles());
bool success = true;
{%- for param in struct.packed.packed_fields_in_ordinal_order %}
{{param.field.kind|cpp_wrapper_type}} p_{{param.field.name}}{};
{%- endfor %}
- {{struct.name}}DataView input_data_view({{params}},
- {{serialization_context}});
+ {{struct.name}}DataView input_data_view({{params}}, &serialization_context);
{{struct_macros.deserialize(struct, "input_data_view", "p_%s", "success")}}
if (!success) {
ReportValidationErrorForMessage(
@@ -38,6 +39,8 @@ std::move(p_{{param.name}})
serialization_context)}}
({{serialization_context}})->handles.Swap(
builder.message()->mutable_handles());
+ ({{serialization_context}})->associated_endpoint_handles.swap(
+ *builder.message()->mutable_associated_endpoint_handles());
{%- endmacro %}
{#--- Begin #}
@@ -68,12 +71,11 @@ class {{class_name}}_{{method.name}}_HandleSyncResponse
: public mojo::MessageReceiver {
public:
{{class_name}}_{{method.name}}_HandleSyncResponse(
- scoped_refptr<mojo::AssociatedGroupController> group_controller,
bool* result
{%- for param in method.response_parameters -%}
, {{param.kind|cpp_wrapper_type}}* out_{{param.name}}
{%- endfor %})
- : serialization_context_(std::move(group_controller)), result_(result)
+ : result_(result)
{%- for param in method.response_parameters -%}
, out_{{param.name}}_(out_{{param.name}})
{%- endfor %} {
@@ -81,7 +83,6 @@ class {{class_name}}_{{method.name}}_HandleSyncResponse
}
bool Accept(mojo::Message* message) override;
private:
- mojo::internal::SerializationContext serialization_context_;
bool* result_;
{%- for param in method.response_parameters %}
{{param.kind|cpp_wrapper_type}}* out_{{param.name}}_;
@@ -95,8 +96,7 @@ bool {{class_name}}_{{method.name}}_HandleSyncResponse::Accept(
message->mutable_payload());
{%- set desc = class_name~"::"~method.name~" response" %}
- {{alloc_params(method.response_param_struct, "params", "message",
- "&serialization_context_", desc)}}
+ {{alloc_params(method.response_param_struct, "params", "message", desc)}}
{%- for param in method.response_parameters %}
*out_{{param.name}}_ = std::move(p_{{param.name}});
@@ -113,18 +113,15 @@ class {{class_name}}_{{method.name}}_ForwardToCallback
public:
{{class_name}}_{{method.name}}_ForwardToCallback(
{%- if use_once_callback %}
- {{class_name}}::{{method.name}}Callback callback,
+ {{class_name}}::{{method.name}}Callback callback
{%- else %}
- const {{class_name}}::{{method.name}}Callback& callback,
+ const {{class_name}}::{{method.name}}Callback& callback
{%- endif %}
- scoped_refptr<mojo::AssociatedGroupController> group_controller)
- : callback_(std::move(callback)),
- serialization_context_(std::move(group_controller)) {
+ ) : callback_(std::move(callback)) {
}
bool Accept(mojo::Message* message) override;
private:
{{class_name}}::{{method.name}}Callback callback_;
- mojo::internal::SerializationContext serialization_context_;
DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback);
};
bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept(
@@ -134,8 +131,7 @@ bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept(
message->mutable_payload());
{%- set desc = class_name~"::"~method.name~" response" %}
- {{alloc_params(method.response_param_struct, "params", "message",
- "&serialization_context_", desc)}}
+ {{alloc_params(method.response_param_struct, "params", "message", desc)}}
if (!callback_.is_null()) {
mojo::internal::MessageDispatchContext context(message);
std::move(callback_).Run({{pass_params(method.response_parameters)}});
@@ -160,13 +156,14 @@ bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept(
{%- if method.sync %}
bool {{proxy_name}}::{{method.name}}(
{{interface_macros.declare_sync_method_params("param_", method)}}) {
- mojo::internal::SerializationContext serialization_context(
- group_controller_);
+ mojo::internal::SerializationContext serialization_context;
{{struct_macros.get_serialized_size(params_struct, "param_%s",
"&serialization_context")}}
- mojo::internal::RequestMessageBuilder builder({{message_name}}, size,
- mojo::Message::kFlagIsSync);
+ mojo::internal::MessageBuilder builder(
+ {{message_name}},
+ mojo::Message::kFlagIsSync | mojo::Message::kFlagExpectsResponse,
+ size, serialization_context.associated_endpoint_count);
{{build_message(params_struct, "param_%s", params_description,
"&serialization_context")}}
@@ -174,7 +171,7 @@ bool {{proxy_name}}::{{method.name}}(
bool result = false;
mojo::MessageReceiver* responder =
new {{class_name}}_{{method.name}}_HandleSyncResponse(
- group_controller_, &result
+ &result
{%- for param in method.response_parameters -%}
, param_{{param.name}}
{%- endfor %});
@@ -186,24 +183,25 @@ bool {{proxy_name}}::{{method.name}}(
void {{proxy_name}}::{{method.name}}(
{{interface_macros.declare_request_params("in_", method, use_once_callback)}}) {
- mojo::internal::SerializationContext serialization_context(
- group_controller_);
+ mojo::internal::SerializationContext serialization_context;
{{struct_macros.get_serialized_size(params_struct, "in_%s",
"&serialization_context")}}
{%- if method.response_parameters != None %}
- mojo::internal::RequestMessageBuilder builder({{message_name}}, size);
+ constexpr uint32_t kFlags = mojo::Message::kFlagExpectsResponse;
{%- else %}
- mojo::internal::MessageBuilder builder({{message_name}}, size);
+ constexpr uint32_t kFlags = 0;
{%- endif %}
+ mojo::internal::MessageBuilder builder(
+ {{message_name}}, kFlags, size,
+ serialization_context.associated_endpoint_count);
{{build_message(params_struct, "in_%s", params_description,
"&serialization_context")}}
{%- if method.response_parameters != None %}
mojo::MessageReceiver* responder =
- new {{class_name}}_{{method.name}}_ForwardToCallback(
- std::move(callback), group_controller_);
+ new {{class_name}}_{{method.name}}_ForwardToCallback(std::move(callback));
if (!receiver_->AcceptWithResponder(builder.message(), responder))
delete responder;
{%- else %}
@@ -228,12 +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,
- scoped_refptr<mojo::AssociatedGroupController>
- group_controller) {
+ mojo::MessageReceiverWithStatus* responder) {
std::unique_ptr<{{class_name}}_{{method.name}}_ProxyToResponder> proxy(
new {{class_name}}_{{method.name}}_ProxyToResponder(
- request_id, is_sync, responder, group_controller));
+ request_id, is_sync, responder));
return base::Bind(&{{class_name}}_{{method.name}}_ProxyToResponder::Run,
base::Passed(&proxy));
}
@@ -256,12 +252,10 @@ class {{class_name}}_{{method.name}}_ProxyToResponder {
{{class_name}}_{{method.name}}_ProxyToResponder(
uint64_t request_id,
bool is_sync,
- mojo::MessageReceiverWithStatus* responder,
- scoped_refptr<mojo::AssociatedGroupController> group_controller)
+ mojo::MessageReceiverWithStatus* responder)
: request_id_(request_id),
is_sync_(is_sync),
- responder_(responder),
- serialization_context_(std::move(group_controller)) {
+ responder_(responder) {
}
void Run(
@@ -271,8 +265,6 @@ class {{class_name}}_{{method.name}}_ProxyToResponder {
uint64_t request_id_;
bool is_sync_;
mojo::MessageReceiverWithStatus* responder_;
- // TODO(yzshen): maybe I should use a ref to the original one?
- mojo::internal::SerializationContext serialization_context_;
DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder);
};
@@ -280,13 +272,19 @@ class {{class_name}}_{{method.name}}_ProxyToResponder {
void {{class_name}}_{{method.name}}_ProxyToResponder::Run(
{{interface_macros.declare_responder_params(
"in_", method.response_parameters, for_blink)}}) {
+ mojo::internal::SerializationContext serialization_context;
{{struct_macros.get_serialized_size(response_params_struct, "in_%s",
- "&serialization_context_")}}
- mojo::internal::ResponseMessageBuilder builder(
- {{message_name}}, size, request_id_,
- is_sync_ ? mojo::Message::kFlagIsSync : 0);
+ "&serialization_context")}}
+
+ uint32_t flags = (is_sync_ ? mojo::Message::kFlagIsSync : 0) |
+ mojo::Message::kFlagIsResponse;
+ mojo::internal::MessageBuilder builder(
+ {{message_name}}, flags, size,
+ serialization_context.associated_endpoint_count);
+ builder.message()->set_request_id(request_id_);
+
{{build_message(response_params_struct, "in_%s", params_description,
- "&serialization_context_")}}
+ "&serialization_context")}}
bool ok = responder_->Accept(builder.message());
ALLOW_UNUSED_LOCAL(ok);
// TODO(darin): !ok returned here indicates a malformed message, and that may
@@ -303,7 +301,6 @@ void {{class_name}}_{{method.name}}_ProxyToResponder::Run(
// static
bool {{class_name}}StubDispatch::Accept(
{{interface.name}}* impl,
- mojo::internal::SerializationContext* context,
mojo::Message* message) {
{%- if interface.methods %}
switch (message->header()->name) {
@@ -315,7 +312,7 @@ bool {{class_name}}StubDispatch::Accept(
message->mutable_payload());
{%- set desc = class_name~"::"~method.name %}
- {{alloc_params(method.param_struct, "params", "message", "context", desc)|
+ {{alloc_params(method.param_struct, "params", "message", desc)|
indent(4)}}
// A null |impl| means no implementation was bound.
assert(impl);
@@ -336,7 +333,6 @@ bool {{class_name}}StubDispatch::Accept(
// static
bool {{class_name}}StubDispatch::AcceptWithResponder(
{{interface.name}}* impl,
- mojo::internal::SerializationContext* context,
mojo::Message* message,
mojo::MessageReceiverWithStatus* responder) {
{%- if interface.methods %}
@@ -349,13 +345,12 @@ bool {{class_name}}StubDispatch::AcceptWithResponder(
message->mutable_payload());
{%- set desc = class_name~"::"~method.name %}
- {{alloc_params(method.param_struct, "params", "message", "context", desc)|
+ {{alloc_params(method.param_struct, "params", "message", desc)|
indent(4)}}
{{class_name}}::{{method.name}}Callback callback =
{{class_name}}_{{method.name}}_ProxyToResponder::CreateCallback(
message->request_id(),
- message->has_flag(mojo::Message::kFlagIsSync), responder,
- context->group_controller);
+ message->has_flag(mojo::Message::kFlagIsSync), responder);
// A null |impl| means no implementation was bound.
assert(impl);
TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}");
@@ -380,8 +375,9 @@ bool {{class_name}}RequestValidator::Accept(mojo::Message* message) {
return true;
mojo::internal::ValidationContext validation_context(
- message->data(), message->data_num_bytes(), message->handles()->size(),
- message, "{{class_name}} RequestValidator");
+ message->payload(), message->payload_num_bytes(),
+ message->handles()->size(), message->payload_num_interface_ids(), message,
+ "{{class_name}} RequestValidator");
switch (message->header()->name) {
{%- for method in interface.methods %}
@@ -423,8 +419,9 @@ bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
return true;
mojo::internal::ValidationContext validation_context(
- message->data(), message->data_num_bytes(), message->handles()->size(),
- message, "{{class_name}} ResponseValidator");
+ message->payload(), message->payload_num_bytes(),
+ message->handles()->size(), message->payload_num_interface_ids(), message,
+ "{{class_name}} ResponseValidator");
if (!mojo::internal::ValidateMessageIsResponse(message, &validation_context))
return false;

Powered by Google App Engine
This is Rietveld 408576698