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 aef7e9d3d78ac3354f1183be91189099eb9fb8b1..a6974d5881f37c30f3181620c67472d148ae6273 100644 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
@@ -5,7 +5,8 @@ |
{%- set proxy_name = interface.name ~ "Proxy" %} |
{%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %} |
-{%- macro alloc_params(struct, params, message, serialization_context) %} |
+{%- macro alloc_params(struct, params, message, serialization_context, |
+ description) %} |
({{params}})->DecodePointers(); |
({{serialization_context}})->handles.Swap(({{message}})->mutable_handles()); |
bool success = true; |
@@ -15,8 +16,16 @@ |
{{struct.name}}DataView input_data_view({{params}}, |
{{serialization_context}}); |
{{struct_macros.deserialize(struct, "input_data_view", "p_%s", "success")}} |
- if (!success) |
+ 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
|
+ {{message}}->data(), {{message}}->data_num_bytes(), |
+ {{message}}->handles()->size(), {{message}}, |
+ "{{description}} deserializer"); |
+ if (!success) { |
+ ReportValidationError( |
+ &validation_context, |
+ mojo::internal::VALIDATION_ERROR_DESERIALIZATION_FAILED); |
return false; |
+ } |
{%- endmacro %} |
{%- macro pass_params(parameters) %} |
@@ -98,7 +107,8 @@ bool {{class_name}}_{{method.name}}_HandleSyncResponse::Accept( |
message->mutable_payload()); |
{{alloc_params(method.response_param_struct, "params", "message", |
- "&serialization_context_")}} |
+ "&serialization_context_", |
+ "{{class_name}}::{{method.name}} response")}} |
{%- for param in method.response_parameters %} |
{%- if param.kind|is_move_only_kind %} |
@@ -133,7 +143,8 @@ bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( |
message->mutable_payload()); |
{{alloc_params(method.response_param_struct, "params", "message", |
- "&serialization_context_")}} |
+ "&serialization_context_", |
+ "{{class_name}}_{{method.name}} response")}} |
callback_.Run({{pass_params(method.response_parameters)}}); |
return true; |
} |
@@ -294,7 +305,8 @@ bool {{class_name}}Stub::Accept(mojo::Message* message) { |
message->mutable_payload()); |
{{alloc_params(method.param_struct, "params", "message", |
- "&serialization_context_")|indent(4)}} |
+ "&serialization_context_", "{{class_name}}::{{method.name}}") |
+ |indent(4)}} |
// A null |sink_| means no implementation was bound. |
assert(sink_); |
TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); |
@@ -324,7 +336,8 @@ bool {{class_name}}Stub::AcceptWithResponder( |
message->mutable_payload()); |
{{alloc_params(method.param_struct, "params", "message", |
- "&serialization_context_")|indent(4)}} |
+ "&serialization_context_", "{{class_name}}::{{method.name}}")| |
+ indent(4)}} |
{{class_name}}::{{method.name}}Callback::Runnable* runnable = |
new {{class_name}}_{{method.name}}_ProxyToResponder( |
message->request_id(), |
@@ -357,8 +370,12 @@ bool {{class_name}}Stub::AcceptWithResponder( |
bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
assert(sink_); |
+ mojo::internal::ValidationContext validation_context( |
+ message->data(), message->data_num_bytes(), message->handles()->size(), |
+ message, "{{class_name}} RequestValidator"); |
+ |
if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { |
- if (!mojo::internal::ValidateControlRequest(message)) |
+ if (!mojo::internal::ValidateControlRequest(message, &validation_context)) |
return false; |
return sink_->Accept(message); |
} |
@@ -367,14 +384,19 @@ bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
{%- for method in interface.methods %} |
case internal::k{{class_name}}_{{method.name}}_Name: { |
{%- if method.response_parameters != None %} |
- if (!mojo::internal::ValidateMessageIsRequestExpectingResponse(message)) |
+ if (!mojo::internal::ValidateMessageIsRequestExpectingResponse( |
+ message, &validation_context)) { |
return false; |
+ } |
{%- else %} |
- if (!mojo::internal::ValidateMessageIsRequestWithoutResponse(message)) |
+ if (!mojo::internal::ValidateMessageIsRequestWithoutResponse( |
+ message, &validation_context)) { |
return false; |
+ } |
{%- endif %} |
if (!mojo::internal::ValidateMessagePayload< |
- internal::{{class_name}}_{{method.name}}_Params_Data>(message)) { |
+ internal::{{class_name}}_{{method.name}}_Params_Data>( |
+ message, &validation_context)) { |
return false; |
} |
return sink_->Accept(message); |
@@ -386,6 +408,7 @@ bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
// Unrecognized message. |
ReportValidationError( |
+ &validation_context, |
mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
return false; |
} |
@@ -399,19 +422,24 @@ bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { |
assert(sink_); |
+ mojo::internal::ValidationContext validation_context( |
+ message->data(), message->data_num_bytes(), message->handles()->size(), |
+ message, "{{class_name}} ResponseValidator"); |
+ |
if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { |
- if (!mojo::internal::ValidateControlResponse(message)) |
+ if (!mojo::internal::ValidateControlResponse(message, &validation_context)) |
return false; |
return sink_->Accept(message); |
} |
- if (!mojo::internal::ValidateMessageIsResponse(message)) |
+ if (!mojo::internal::ValidateMessageIsResponse(message, &validation_context)) |
return false; |
switch (message->header()->name) { |
{%- for method in interface.methods if method.response_parameters != None %} |
case internal::k{{class_name}}_{{method.name}}_Name: { |
if (!mojo::internal::ValidateMessagePayload< |
- internal::{{class_name}}_{{method.name}}_ResponseParams_Data>(message)) { |
+ internal::{{class_name}}_{{method.name}}_ResponseParams_Data>( |
+ message, &validation_context)) { |
return false; |
} |
return sink_->Accept(message); |
@@ -423,6 +451,7 @@ bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { |
// Unrecognized message. |
ReportValidationError( |
+ &validation_context, |
mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
return false; |
} |