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

Side by Side 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, 10 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 unified diff | Download patch
OLDNEW
1 {%- import "interface_macros.tmpl" as interface_macros %} 1 {%- import "interface_macros.tmpl" as interface_macros %}
2 {%- import "struct_macros.tmpl" as struct_macros %} 2 {%- import "struct_macros.tmpl" as struct_macros %}
3 3
4 {%- set class_name = interface.name %} 4 {%- set class_name = interface.name %}
5 {%- set proxy_name = interface.name ~ "Proxy" %} 5 {%- set proxy_name = interface.name ~ "Proxy" %}
6 {%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %} 6 {%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %}
7 7
8 {%- macro alloc_params(struct, params, message, serialization_context, 8 {%- macro alloc_params(struct, params, message, description) %}
9 description) %} 9 mojo::internal::SerializationContext serialization_context;
10 ({{serialization_context}})->handles.Swap(({{message}})->mutable_handles()); 10 serialization_context.handles.Swap(({{message}})->mutable_handles());
11 serialization_context.associated_endpoint_handles.swap(
12 *({{message}})->mutable_associated_endpoint_handles());
11 bool success = true; 13 bool success = true;
12 {%- for param in struct.packed.packed_fields_in_ordinal_order %} 14 {%- for param in struct.packed.packed_fields_in_ordinal_order %}
13 {{param.field.kind|cpp_wrapper_type}} p_{{param.field.name}}{}; 15 {{param.field.kind|cpp_wrapper_type}} p_{{param.field.name}}{};
14 {%- endfor %} 16 {%- endfor %}
15 {{struct.name}}DataView input_data_view({{params}}, 17 {{struct.name}}DataView input_data_view({{params}}, &serialization_context);
16 {{serialization_context}});
17 {{struct_macros.deserialize(struct, "input_data_view", "p_%s", "success")}} 18 {{struct_macros.deserialize(struct, "input_data_view", "p_%s", "success")}}
18 if (!success) { 19 if (!success) {
19 ReportValidationErrorForMessage( 20 ReportValidationErrorForMessage(
20 {{message}}, 21 {{message}},
21 mojo::internal::VALIDATION_ERROR_DESERIALIZATION_FAILED, 22 mojo::internal::VALIDATION_ERROR_DESERIALIZATION_FAILED,
22 "{{description}} deserializer"); 23 "{{description}} deserializer");
23 return false; 24 return false;
24 } 25 }
25 {%- endmacro %} 26 {%- endmacro %}
26 27
27 {%- macro pass_params(parameters) %} 28 {%- macro pass_params(parameters) %}
28 {%- for param in parameters %} 29 {%- for param in parameters %}
29 std::move(p_{{param.name}}) 30 std::move(p_{{param.name}})
30 {%- if not loop.last %}, {% endif %} 31 {%- if not loop.last %}, {% endif %}
31 {%- endfor %} 32 {%- endfor %}
32 {%- endmacro %} 33 {%- endmacro %}
33 34
34 {%- macro build_message(struct, input_pattern, struct_display_name, 35 {%- macro build_message(struct, input_pattern, struct_display_name,
35 serialization_context) -%} 36 serialization_context) -%}
36 {{struct_macros.serialize(struct, struct_display_name, input_pattern, 37 {{struct_macros.serialize(struct, struct_display_name, input_pattern,
37 "params", "builder.buffer()", 38 "params", "builder.buffer()",
38 serialization_context)}} 39 serialization_context)}}
39 ({{serialization_context}})->handles.Swap( 40 ({{serialization_context}})->handles.Swap(
40 builder.message()->mutable_handles()); 41 builder.message()->mutable_handles());
42 ({{serialization_context}})->associated_endpoint_handles.swap(
43 *builder.message()->mutable_associated_endpoint_handles());
41 {%- endmacro %} 44 {%- endmacro %}
42 45
43 {#--- Begin #} 46 {#--- Begin #}
44 const char {{class_name}}::Name_[] = "{{namespace_as_string}}::{{class_name}}"; 47 const char {{class_name}}::Name_[] = "{{namespace_as_string}}::{{class_name}}";
45 48
46 {#--- Constants #} 49 {#--- Constants #}
47 {%- for constant in interface.constants %} 50 {%- for constant in interface.constants %}
48 {%- if constant.kind|is_string_kind %} 51 {%- if constant.kind|is_string_kind %}
49 const char {{interface.name}}::{{constant.name}}[] = {{constant|constant_value}} ; 52 const char {{interface.name}}::{{constant.name}}[] = {{constant|constant_value}} ;
50 {%- endif %} 53 {%- endif %}
(...skipping 10 matching lines...) Expand all
61 {%- endfor %} 64 {%- endfor %}
62 65
63 {#--- ForwardToCallback definition #} 66 {#--- ForwardToCallback definition #}
64 {%- for method in interface.methods -%} 67 {%- for method in interface.methods -%}
65 {%- if method.response_parameters != None %} 68 {%- if method.response_parameters != None %}
66 {%- if method.sync %} 69 {%- if method.sync %}
67 class {{class_name}}_{{method.name}}_HandleSyncResponse 70 class {{class_name}}_{{method.name}}_HandleSyncResponse
68 : public mojo::MessageReceiver { 71 : public mojo::MessageReceiver {
69 public: 72 public:
70 {{class_name}}_{{method.name}}_HandleSyncResponse( 73 {{class_name}}_{{method.name}}_HandleSyncResponse(
71 scoped_refptr<mojo::AssociatedGroupController> group_controller,
72 bool* result 74 bool* result
73 {%- for param in method.response_parameters -%} 75 {%- for param in method.response_parameters -%}
74 , {{param.kind|cpp_wrapper_type}}* out_{{param.name}} 76 , {{param.kind|cpp_wrapper_type}}* out_{{param.name}}
75 {%- endfor %}) 77 {%- endfor %})
76 : serialization_context_(std::move(group_controller)), result_(result) 78 : result_(result)
77 {%- for param in method.response_parameters -%} 79 {%- for param in method.response_parameters -%}
78 , out_{{param.name}}_(out_{{param.name}}) 80 , out_{{param.name}}_(out_{{param.name}})
79 {%- endfor %} { 81 {%- endfor %} {
80 DCHECK(!*result_); 82 DCHECK(!*result_);
81 } 83 }
82 bool Accept(mojo::Message* message) override; 84 bool Accept(mojo::Message* message) override;
83 private: 85 private:
84 mojo::internal::SerializationContext serialization_context_;
85 bool* result_; 86 bool* result_;
86 {%- for param in method.response_parameters %} 87 {%- for param in method.response_parameters %}
87 {{param.kind|cpp_wrapper_type}}* out_{{param.name}}_; 88 {{param.kind|cpp_wrapper_type}}* out_{{param.name}}_;
88 {%- endfor -%} 89 {%- endfor -%}
89 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_HandleSyncResponse); 90 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_HandleSyncResponse);
90 }; 91 };
91 bool {{class_name}}_{{method.name}}_HandleSyncResponse::Accept( 92 bool {{class_name}}_{{method.name}}_HandleSyncResponse::Accept(
92 mojo::Message* message) { 93 mojo::Message* message) {
93 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = 94 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params =
94 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( 95 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>(
95 message->mutable_payload()); 96 message->mutable_payload());
96 97
97 {%- set desc = class_name~"::"~method.name~" response" %} 98 {%- set desc = class_name~"::"~method.name~" response" %}
98 {{alloc_params(method.response_param_struct, "params", "message", 99 {{alloc_params(method.response_param_struct, "params", "message", desc)}}
99 "&serialization_context_", desc)}}
100 100
101 {%- for param in method.response_parameters %} 101 {%- for param in method.response_parameters %}
102 *out_{{param.name}}_ = std::move(p_{{param.name}}); 102 *out_{{param.name}}_ = std::move(p_{{param.name}});
103 {%- endfor %} 103 {%- endfor %}
104 mojo::internal::SyncMessageResponseSetup::SetCurrentSyncResponseMessage( 104 mojo::internal::SyncMessageResponseSetup::SetCurrentSyncResponseMessage(
105 message); 105 message);
106 *result_ = true; 106 *result_ = true;
107 return true; 107 return true;
108 } 108 }
109 {%- endif %} 109 {%- endif %}
110 110
111 class {{class_name}}_{{method.name}}_ForwardToCallback 111 class {{class_name}}_{{method.name}}_ForwardToCallback
112 : public mojo::MessageReceiver { 112 : public mojo::MessageReceiver {
113 public: 113 public:
114 {{class_name}}_{{method.name}}_ForwardToCallback( 114 {{class_name}}_{{method.name}}_ForwardToCallback(
115 {%- if use_once_callback %} 115 {%- if use_once_callback %}
116 {{class_name}}::{{method.name}}Callback callback, 116 {{class_name}}::{{method.name}}Callback callback
117 {%- else %} 117 {%- else %}
118 const {{class_name}}::{{method.name}}Callback& callback, 118 const {{class_name}}::{{method.name}}Callback& callback
119 {%- endif %} 119 {%- endif %}
120 scoped_refptr<mojo::AssociatedGroupController> group_controller) 120 ) : callback_(std::move(callback)) {
121 : callback_(std::move(callback)),
122 serialization_context_(std::move(group_controller)) {
123 } 121 }
124 bool Accept(mojo::Message* message) override; 122 bool Accept(mojo::Message* message) override;
125 private: 123 private:
126 {{class_name}}::{{method.name}}Callback callback_; 124 {{class_name}}::{{method.name}}Callback callback_;
127 mojo::internal::SerializationContext serialization_context_;
128 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback); 125 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback);
129 }; 126 };
130 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( 127 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept(
131 mojo::Message* message) { 128 mojo::Message* message) {
132 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = 129 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params =
133 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( 130 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>(
134 message->mutable_payload()); 131 message->mutable_payload());
135 132
136 {%- set desc = class_name~"::"~method.name~" response" %} 133 {%- set desc = class_name~"::"~method.name~" response" %}
137 {{alloc_params(method.response_param_struct, "params", "message", 134 {{alloc_params(method.response_param_struct, "params", "message", desc)}}
138 "&serialization_context_", desc)}}
139 if (!callback_.is_null()) { 135 if (!callback_.is_null()) {
140 mojo::internal::MessageDispatchContext context(message); 136 mojo::internal::MessageDispatchContext context(message);
141 std::move(callback_).Run({{pass_params(method.response_parameters)}}); 137 std::move(callback_).Run({{pass_params(method.response_parameters)}});
142 } 138 }
143 return true; 139 return true;
144 } 140 }
145 {%- endif %} 141 {%- endif %}
146 {%- endfor %} 142 {%- endfor %}
147 143
148 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver) 144 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver)
149 : receiver_(receiver) { 145 : receiver_(receiver) {
150 } 146 }
151 147
152 {#--- Proxy definitions #} 148 {#--- Proxy definitions #}
153 149
154 {%- for method in interface.methods %} 150 {%- for method in interface.methods %}
155 {%- set message_name = 151 {%- set message_name =
156 "internal::k%s_%s_Name"|format(interface.name, method.name) %} 152 "internal::k%s_%s_Name"|format(interface.name, method.name) %}
157 {%- set params_struct = method.param_struct %} 153 {%- set params_struct = method.param_struct %}
158 {%- set params_description = 154 {%- set params_description =
159 "%s.%s request"|format(interface.name, method.name) %} 155 "%s.%s request"|format(interface.name, method.name) %}
160 {%- if method.sync %} 156 {%- if method.sync %}
161 bool {{proxy_name}}::{{method.name}}( 157 bool {{proxy_name}}::{{method.name}}(
162 {{interface_macros.declare_sync_method_params("param_", method)}}) { 158 {{interface_macros.declare_sync_method_params("param_", method)}}) {
163 mojo::internal::SerializationContext serialization_context( 159 mojo::internal::SerializationContext serialization_context;
164 group_controller_);
165 {{struct_macros.get_serialized_size(params_struct, "param_%s", 160 {{struct_macros.get_serialized_size(params_struct, "param_%s",
166 "&serialization_context")}} 161 "&serialization_context")}}
167 162
168 mojo::internal::RequestMessageBuilder builder({{message_name}}, size, 163 mojo::internal::MessageBuilder builder(
169 mojo::Message::kFlagIsSync); 164 {{message_name}},
165 mojo::Message::kFlagIsSync | mojo::Message::kFlagExpectsResponse,
166 size, serialization_context.associated_endpoint_count);
170 167
171 {{build_message(params_struct, "param_%s", params_description, 168 {{build_message(params_struct, "param_%s", params_description,
172 "&serialization_context")}} 169 "&serialization_context")}}
173 170
174 bool result = false; 171 bool result = false;
175 mojo::MessageReceiver* responder = 172 mojo::MessageReceiver* responder =
176 new {{class_name}}_{{method.name}}_HandleSyncResponse( 173 new {{class_name}}_{{method.name}}_HandleSyncResponse(
177 group_controller_, &result 174 &result
178 {%- for param in method.response_parameters -%} 175 {%- for param in method.response_parameters -%}
179 , param_{{param.name}} 176 , param_{{param.name}}
180 {%- endfor %}); 177 {%- endfor %});
181 if (!receiver_->AcceptWithResponder(builder.message(), responder)) 178 if (!receiver_->AcceptWithResponder(builder.message(), responder))
182 delete responder; 179 delete responder;
183 return result; 180 return result;
184 } 181 }
185 {%- endif %} 182 {%- endif %}
186 183
187 void {{proxy_name}}::{{method.name}}( 184 void {{proxy_name}}::{{method.name}}(
188 {{interface_macros.declare_request_params("in_", method, use_once_callback)} }) { 185 {{interface_macros.declare_request_params("in_", method, use_once_callback)} }) {
189 mojo::internal::SerializationContext serialization_context( 186 mojo::internal::SerializationContext serialization_context;
190 group_controller_);
191 {{struct_macros.get_serialized_size(params_struct, "in_%s", 187 {{struct_macros.get_serialized_size(params_struct, "in_%s",
192 "&serialization_context")}} 188 "&serialization_context")}}
193 189
194 {%- if method.response_parameters != None %} 190 {%- if method.response_parameters != None %}
195 mojo::internal::RequestMessageBuilder builder({{message_name}}, size); 191 constexpr uint32_t kFlags = mojo::Message::kFlagExpectsResponse;
196 {%- else %} 192 {%- else %}
197 mojo::internal::MessageBuilder builder({{message_name}}, size); 193 constexpr uint32_t kFlags = 0;
198 {%- endif %} 194 {%- endif %}
195 mojo::internal::MessageBuilder builder(
196 {{message_name}}, kFlags, size,
197 serialization_context.associated_endpoint_count);
199 198
200 {{build_message(params_struct, "in_%s", params_description, 199 {{build_message(params_struct, "in_%s", params_description,
201 "&serialization_context")}} 200 "&serialization_context")}}
202 201
203 {%- if method.response_parameters != None %} 202 {%- if method.response_parameters != None %}
204 mojo::MessageReceiver* responder = 203 mojo::MessageReceiver* responder =
205 new {{class_name}}_{{method.name}}_ForwardToCallback( 204 new {{class_name}}_{{method.name}}_ForwardToCallback(std::move(callback));
206 std::move(callback), group_controller_);
207 if (!receiver_->AcceptWithResponder(builder.message(), responder)) 205 if (!receiver_->AcceptWithResponder(builder.message(), responder))
208 delete responder; 206 delete responder;
209 {%- else %} 207 {%- else %}
210 bool ok = receiver_->Accept(builder.message()); 208 bool ok = receiver_->Accept(builder.message());
211 // This return value may be ignored as !ok implies the Connector has 209 // This return value may be ignored as !ok implies the Connector has
212 // encountered an error, which will be visible through other means. 210 // encountered an error, which will be visible through other means.
213 ALLOW_UNUSED_LOCAL(ok); 211 ALLOW_UNUSED_LOCAL(ok);
214 {%- endif %} 212 {%- endif %}
215 } 213 }
216 {%- endfor %} 214 {%- endfor %}
217 215
218 {#--- ProxyToResponder definition #} 216 {#--- ProxyToResponder definition #}
219 {%- for method in interface.methods -%} 217 {%- for method in interface.methods -%}
220 {%- if method.response_parameters != None %} 218 {%- if method.response_parameters != None %}
221 {%- set message_name = 219 {%- set message_name =
222 "internal::k%s_%s_Name"|format(interface.name, method.name) %} 220 "internal::k%s_%s_Name"|format(interface.name, method.name) %}
223 {%- set response_params_struct = method.response_param_struct %} 221 {%- set response_params_struct = method.response_param_struct %}
224 {%- set params_description = 222 {%- set params_description =
225 "%s.%s response"|format(interface.name, method.name) %} 223 "%s.%s response"|format(interface.name, method.name) %}
226 class {{class_name}}_{{method.name}}_ProxyToResponder { 224 class {{class_name}}_{{method.name}}_ProxyToResponder {
227 public: 225 public:
228 static {{class_name}}::{{method.name}}Callback CreateCallback( 226 static {{class_name}}::{{method.name}}Callback CreateCallback(
229 uint64_t request_id, 227 uint64_t request_id,
230 bool is_sync, 228 bool is_sync,
231 mojo::MessageReceiverWithStatus* responder, 229 mojo::MessageReceiverWithStatus* responder) {
232 scoped_refptr<mojo::AssociatedGroupController>
233 group_controller) {
234 std::unique_ptr<{{class_name}}_{{method.name}}_ProxyToResponder> proxy( 230 std::unique_ptr<{{class_name}}_{{method.name}}_ProxyToResponder> proxy(
235 new {{class_name}}_{{method.name}}_ProxyToResponder( 231 new {{class_name}}_{{method.name}}_ProxyToResponder(
236 request_id, is_sync, responder, group_controller)); 232 request_id, is_sync, responder));
237 return base::Bind(&{{class_name}}_{{method.name}}_ProxyToResponder::Run, 233 return base::Bind(&{{class_name}}_{{method.name}}_ProxyToResponder::Run,
238 base::Passed(&proxy)); 234 base::Passed(&proxy));
239 } 235 }
240 236
241 ~{{class_name}}_{{method.name}}_ProxyToResponder() { 237 ~{{class_name}}_{{method.name}}_ProxyToResponder() {
242 #if DCHECK_IS_ON() 238 #if DCHECK_IS_ON()
243 if (responder_) { 239 if (responder_) {
244 // Is the Service destroying the callback without running it 240 // Is the Service destroying the callback without running it
245 // and without first closing the pipe? 241 // and without first closing the pipe?
246 responder_->DCheckInvalid("The callback passed to " 242 responder_->DCheckInvalid("The callback passed to "
247 "{{class_name}}::{{method.name}}() was never run."); 243 "{{class_name}}::{{method.name}}() was never run.");
248 } 244 }
249 #endif 245 #endif
250 // If the Callback was dropped then deleting the responder will close 246 // If the Callback was dropped then deleting the responder will close
251 // the pipe so the calling application knows to stop waiting for a reply. 247 // the pipe so the calling application knows to stop waiting for a reply.
252 delete responder_; 248 delete responder_;
253 } 249 }
254 250
255 private: 251 private:
256 {{class_name}}_{{method.name}}_ProxyToResponder( 252 {{class_name}}_{{method.name}}_ProxyToResponder(
257 uint64_t request_id, 253 uint64_t request_id,
258 bool is_sync, 254 bool is_sync,
259 mojo::MessageReceiverWithStatus* responder, 255 mojo::MessageReceiverWithStatus* responder)
260 scoped_refptr<mojo::AssociatedGroupController> group_controller)
261 : request_id_(request_id), 256 : request_id_(request_id),
262 is_sync_(is_sync), 257 is_sync_(is_sync),
263 responder_(responder), 258 responder_(responder) {
264 serialization_context_(std::move(group_controller)) {
265 } 259 }
266 260
267 void Run( 261 void Run(
268 {{interface_macros.declare_responder_params( 262 {{interface_macros.declare_responder_params(
269 "in_", method.response_parameters, for_blink)}}); 263 "in_", method.response_parameters, for_blink)}});
270 264
271 uint64_t request_id_; 265 uint64_t request_id_;
272 bool is_sync_; 266 bool is_sync_;
273 mojo::MessageReceiverWithStatus* responder_; 267 mojo::MessageReceiverWithStatus* responder_;
274 // TODO(yzshen): maybe I should use a ref to the original one?
275 mojo::internal::SerializationContext serialization_context_;
276 268
277 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder); 269 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder);
278 }; 270 };
279 271
280 void {{class_name}}_{{method.name}}_ProxyToResponder::Run( 272 void {{class_name}}_{{method.name}}_ProxyToResponder::Run(
281 {{interface_macros.declare_responder_params( 273 {{interface_macros.declare_responder_params(
282 "in_", method.response_parameters, for_blink)}}) { 274 "in_", method.response_parameters, for_blink)}}) {
275 mojo::internal::SerializationContext serialization_context;
283 {{struct_macros.get_serialized_size(response_params_struct, "in_%s", 276 {{struct_macros.get_serialized_size(response_params_struct, "in_%s",
284 "&serialization_context_")}} 277 "&serialization_context")}}
285 mojo::internal::ResponseMessageBuilder builder( 278
286 {{message_name}}, size, request_id_, 279 uint32_t flags = (is_sync_ ? mojo::Message::kFlagIsSync : 0) |
287 is_sync_ ? mojo::Message::kFlagIsSync : 0); 280 mojo::Message::kFlagIsResponse;
281 mojo::internal::MessageBuilder builder(
282 {{message_name}}, flags, size,
283 serialization_context.associated_endpoint_count);
284 builder.message()->set_request_id(request_id_);
285
288 {{build_message(response_params_struct, "in_%s", params_description, 286 {{build_message(response_params_struct, "in_%s", params_description,
289 "&serialization_context_")}} 287 "&serialization_context")}}
290 bool ok = responder_->Accept(builder.message()); 288 bool ok = responder_->Accept(builder.message());
291 ALLOW_UNUSED_LOCAL(ok); 289 ALLOW_UNUSED_LOCAL(ok);
292 // TODO(darin): !ok returned here indicates a malformed message, and that may 290 // TODO(darin): !ok returned here indicates a malformed message, and that may
293 // be good reason to close the connection. However, we don't have a way to do 291 // be good reason to close the connection. However, we don't have a way to do
294 // that from here. We should add a way. 292 // that from here. We should add a way.
295 delete responder_; 293 delete responder_;
296 responder_ = nullptr; 294 responder_ = nullptr;
297 } 295 }
298 {%- endif -%} 296 {%- endif -%}
299 {%- endfor %} 297 {%- endfor %}
300 298
301 {#--- StubDispatch definition #} 299 {#--- StubDispatch definition #}
302 300
303 // static 301 // static
304 bool {{class_name}}StubDispatch::Accept( 302 bool {{class_name}}StubDispatch::Accept(
305 {{interface.name}}* impl, 303 {{interface.name}}* impl,
306 mojo::internal::SerializationContext* context,
307 mojo::Message* message) { 304 mojo::Message* message) {
308 {%- if interface.methods %} 305 {%- if interface.methods %}
309 switch (message->header()->name) { 306 switch (message->header()->name) {
310 {%- for method in interface.methods %} 307 {%- for method in interface.methods %}
311 case internal::k{{class_name}}_{{method.name}}_Name: { 308 case internal::k{{class_name}}_{{method.name}}_Name: {
312 {%- if method.response_parameters == None %} 309 {%- if method.response_parameters == None %}
313 internal::{{class_name}}_{{method.name}}_Params_Data* params = 310 internal::{{class_name}}_{{method.name}}_Params_Data* params =
314 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( 311 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >(
315 message->mutable_payload()); 312 message->mutable_payload());
316 313
317 {%- set desc = class_name~"::"~method.name %} 314 {%- set desc = class_name~"::"~method.name %}
318 {{alloc_params(method.param_struct, "params", "message", "context", desc)| 315 {{alloc_params(method.param_struct, "params", "message", desc)|
319 indent(4)}} 316 indent(4)}}
320 // A null |impl| means no implementation was bound. 317 // A null |impl| means no implementation was bound.
321 assert(impl); 318 assert(impl);
322 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); 319 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}");
323 mojo::internal::MessageDispatchContext context(message); 320 mojo::internal::MessageDispatchContext context(message);
324 impl->{{method.name}}({{pass_params(method.parameters)}}); 321 impl->{{method.name}}({{pass_params(method.parameters)}});
325 return true; 322 return true;
326 {%- else %} 323 {%- else %}
327 break; 324 break;
328 {%- endif %} 325 {%- endif %}
329 } 326 }
330 {%- endfor %} 327 {%- endfor %}
331 } 328 }
332 {%- endif %} 329 {%- endif %}
333 return false; 330 return false;
334 } 331 }
335 332
336 // static 333 // static
337 bool {{class_name}}StubDispatch::AcceptWithResponder( 334 bool {{class_name}}StubDispatch::AcceptWithResponder(
338 {{interface.name}}* impl, 335 {{interface.name}}* impl,
339 mojo::internal::SerializationContext* context,
340 mojo::Message* message, 336 mojo::Message* message,
341 mojo::MessageReceiverWithStatus* responder) { 337 mojo::MessageReceiverWithStatus* responder) {
342 {%- if interface.methods %} 338 {%- if interface.methods %}
343 switch (message->header()->name) { 339 switch (message->header()->name) {
344 {%- for method in interface.methods %} 340 {%- for method in interface.methods %}
345 case internal::k{{class_name}}_{{method.name}}_Name: { 341 case internal::k{{class_name}}_{{method.name}}_Name: {
346 {%- if method.response_parameters != None %} 342 {%- if method.response_parameters != None %}
347 internal::{{class_name}}_{{method.name}}_Params_Data* params = 343 internal::{{class_name}}_{{method.name}}_Params_Data* params =
348 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( 344 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >(
349 message->mutable_payload()); 345 message->mutable_payload());
350 346
351 {%- set desc = class_name~"::"~method.name %} 347 {%- set desc = class_name~"::"~method.name %}
352 {{alloc_params(method.param_struct, "params", "message", "context", desc)| 348 {{alloc_params(method.param_struct, "params", "message", desc)|
353 indent(4)}} 349 indent(4)}}
354 {{class_name}}::{{method.name}}Callback callback = 350 {{class_name}}::{{method.name}}Callback callback =
355 {{class_name}}_{{method.name}}_ProxyToResponder::CreateCallback( 351 {{class_name}}_{{method.name}}_ProxyToResponder::CreateCallback(
356 message->request_id(), 352 message->request_id(),
357 message->has_flag(mojo::Message::kFlagIsSync), responder, 353 message->has_flag(mojo::Message::kFlagIsSync), responder);
358 context->group_controller);
359 // A null |impl| means no implementation was bound. 354 // A null |impl| means no implementation was bound.
360 assert(impl); 355 assert(impl);
361 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); 356 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}");
362 mojo::internal::MessageDispatchContext context(message); 357 mojo::internal::MessageDispatchContext context(message);
363 impl->{{method.name}}( 358 impl->{{method.name}}(
364 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}std: :move(callback)); 359 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}std: :move(callback));
365 return true; 360 return true;
366 {%- else %} 361 {%- else %}
367 break; 362 break;
368 {%- endif %} 363 {%- endif %}
369 } 364 }
370 {%- endfor %} 365 {%- endfor %}
371 } 366 }
372 {%- endif %} 367 {%- endif %}
373 return false; 368 return false;
374 } 369 }
375 370
376 {#--- Request validator definitions #} 371 {#--- Request validator definitions #}
377 372
378 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { 373 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) {
379 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) 374 if (mojo::internal::ControlMessageHandler::IsControlMessage(message))
380 return true; 375 return true;
381 376
382 mojo::internal::ValidationContext validation_context( 377 mojo::internal::ValidationContext validation_context(
383 message->data(), message->data_num_bytes(), message->handles()->size(), 378 message->payload(), message->payload_num_bytes(),
384 message, "{{class_name}} RequestValidator"); 379 message->handles()->size(), message->payload_num_interface_ids(), message,
380 "{{class_name}} RequestValidator");
385 381
386 switch (message->header()->name) { 382 switch (message->header()->name) {
387 {%- for method in interface.methods %} 383 {%- for method in interface.methods %}
388 case internal::k{{class_name}}_{{method.name}}_Name: { 384 case internal::k{{class_name}}_{{method.name}}_Name: {
389 {%- if method.response_parameters != None %} 385 {%- if method.response_parameters != None %}
390 if (!mojo::internal::ValidateMessageIsRequestExpectingResponse( 386 if (!mojo::internal::ValidateMessageIsRequestExpectingResponse(
391 message, &validation_context)) { 387 message, &validation_context)) {
392 return false; 388 return false;
393 } 389 }
394 {%- else %} 390 {%- else %}
(...skipping 21 matching lines...) Expand all
416 return false; 412 return false;
417 } 413 }
418 414
419 {#--- Response validator definitions #} 415 {#--- Response validator definitions #}
420 {% if interface|has_callbacks %} 416 {% if interface|has_callbacks %}
421 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { 417 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
422 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) 418 if (mojo::internal::ControlMessageHandler::IsControlMessage(message))
423 return true; 419 return true;
424 420
425 mojo::internal::ValidationContext validation_context( 421 mojo::internal::ValidationContext validation_context(
426 message->data(), message->data_num_bytes(), message->handles()->size(), 422 message->payload(), message->payload_num_bytes(),
427 message, "{{class_name}} ResponseValidator"); 423 message->handles()->size(), message->payload_num_interface_ids(), message,
424 "{{class_name}} ResponseValidator");
428 425
429 if (!mojo::internal::ValidateMessageIsResponse(message, &validation_context)) 426 if (!mojo::internal::ValidateMessageIsResponse(message, &validation_context))
430 return false; 427 return false;
431 switch (message->header()->name) { 428 switch (message->header()->name) {
432 {%- for method in interface.methods if method.response_parameters != None %} 429 {%- for method in interface.methods if method.response_parameters != None %}
433 case internal::k{{class_name}}_{{method.name}}_Name: { 430 case internal::k{{class_name}}_{{method.name}}_Name: {
434 if (!mojo::internal::ValidateMessagePayload< 431 if (!mojo::internal::ValidateMessagePayload<
435 internal::{{class_name}}_{{method.name}}_ResponseParams_Data>( 432 internal::{{class_name}}_{{method.name}}_ResponseParams_Data>(
436 message, &validation_context)) { 433 message, &validation_context)) {
437 return false; 434 return false;
438 } 435 }
439 return true; 436 return true;
440 } 437 }
441 {%- endfor %} 438 {%- endfor %}
442 default: 439 default:
443 break; 440 break;
444 } 441 }
445 442
446 // Unrecognized message. 443 // Unrecognized message.
447 ReportValidationError( 444 ReportValidationError(
448 &validation_context, 445 &validation_context,
449 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); 446 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD);
450 return false; 447 return false;
451 } 448 }
452 {%- endif -%} 449 {%- endif -%}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698