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

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

Issue 1475813002: Mojo C++ bindings: support passing associated interface pointers/requests in method parameter lists… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@25_use_multiplex_router
Patch Set: Created 5 years, 1 month 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/struct_macros.tmpl
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
index 234083a93dd0892c7069010de7b9fe0bd4d6174c..011433e940bc69aa5513a874119dcef79fa6a424 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
@@ -90,7 +90,12 @@
"invalid {{name}} in {{struct_display_name}}");
{%- endif %}
{%- elif kind|is_associated_kind %}
- // TODO(yzshen): add serialization logic for associated kinds.
+ // TODO(yzshen): add some DCHECKs for non-nullable, is_local, correct router, etc.
+{%- if kind|is_associated_interface_kind %}
+ mojo::internal::AssociatedInterfacePtrInfoToData({{input_field}}.Pass(), &{{output}}->{{name}});
+{%- else %}
+ {{output}}->{{name}} = mojo::internal::AssociatedInterfaceRequestHelper::PassHandle(&{{input_field}}).release();
+{%- endif %}
{%- else %}
{{output}}->{{name}} = {{input_field}};
{%- endif %}
@@ -108,7 +113,8 @@
struct wrapper class.
- method parameters/response parameters: the output is a list of
arguments. #}
-{%- macro deserialize(struct, input, output_field_pattern) -%}
+ |context| is the name of the serialization context.
+{%- macro deserialize(struct, input, output_field_pattern, context) -%}
do {
// NOTE: The memory backing |{{input}}| may has be smaller than
// |sizeof(*{{input}})| if the message comes from an older version.
@@ -128,9 +134,9 @@
{%- endif %}
{%- if kind|is_object_kind %}
{%- if kind|is_union_kind %}
- Deserialize_(&{{input}}->{{name}}, &{{output_field}});
+ Deserialize_(&{{input}}->{{name}}, &{{output_field}}, {{context}});
{%- else %}
- Deserialize_({{input}}->{{name}}.ptr, &{{output_field}});
+ Deserialize_({{input}}->{{name}}.ptr, &{{output_field}}, {{context}});
{%- endif %}
{%- elif kind|is_interface_kind %}
mojo::internal::InterfaceDataToPointer(&{{input}}->{{name}}, &{{output_field}});
@@ -138,8 +144,12 @@
{{output_field}}.Bind(mojo::MakeScopedHandle(mojo::internal::FetchAndReset(&{{input}}->{{name}})));
{%- elif kind|is_any_handle_kind %}
{{output_field}}.reset(mojo::internal::FetchAndReset(&{{input}}->{{name}}));
-{%- elif kind|is_associated_kind %}
- // TODO(yzshen): add deserialization logic for associated kinds.
+{%- elif kind|is_associated_interface_kind %}
+ mojo::internal::AssociatedInterfaceDataToPtrInfo(&{{input}}->{{name}}, &{{output_field}}, ({{context}})->router.get());
+{%- elif kind|is_associated_interface_request_kind %}
+ mojo::internal::AssociatedInterfaceRequestHelper::SetHandle(
+ &{{output_field}},
+ ({{context}})->router->CreateLocalEndpointHandle(mojo::internal::FetchAndReset(&{{input}}->{{name}})));
{%- elif kind|is_enum_kind %}
{{output_field}} = static_cast<{{kind|cpp_wrapper_type}}>({{input}}->{{name}});
{%- else %}

Powered by Google App Engine
This is Rietveld 408576698