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 7a030238623cef01e45cf74dab417ea83c6cbb3a..8a03b8d8beb22d8617ba35f5094cf4ff84dd870a 100644 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
@@ -6,6 +6,8 @@ |
{%- for param in parameters %} |
{%- if param.kind|is_object_kind -%} |
mojo::internal::Wrap(params->{{param.name}}()) |
+{%- elif param.kind|is_interface_kind -%} |
+mojo::MakeProxy<{{param.kind.name}}>(mojo::MakePassable(params->{{param.name}}()).Pass()) |
{%- elif param.kind|is_handle_kind -%} |
mojo::MakePassable(params->{{param.name}}()).Pass() |
{%- elif param.kind|is_enum_kind -%} |
@@ -38,6 +40,19 @@ params->{{param.name}}() |
if (!in_{{param.name}}.is_null()) |
params->set_{{param.name}}( |
mojo::internal::Unwrap(in_{{param.name}})->Clone(builder.buffer())); |
+{%- elif param.kind|is_interface_kind %} |
+ if (!in_{{param.name}}.get()) { |
+ params->set_{{param.name}}(mojo::MessagePipeHandle()); |
+ } else if (in_{{param.name}}.has_context()) { |
+ // TODO(darin): Add code to delegate message pipe! |
+ assert(false); |
+ params->set_{{param.name}}(mojo::MessagePipeHandle()); |
+ } else { |
+ mojo::MessagePipe pipe; |
+ in_{{param.name}}.ConfigureStub(pipe.handle0.Pass()); |
+ in_{{param.name}}.Detach(); |
+ params->set_{{param.name}}(pipe.handle1.release()); |
+ } |
{%- elif param.kind|is_handle_kind %} |
params->set_{{param.name}}(in_{{param.name}}.release()); |
{%- else %} |
@@ -165,8 +180,8 @@ void {{class_name}}_{{method.name}}_ProxyToResponder::Run( |
{%- endif -%} |
{%- endfor %} |
-{{class_name}}Stub::{{class_name}}Stub({{class_name}}* sink) |
- : sink_(sink) { |
+{{class_name}}Stub::{{class_name}}Stub() |
+ : sink_(NULL) { |
} |
{#--- Stub definition #} |