Chromium Code Reviews| 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 |