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

Side by Side Diff: mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl

Issue 289333002: Mojo cpp bindings: validation logic for incoming messages (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: changes according to Tom's suggestions Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
1 {%- import "interface_macros.tmpl" as interface_macros %} 1 {%- import "interface_macros.tmpl" as interface_macros %}
2 {%- set class_name = interface.name %} 2 {%- set class_name = interface.name %}
3 {%- set proxy_name = interface.name ~ "Proxy" %} 3 {%- set proxy_name = interface.name ~ "Proxy" %}
4 4
5 {%- macro pass_params(parameters) %} 5 {%- macro pass_params(parameters) %}
6 {%- for param in parameters %} 6 {%- for param in parameters %}
7 {%- if param.kind|is_object_kind -%} 7 {%- if param.kind|is_object_kind -%}
8 mojo::internal::Wrap(params->{{param.name}}()) 8 mojo::internal::Wrap(params->{{param.name}}())
9 {%- elif param.kind|is_interface_kind -%} 9 {%- elif param.kind|is_interface_kind -%}
10 mojo::MakeProxy<{{param.kind.name}}>(mojo::MakePassable(params->{{param.name}}() ).Pass()) 10 mojo::MakeProxy<{{param.kind.name}}>(mojo::MakePassable(params->{{param.name}}() ).Pass())
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 return false; 244 return false;
245 } 245 }
246 246
247 {#--- Request validator definitions #} 247 {#--- Request validator definitions #}
248 248
249 {{class_name}}RequestValidator::{{class_name}}RequestValidator( 249 {{class_name}}RequestValidator::{{class_name}}RequestValidator(
250 mojo::MessageReceiver* sink) : MessageFilter(sink) { 250 mojo::MessageReceiver* sink) : MessageFilter(sink) {
251 } 251 }
252 252
253 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { 253 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) {
254 // TODO(yzshen): implement validation logic. 254 {%- if interface.methods %}
255 switch (message->header()->name) {
256 {%- for method in interface.methods %}
257 case internal::k{{class_name}}_{{method.name}}_Name: {
258 {%- if method.response_parameters != None %}
259 if (!message->has_flag(mojo::internal::kMessageExpectsResponse))
260 return false;
261 {%- else %}
262 if (message->has_flag(mojo::internal::kMessageExpectsResponse) ||
263 message->has_flag(mojo::internal::kMessageIsResponse)) {
264 return false;
265 }
266 {%- endif %}
267 mojo::internal::BoundsChecker bounds_checker(
268 message->payload(), message->payload_num_bytes(),
269 message->handles()->size());
270 if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate(
271 message->payload(), &bounds_checker)) {
272 return false;
273 }
274 break;
275 }
276 {%- endfor %}
277 }
278 {%- endif %}
279
255 return sink_->Accept(message); 280 return sink_->Accept(message);
256 } 281 }
257 282
258 {#--- Response validator definitions #} 283 {#--- Response validator definitions #}
259 {% if interface|has_callbacks %} 284 {% if interface|has_callbacks %}
260 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( 285 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator(
261 mojo::MessageReceiver* sink) : MessageFilter(sink) { 286 mojo::MessageReceiver* sink) : MessageFilter(sink) {
262 } 287 }
263 288
264 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { 289 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
265 // TODO(yzshen): implement validation logic. 290 {%- if interface.methods %}
291 switch (message->header()->name) {
292 {%- for method in interface.methods if method.response_parameters != None %}
293 case internal::k{{class_name}}_{{method.name}}_Name: {
294 if (!message->has_flag(mojo::internal::kMessageIsResponse))
295 return false;
296 mojo::internal::BoundsChecker bounds_checker(
297 message->payload(), message->payload_num_bytes(),
298 message->handles()->size());
299 if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validat e(
300 message->payload(), &bounds_checker)) {
301 return false;
302 }
303 break;
304 }
305 {%- endfor %}
306 }
307 {%- endif %}
308
266 return sink_->Accept(message); 309 return sink_->Accept(message);
267 } 310 }
268 {%- endif -%} 311 {%- endif -%}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698