OLD | NEW |
---|---|
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, serialization_context, |
9 description) %} | |
9 ({{params}})->DecodePointers(); | 10 ({{params}})->DecodePointers(); |
10 ({{serialization_context}})->handles.Swap(({{message}})->mutable_handles()); | 11 ({{serialization_context}})->handles.Swap(({{message}})->mutable_handles()); |
11 bool success = true; | 12 bool success = true; |
12 {%- for param in struct.packed.packed_fields_in_ordinal_order %} | 13 {%- for param in struct.packed.packed_fields_in_ordinal_order %} |
13 {{param.field.kind|cpp_wrapper_type}} p_{{param.field.name}}{}; | 14 {{param.field.kind|cpp_wrapper_type}} p_{{param.field.name}}{}; |
14 {%- endfor %} | 15 {%- endfor %} |
15 {{struct.name}}DataView input_data_view({{params}}, | 16 {{struct.name}}DataView input_data_view({{params}}, |
16 {{serialization_context}}); | 17 {{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 mojo::internal::ValidationContext validation_context( |
yzshen1
2016/06/15 22:20:09
Please create this context inside the "if (!succes
Ken Rockot(use gerrit already)
2016/06/15 22:38:23
Done
| |
20 {{message}}->data(), {{message}}->data_num_bytes(), | |
21 {{message}}->handles()->size(), {{message}}, | |
22 "{{description}} deserializer"); | |
23 if (!success) { | |
24 ReportValidationError( | |
25 &validation_context, | |
26 mojo::internal::VALIDATION_ERROR_DESERIALIZATION_FAILED); | |
19 return false; | 27 return false; |
28 } | |
20 {%- endmacro %} | 29 {%- endmacro %} |
21 | 30 |
22 {%- macro pass_params(parameters) %} | 31 {%- macro pass_params(parameters) %} |
23 {%- for param in parameters %} | 32 {%- for param in parameters %} |
24 {%- if param.kind|is_move_only_kind -%} | 33 {%- if param.kind|is_move_only_kind -%} |
25 std::move(p_{{param.name}}) | 34 std::move(p_{{param.name}}) |
26 {%- else -%} | 35 {%- else -%} |
27 p_{{param.name}} | 36 p_{{param.name}} |
28 {%- endif -%} | 37 {%- endif -%} |
29 {%- if not loop.last %}, {% endif %} | 38 {%- if not loop.last %}, {% endif %} |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
91 {%- endfor -%} | 100 {%- endfor -%} |
92 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_HandleSyncResponse); | 101 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_HandleSyncResponse); |
93 }; | 102 }; |
94 bool {{class_name}}_{{method.name}}_HandleSyncResponse::Accept( | 103 bool {{class_name}}_{{method.name}}_HandleSyncResponse::Accept( |
95 mojo::Message* message) { | 104 mojo::Message* message) { |
96 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = | 105 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = |
97 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( | 106 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( |
98 message->mutable_payload()); | 107 message->mutable_payload()); |
99 | 108 |
100 {{alloc_params(method.response_param_struct, "params", "message", | 109 {{alloc_params(method.response_param_struct, "params", "message", |
101 "&serialization_context_")}} | 110 "&serialization_context_", |
111 "{{class_name}}::{{method.name}} response")}} | |
102 | 112 |
103 {%- for param in method.response_parameters %} | 113 {%- for param in method.response_parameters %} |
104 {%- if param.kind|is_move_only_kind %} | 114 {%- if param.kind|is_move_only_kind %} |
105 *out_{{param.name}}_ = std::move(p_{{param.name}}); | 115 *out_{{param.name}}_ = std::move(p_{{param.name}}); |
106 {%- else %} | 116 {%- else %} |
107 *out_{{param.name}}_ = p_{{param.name}}; | 117 *out_{{param.name}}_ = p_{{param.name}}; |
108 {%- endif %} | 118 {%- endif %} |
109 {%- endfor %} | 119 {%- endfor %} |
110 *result_ = true; | 120 *result_ = true; |
111 return true; | 121 return true; |
(...skipping 14 matching lines...) Expand all Loading... | |
126 mojo::internal::SerializationContext serialization_context_; | 136 mojo::internal::SerializationContext serialization_context_; |
127 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback); | 137 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback); |
128 }; | 138 }; |
129 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( | 139 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( |
130 mojo::Message* message) { | 140 mojo::Message* message) { |
131 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = | 141 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = |
132 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( | 142 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( |
133 message->mutable_payload()); | 143 message->mutable_payload()); |
134 | 144 |
135 {{alloc_params(method.response_param_struct, "params", "message", | 145 {{alloc_params(method.response_param_struct, "params", "message", |
136 "&serialization_context_")}} | 146 "&serialization_context_", |
147 "{{class_name}}_{{method.name}} response")}} | |
137 callback_.Run({{pass_params(method.response_parameters)}}); | 148 callback_.Run({{pass_params(method.response_parameters)}}); |
138 return true; | 149 return true; |
139 } | 150 } |
140 {%- endif %} | 151 {%- endif %} |
141 {%- endfor %} | 152 {%- endfor %} |
142 | 153 |
143 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver) | 154 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver) |
144 : ControlMessageProxy(receiver) { | 155 : ControlMessageProxy(receiver) { |
145 } | 156 } |
146 | 157 |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
287 {%- if interface.methods %} | 298 {%- if interface.methods %} |
288 switch (message->header()->name) { | 299 switch (message->header()->name) { |
289 {%- for method in interface.methods %} | 300 {%- for method in interface.methods %} |
290 case internal::k{{class_name}}_{{method.name}}_Name: { | 301 case internal::k{{class_name}}_{{method.name}}_Name: { |
291 {%- if method.response_parameters == None %} | 302 {%- if method.response_parameters == None %} |
292 internal::{{class_name}}_{{method.name}}_Params_Data* params = | 303 internal::{{class_name}}_{{method.name}}_Params_Data* params = |
293 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( | 304 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( |
294 message->mutable_payload()); | 305 message->mutable_payload()); |
295 | 306 |
296 {{alloc_params(method.param_struct, "params", "message", | 307 {{alloc_params(method.param_struct, "params", "message", |
297 "&serialization_context_")|indent(4)}} | 308 "&serialization_context_", "{{class_name}}::{{method.name}}") |
309 |indent(4)}} | |
298 // A null |sink_| means no implementation was bound. | 310 // A null |sink_| means no implementation was bound. |
299 assert(sink_); | 311 assert(sink_); |
300 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); | 312 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); |
301 sink_->{{method.name}}({{pass_params(method.parameters)}}); | 313 sink_->{{method.name}}({{pass_params(method.parameters)}}); |
302 return true; | 314 return true; |
303 {%- else %} | 315 {%- else %} |
304 break; | 316 break; |
305 {%- endif %} | 317 {%- endif %} |
306 } | 318 } |
307 {%- endfor %} | 319 {%- endfor %} |
308 } | 320 } |
309 {%- endif %} | 321 {%- endif %} |
310 return false; | 322 return false; |
311 } | 323 } |
312 | 324 |
313 bool {{class_name}}Stub::AcceptWithResponder( | 325 bool {{class_name}}Stub::AcceptWithResponder( |
314 mojo::Message* message, mojo::MessageReceiverWithStatus* responder) { | 326 mojo::Message* message, mojo::MessageReceiverWithStatus* responder) { |
315 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) | 327 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) |
316 return control_message_handler_.AcceptWithResponder(message, responder); | 328 return control_message_handler_.AcceptWithResponder(message, responder); |
317 {%- if interface.methods %} | 329 {%- if interface.methods %} |
318 switch (message->header()->name) { | 330 switch (message->header()->name) { |
319 {%- for method in interface.methods %} | 331 {%- for method in interface.methods %} |
320 case internal::k{{class_name}}_{{method.name}}_Name: { | 332 case internal::k{{class_name}}_{{method.name}}_Name: { |
321 {%- if method.response_parameters != None %} | 333 {%- if method.response_parameters != None %} |
322 internal::{{class_name}}_{{method.name}}_Params_Data* params = | 334 internal::{{class_name}}_{{method.name}}_Params_Data* params = |
323 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( | 335 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( |
324 message->mutable_payload()); | 336 message->mutable_payload()); |
325 | 337 |
326 {{alloc_params(method.param_struct, "params", "message", | 338 {{alloc_params(method.param_struct, "params", "message", |
327 "&serialization_context_")|indent(4)}} | 339 "&serialization_context_", "{{class_name}}::{{method.name}}")| |
340 indent(4)}} | |
328 {{class_name}}::{{method.name}}Callback::Runnable* runnable = | 341 {{class_name}}::{{method.name}}Callback::Runnable* runnable = |
329 new {{class_name}}_{{method.name}}_ProxyToResponder( | 342 new {{class_name}}_{{method.name}}_ProxyToResponder( |
330 message->request_id(), | 343 message->request_id(), |
331 message->has_flag(mojo::internal::kMessageIsSync), | 344 message->has_flag(mojo::internal::kMessageIsSync), |
332 responder, | 345 responder, |
333 serialization_context_.router); | 346 serialization_context_.router); |
334 {{class_name}}::{{method.name}}Callback callback(runnable); | 347 {{class_name}}::{{method.name}}Callback callback(runnable); |
335 // A null |sink_| means no implementation was bound. | 348 // A null |sink_| means no implementation was bound. |
336 assert(sink_); | 349 assert(sink_); |
337 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); | 350 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); |
(...skipping 12 matching lines...) Expand all Loading... | |
350 | 363 |
351 {#--- Request validator definitions #} | 364 {#--- Request validator definitions #} |
352 | 365 |
353 {{class_name}}RequestValidator::{{class_name}}RequestValidator( | 366 {{class_name}}RequestValidator::{{class_name}}RequestValidator( |
354 mojo::MessageReceiver* sink) : MessageFilter(sink) { | 367 mojo::MessageReceiver* sink) : MessageFilter(sink) { |
355 } | 368 } |
356 | 369 |
357 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { | 370 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
358 assert(sink_); | 371 assert(sink_); |
359 | 372 |
373 mojo::internal::ValidationContext validation_context( | |
374 message->data(), message->data_num_bytes(), message->handles()->size(), | |
375 message, "{{class_name}} RequestValidator"); | |
376 | |
360 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { | 377 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { |
361 if (!mojo::internal::ValidateControlRequest(message)) | 378 if (!mojo::internal::ValidateControlRequest(message, &validation_context)) |
362 return false; | 379 return false; |
363 return sink_->Accept(message); | 380 return sink_->Accept(message); |
364 } | 381 } |
365 | 382 |
366 switch (message->header()->name) { | 383 switch (message->header()->name) { |
367 {%- for method in interface.methods %} | 384 {%- for method in interface.methods %} |
368 case internal::k{{class_name}}_{{method.name}}_Name: { | 385 case internal::k{{class_name}}_{{method.name}}_Name: { |
369 {%- if method.response_parameters != None %} | 386 {%- if method.response_parameters != None %} |
370 if (!mojo::internal::ValidateMessageIsRequestExpectingResponse(message)) | 387 if (!mojo::internal::ValidateMessageIsRequestExpectingResponse( |
388 message, &validation_context)) { | |
371 return false; | 389 return false; |
390 } | |
372 {%- else %} | 391 {%- else %} |
373 if (!mojo::internal::ValidateMessageIsRequestWithoutResponse(message)) | 392 if (!mojo::internal::ValidateMessageIsRequestWithoutResponse( |
393 message, &validation_context)) { | |
374 return false; | 394 return false; |
395 } | |
375 {%- endif %} | 396 {%- endif %} |
376 if (!mojo::internal::ValidateMessagePayload< | 397 if (!mojo::internal::ValidateMessagePayload< |
377 internal::{{class_name}}_{{method.name}}_Params_Data>(message)) { | 398 internal::{{class_name}}_{{method.name}}_Params_Data>( |
399 message, &validation_context)) { | |
378 return false; | 400 return false; |
379 } | 401 } |
380 return sink_->Accept(message); | 402 return sink_->Accept(message); |
381 } | 403 } |
382 {%- endfor %} | 404 {%- endfor %} |
383 default: | 405 default: |
384 break; | 406 break; |
385 } | 407 } |
386 | 408 |
387 // Unrecognized message. | 409 // Unrecognized message. |
388 ReportValidationError( | 410 ReportValidationError( |
411 &validation_context, | |
389 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); | 412 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
390 return false; | 413 return false; |
391 } | 414 } |
392 | 415 |
393 {#--- Response validator definitions #} | 416 {#--- Response validator definitions #} |
394 {% if interface|has_callbacks %} | 417 {% if interface|has_callbacks %} |
395 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( | 418 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( |
396 mojo::MessageReceiver* sink) : MessageFilter(sink) { | 419 mojo::MessageReceiver* sink) : MessageFilter(sink) { |
397 } | 420 } |
398 | 421 |
399 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { | 422 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { |
400 assert(sink_); | 423 assert(sink_); |
401 | 424 |
425 mojo::internal::ValidationContext validation_context( | |
426 message->data(), message->data_num_bytes(), message->handles()->size(), | |
427 message, "{{class_name}} ResponseValidator"); | |
428 | |
402 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { | 429 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { |
403 if (!mojo::internal::ValidateControlResponse(message)) | 430 if (!mojo::internal::ValidateControlResponse(message, &validation_context)) |
404 return false; | 431 return false; |
405 return sink_->Accept(message); | 432 return sink_->Accept(message); |
406 } | 433 } |
407 | 434 |
408 if (!mojo::internal::ValidateMessageIsResponse(message)) | 435 if (!mojo::internal::ValidateMessageIsResponse(message, &validation_context)) |
409 return false; | 436 return false; |
410 switch (message->header()->name) { | 437 switch (message->header()->name) { |
411 {%- for method in interface.methods if method.response_parameters != None %} | 438 {%- for method in interface.methods if method.response_parameters != None %} |
412 case internal::k{{class_name}}_{{method.name}}_Name: { | 439 case internal::k{{class_name}}_{{method.name}}_Name: { |
413 if (!mojo::internal::ValidateMessagePayload< | 440 if (!mojo::internal::ValidateMessagePayload< |
414 internal::{{class_name}}_{{method.name}}_ResponseParams_Data>(mes sage)) { | 441 internal::{{class_name}}_{{method.name}}_ResponseParams_Data>( |
442 message, &validation_context)) { | |
415 return false; | 443 return false; |
416 } | 444 } |
417 return sink_->Accept(message); | 445 return sink_->Accept(message); |
418 } | 446 } |
419 {%- endfor %} | 447 {%- endfor %} |
420 default: | 448 default: |
421 break; | 449 break; |
422 } | 450 } |
423 | 451 |
424 // Unrecognized message. | 452 // Unrecognized message. |
425 ReportValidationError( | 453 ReportValidationError( |
454 &validation_context, | |
426 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); | 455 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
427 return false; | 456 return false; |
428 } | 457 } |
429 {%- endif -%} | 458 {%- endif -%} |
OLD | NEW |