Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / mojo / public / bindings / generators / cpp_templates / interface_definition.tmpl
1 {%- set class_name = interface.name %}
2 {%- set proxy_name = interface.name ~ "Proxy" %}
3
4 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiver* receiver)
5     : receiver_(receiver) {
6 }
7
8 {#--- Proxy definitions #}
9 {%- macro params_list(method) %}
10 {%-   for param in method.parameters -%}
11 {{param.kind|cpp_const_wrapper_type}} in_{{param.name}}
12 {%- if not loop.last %}, {% endif %}
13 {%-   endfor %}
14 {%- endmacro %}
15
16 {%- for method in interface.methods %}
17 {%-   set name = "internal::k%s_%s_Name"|format(interface.name, method.name) %}
18 {%-   set params_name =
19           "internal::%s_%s_Params_Data"|format(interface.name, method.name) %}
20 void {{proxy_name}}::{{method.name}}({{params_list(method)}}) {
21   size_t payload_size =
22       mojo::internal::Align(sizeof({{params_name}}));
23 {#--- Computes #}
24 {%-   for param in method.parameters %}
25 {%-     if param.kind|is_object_kind %}
26   if (!in_{{param.name}}.is_null())
27     payload_size += mojo::internal::Unwrap(in_{{param.name}})->ComputeSize();
28 {%-     endif %}
29 {%-   endfor %}
30
31   mojo::internal::MessageBuilder builder({{name}}, payload_size);
32
33   {{params_name}}* params =
34       {{params_name}}::New(builder.buffer());
35
36 {#--- Sets #}
37 {%   for param in method.parameters %}
38 {%-     if param.kind|is_object_kind %}
39   if (!in_{{param.name}}.is_null())
40     params->set_{{param.name}}(
41         mojo::internal::Unwrap(in_{{param.name}})->Clone(builder.buffer()));
42 {%-     elif param.kind|is_handle_kind %}
43   params->set_{{param.name}}(in_{{param.name}}.release());
44 {%-     else %}
45   params->set_{{param.name}}(in_{{param.name}});
46 {%-     endif %}
47 {%-   endfor %}
48
49   mojo::Message message;
50   params->EncodePointersAndHandles(&message.handles);
51
52   message.data = builder.Finish();
53
54   receiver_->Accept(&message);
55 }
56 {%- endfor %}
57
58 {{class_name}}Stub::{{class_name}}Stub({{class_name}}* sink)
59     : sink_(sink) {
60 }
61
62 {#--- Stub definition #}
63 {%- macro params(method) %}
64 {%-   for param in method.parameters %}
65 {%-     if param.kind|is_object_kind -%}
66 mojo::internal::Wrap(params->{{param.name}}())
67 {%-     elif param.kind|is_handle_kind -%}
68 mojo::MakePassable(params->{{param.name}}()).Pass()
69 {%-     else -%}
70 params->{{param.name}}()
71 {%-     endif -%}
72 {%-     if not loop.last %}, {% endif %}
73 {%-   endfor %}
74 {%- endmacro %}
75
76 bool {{class_name}}Stub::Accept(mojo::Message* message) {
77   switch (message->data->header.name) {
78 {%- for method in interface.methods %}
79     case internal::k{{class_name}}_{{method.name}}_Name: {
80       internal::{{class_name}}_{{method.name}}_Params_Data* params =
81           reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data*>(
82               message->data->payload);
83
84       if (!params->DecodePointersAndHandles(message))
85         return false;
86       sink_->{{method.name}}({{params(method)}});
87       params->CloseHandles();
88       break;
89     }
90 {%- endfor %}
91   }
92   return true;
93 }