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, create_error, method_name, |
| 9 serialization_context) %} | |
| 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 if (!success) |
| 19 return false; | 20 return {{create_error}}("{{class_name}}", "{{method_name}}", {{message}}); |
|
yzshen1
2016/06/15 16:22:33
Please consider using {{class_name}}::Name_ instea
| |
| 20 {%- endmacro %} | 21 {%- endmacro %} |
| 21 | 22 |
| 22 {%- macro pass_params(parameters) %} | 23 {%- macro pass_params(parameters) %} |
| 23 {%- for param in parameters %} | 24 {%- for param in parameters %} |
| 24 {%- if param.kind|is_move_only_kind -%} | 25 {%- if param.kind|is_move_only_kind -%} |
| 25 std::move(p_{{param.name}}) | 26 std::move(p_{{param.name}}) |
| 26 {%- else -%} | 27 {%- else -%} |
| 27 p_{{param.name}} | 28 p_{{param.name}} |
| 28 {%- endif -%} | 29 {%- endif -%} |
| 29 {%- if not loop.last %}, {% endif %} | 30 {%- if not loop.last %}, {% endif %} |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 75 scoped_refptr<mojo::internal::MultiplexRouter> router, bool* result | 76 scoped_refptr<mojo::internal::MultiplexRouter> router, bool* result |
| 76 {%- for param in method.response_parameters -%} | 77 {%- for param in method.response_parameters -%} |
| 77 , {{param.kind|cpp_wrapper_type}}* out_{{param.name}} | 78 , {{param.kind|cpp_wrapper_type}}* out_{{param.name}} |
| 78 {%- endfor %}) | 79 {%- endfor %}) |
| 79 : serialization_context_(std::move(router)), result_(result) | 80 : serialization_context_(std::move(router)), result_(result) |
| 80 {%- for param in method.response_parameters -%} | 81 {%- for param in method.response_parameters -%} |
| 81 , out_{{param.name}}_(out_{{param.name}}) | 82 , out_{{param.name}}_(out_{{param.name}}) |
| 82 {%- endfor %} { | 83 {%- endfor %} { |
| 83 DCHECK(!*result_); | 84 DCHECK(!*result_); |
| 84 } | 85 } |
| 85 bool Accept(mojo::Message* message) override; | 86 Result Accept(mojo::Message* message) override; |
| 86 private: | 87 private: |
| 87 mojo::internal::SerializationContext serialization_context_; | 88 mojo::internal::SerializationContext serialization_context_; |
| 88 bool* result_; | 89 bool* result_; |
| 89 {%- for param in method.response_parameters %} | 90 {%- for param in method.response_parameters %} |
| 90 {{param.kind|cpp_wrapper_type}}* out_{{param.name}}_; | 91 {{param.kind|cpp_wrapper_type}}* out_{{param.name}}_; |
| 91 {%- endfor -%} | 92 {%- endfor -%} |
| 92 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_HandleSyncResponse); | 93 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_HandleSyncResponse); |
| 93 }; | 94 }; |
| 94 bool {{class_name}}_{{method.name}}_HandleSyncResponse::Accept( | 95 mojo::MessageReceiver::Result |
| 96 {{class_name}}_{{method.name}}_HandleSyncResponse::Accept( | |
| 95 mojo::Message* message) { | 97 mojo::Message* message) { |
| 96 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = | 98 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = |
| 97 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( | 99 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( |
| 98 message->mutable_payload()); | 100 message->mutable_payload()); |
| 99 | 101 |
| 100 {{alloc_params(method.response_param_struct, "params", "message", | 102 {{alloc_params(method.response_param_struct, "params", "message", |
| 103 "Result::ForBadResponse", method.name, | |
| 101 "&serialization_context_")}} | 104 "&serialization_context_")}} |
| 102 | 105 |
| 103 {%- for param in method.response_parameters %} | 106 {%- for param in method.response_parameters %} |
| 104 {%- if param.kind|is_move_only_kind %} | 107 {%- if param.kind|is_move_only_kind %} |
| 105 *out_{{param.name}}_ = std::move(p_{{param.name}}); | 108 *out_{{param.name}}_ = std::move(p_{{param.name}}); |
| 106 {%- else %} | 109 {%- else %} |
| 107 *out_{{param.name}}_ = p_{{param.name}}; | 110 *out_{{param.name}}_ = p_{{param.name}}; |
| 108 {%- endif %} | 111 {%- endif %} |
| 109 {%- endfor %} | 112 {%- endfor %} |
| 110 *result_ = true; | 113 *result_ = true; |
| 111 return true; | 114 return Result::ForSuccess(); |
| 112 } | 115 } |
| 113 {%- endif %} | 116 {%- endif %} |
| 114 | 117 |
| 115 class {{class_name}}_{{method.name}}_ForwardToCallback | 118 class {{class_name}}_{{method.name}}_ForwardToCallback |
| 116 : public mojo::MessageReceiver { | 119 : public mojo::MessageReceiver { |
| 117 public: | 120 public: |
| 118 {{class_name}}_{{method.name}}_ForwardToCallback( | 121 {{class_name}}_{{method.name}}_ForwardToCallback( |
| 119 const {{class_name}}::{{method.name}}Callback& callback, | 122 const {{class_name}}::{{method.name}}Callback& callback, |
| 120 scoped_refptr<mojo::internal::MultiplexRouter> router) | 123 scoped_refptr<mojo::internal::MultiplexRouter> router) |
| 121 : callback_(callback), serialization_context_(std::move(router)) { | 124 : callback_(callback), serialization_context_(std::move(router)) { |
| 122 } | 125 } |
| 123 bool Accept(mojo::Message* message) override; | 126 Result Accept(mojo::Message* message) override; |
| 124 private: | 127 private: |
| 125 {{class_name}}::{{method.name}}Callback callback_; | 128 {{class_name}}::{{method.name}}Callback callback_; |
| 126 mojo::internal::SerializationContext serialization_context_; | 129 mojo::internal::SerializationContext serialization_context_; |
| 127 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback); | 130 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback); |
| 128 }; | 131 }; |
| 129 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( | 132 mojo::MessageReceiver::Result |
| 133 {{class_name}}_{{method.name}}_ForwardToCallback::Accept( | |
| 130 mojo::Message* message) { | 134 mojo::Message* message) { |
| 131 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = | 135 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = |
| 132 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( | 136 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( |
| 133 message->mutable_payload()); | 137 message->mutable_payload()); |
| 134 | 138 |
| 135 {{alloc_params(method.response_param_struct, "params", "message", | 139 {{alloc_params(method.response_param_struct, "params", "message", |
| 140 "Result::ForBadResponse", method.name, | |
| 136 "&serialization_context_")}} | 141 "&serialization_context_")}} |
| 137 callback_.Run({{pass_params(method.response_parameters)}}); | 142 callback_.Run({{pass_params(method.response_parameters)}}); |
| 138 return true; | 143 return Result::ForSuccess(); |
| 139 } | 144 } |
| 140 {%- endif %} | 145 {%- endif %} |
| 141 {%- endfor %} | 146 {%- endfor %} |
| 142 | 147 |
| 143 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver) | 148 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver) |
| 144 : ControlMessageProxy(receiver) { | 149 : ControlMessageProxy(receiver) { |
| 145 } | 150 } |
| 146 | 151 |
| 147 {#--- Proxy definitions #} | 152 {#--- Proxy definitions #} |
| 148 | 153 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 164 {{build_message(params_struct, "param_%s", params_description, | 169 {{build_message(params_struct, "param_%s", params_description, |
| 165 "&serialization_context_")}} | 170 "&serialization_context_")}} |
| 166 | 171 |
| 167 bool result = false; | 172 bool result = false; |
| 168 mojo::MessageReceiver* responder = | 173 mojo::MessageReceiver* responder = |
| 169 new {{class_name}}_{{method.name}}_HandleSyncResponse( | 174 new {{class_name}}_{{method.name}}_HandleSyncResponse( |
| 170 serialization_context_.router, &result | 175 serialization_context_.router, &result |
| 171 {%- for param in method.response_parameters -%} | 176 {%- for param in method.response_parameters -%} |
| 172 , param_{{param.name}} | 177 , param_{{param.name}} |
| 173 {%- endfor %}); | 178 {%- endfor %}); |
| 174 if (!receiver_->AcceptWithResponder(builder.message(), responder)) | 179 if (!receiver_->AcceptWithResponder(builder.message(), |
| 180 responder).Succeeded()) { | |
| 175 delete responder; | 181 delete responder; |
| 182 } | |
| 176 return result; | 183 return result; |
| 177 } | 184 } |
| 178 {%- endif %} | 185 {%- endif %} |
| 179 | 186 |
| 180 void {{proxy_name}}::{{method.name}}( | 187 void {{proxy_name}}::{{method.name}}( |
| 181 {{interface_macros.declare_request_params("in_", method)}}) { | 188 {{interface_macros.declare_request_params("in_", method)}}) { |
| 182 {{struct_macros.get_serialized_size(params_struct, "in_%s", | 189 {{struct_macros.get_serialized_size(params_struct, "in_%s", |
| 183 "&serialization_context_")}} | 190 "&serialization_context_")}} |
| 184 | 191 |
| 185 {%- if method.response_parameters != None %} | 192 {%- if method.response_parameters != None %} |
| 186 mojo::internal::RequestMessageBuilder builder({{message_name}}, size); | 193 mojo::internal::RequestMessageBuilder builder({{message_name}}, size); |
| 187 {%- else %} | 194 {%- else %} |
| 188 mojo::internal::MessageBuilder builder({{message_name}}, size); | 195 mojo::internal::MessageBuilder builder({{message_name}}, size); |
| 189 {%- endif %} | 196 {%- endif %} |
| 190 | 197 |
| 191 {{build_message(params_struct, "in_%s", params_description, | 198 {{build_message(params_struct, "in_%s", params_description, |
| 192 "&serialization_context_")}} | 199 "&serialization_context_")}} |
| 193 | 200 |
| 194 {%- if method.response_parameters != None %} | 201 {%- if method.response_parameters != None %} |
| 195 mojo::MessageReceiver* responder = | 202 mojo::MessageReceiver* responder = |
| 196 new {{class_name}}_{{method.name}}_ForwardToCallback(callback, serializati on_context_.router); | 203 new {{class_name}}_{{method.name}}_ForwardToCallback( |
| 197 if (!receiver_->AcceptWithResponder(builder.message(), responder)) | 204 callback, serialization_context_.router); |
| 205 if (!receiver_->AcceptWithResponder(builder.message(), responder).Succeeded()) | |
| 198 delete responder; | 206 delete responder; |
| 199 {%- else %} | 207 {%- else %} |
| 200 bool ok = receiver_->Accept(builder.message()); | 208 // This return value may be ignored as any unsuccessful result implies the |
| 201 // This return value may be ignored as !ok implies the Connector has | 209 // Connector has encountered an error, which will be visible through other |
| 202 // encountered an error, which will be visible through other means. | 210 // means. |
| 203 ALLOW_UNUSED_LOCAL(ok); | 211 ignore_result(receiver_->Accept(builder.message())); |
| 204 {%- endif %} | 212 {%- endif %} |
| 205 } | 213 } |
| 206 {%- endfor %} | 214 {%- endfor %} |
| 207 | 215 |
| 208 {#--- ProxyToResponder definition #} | 216 {#--- ProxyToResponder definition #} |
| 209 {%- for method in interface.methods -%} | 217 {%- for method in interface.methods -%} |
| 210 {%- if method.response_parameters != None %} | 218 {%- if method.response_parameters != None %} |
| 211 {%- set message_name = | 219 {%- set message_name = |
| 212 "internal::k%s_%s_Name"|format(interface.name, method.name) %} | 220 "internal::k%s_%s_Name"|format(interface.name, method.name) %} |
| 213 {%- set response_params_struct = method.response_param_struct %} | 221 {%- set response_params_struct = method.response_param_struct %} |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 254 }; | 262 }; |
| 255 void {{class_name}}_{{method.name}}_ProxyToResponder::Run( | 263 void {{class_name}}_{{method.name}}_ProxyToResponder::Run( |
| 256 {{interface_macros.declare_params("in_", method.response_parameters)}}) { | 264 {{interface_macros.declare_params("in_", method.response_parameters)}}) { |
| 257 {{struct_macros.get_serialized_size(response_params_struct, "in_%s", | 265 {{struct_macros.get_serialized_size(response_params_struct, "in_%s", |
| 258 "&serialization_context_")}} | 266 "&serialization_context_")}} |
| 259 mojo::internal::ResponseMessageBuilder builder( | 267 mojo::internal::ResponseMessageBuilder builder( |
| 260 {{message_name}}, size, request_id_, | 268 {{message_name}}, size, request_id_, |
| 261 is_sync_ ? mojo::internal::kMessageIsSync : 0); | 269 is_sync_ ? mojo::internal::kMessageIsSync : 0); |
| 262 {{build_message(response_params_struct, "in_%s", params_description, | 270 {{build_message(response_params_struct, "in_%s", params_description, |
| 263 "&serialization_context_")}} | 271 "&serialization_context_")}} |
| 264 bool ok = responder_->Accept(builder.message()); | 272 // TODO(darin): Failure here indicates a malformed message, and that may be |
|
yzshen1
2016/06/15 16:22:34
Does it make sense to replace this comment with th
| |
| 265 ALLOW_UNUSED_LOCAL(ok); | 273 // good reason to close the connection. However, we don't have a way to do |
| 266 // TODO(darin): !ok returned here indicates a malformed message, and that may | |
| 267 // be good reason to close the connection. However, we don't have a way to do | |
| 268 // that from here. We should add a way. | 274 // that from here. We should add a way. |
| 275 ignore_result(responder_->Accept(builder.message())); | |
| 269 delete responder_; | 276 delete responder_; |
| 270 responder_ = nullptr; | 277 responder_ = nullptr; |
| 271 } | 278 } |
| 272 {%- endif -%} | 279 {%- endif -%} |
| 273 {%- endfor %} | 280 {%- endfor %} |
| 274 | 281 |
| 275 {{class_name}}Stub::{{class_name}}Stub() | 282 {{class_name}}Stub::{{class_name}}Stub() |
| 276 : sink_(nullptr), | 283 : sink_(nullptr), |
| 277 control_message_handler_({{interface.name}}::Version_) { | 284 control_message_handler_({{interface.name}}::Name_, |
| 285 {{interface.name}}::Version_) { | |
| 278 } | 286 } |
| 279 | 287 |
| 280 {{class_name}}Stub::~{{interface.name}}Stub() {} | 288 {{class_name}}Stub::~{{interface.name}}Stub() {} |
| 281 | 289 |
| 282 {#--- Stub definition #} | 290 {#--- Stub definition #} |
| 283 | 291 |
| 284 bool {{class_name}}Stub::Accept(mojo::Message* message) { | 292 mojo::MessageReceiver::Result {{class_name}}Stub::Accept( |
| 293 mojo::Message* message) { | |
| 285 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) | 294 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) |
| 286 return control_message_handler_.Accept(message); | 295 return control_message_handler_.Accept(message); |
| 287 {%- if interface.methods %} | 296 {%- if interface.methods %} |
| 288 switch (message->header()->name) { | 297 switch (message->header()->name) { |
| 289 {%- for method in interface.methods %} | 298 {%- for method in interface.methods %} |
| 290 case internal::k{{class_name}}_{{method.name}}_Name: { | 299 case internal::k{{class_name}}_{{method.name}}_Name: { |
| 291 {%- if method.response_parameters == None %} | 300 {%- if method.response_parameters == None %} |
| 292 internal::{{class_name}}_{{method.name}}_Params_Data* params = | 301 internal::{{class_name}}_{{method.name}}_Params_Data* params = |
| 293 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( | 302 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( |
| 294 message->mutable_payload()); | 303 message->mutable_payload()); |
| 295 | 304 |
| 296 {{alloc_params(method.param_struct, "params", "message", | 305 {{alloc_params(method.param_struct, "params", "message", |
| 306 "Result::ForBadRequest", method.name, | |
| 297 "&serialization_context_")|indent(4)}} | 307 "&serialization_context_")|indent(4)}} |
| 298 // A null |sink_| means no implementation was bound. | 308 // A null |sink_| means no implementation was bound. |
| 299 assert(sink_); | 309 assert(sink_); |
| 300 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); | 310 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); |
| 301 sink_->{{method.name}}({{pass_params(method.parameters)}}); | 311 sink_->{{method.name}}({{pass_params(method.parameters)}}); |
| 302 return true; | 312 return Result::ForSuccess(); |
| 303 {%- else %} | 313 {%- else %} |
| 304 break; | 314 break; |
| 305 {%- endif %} | 315 {%- endif %} |
| 306 } | 316 } |
| 307 {%- endfor %} | 317 {%- endfor %} |
| 308 } | 318 } |
| 309 {%- endif %} | 319 {%- endif %} |
| 310 return false; | 320 return Result::ForUnexpectedRequest("{{class_name}}", message); |
| 311 } | 321 } |
| 312 | 322 |
| 313 bool {{class_name}}Stub::AcceptWithResponder( | 323 mojo::MessageReceiver::Result {{class_name}}Stub::AcceptWithResponder( |
| 314 mojo::Message* message, mojo::MessageReceiverWithStatus* responder) { | 324 mojo::Message* message, |
| 325 mojo::MessageReceiverWithStatus* responder) { | |
| 315 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) | 326 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) |
| 316 return control_message_handler_.AcceptWithResponder(message, responder); | 327 return control_message_handler_.AcceptWithResponder(message, responder); |
| 317 {%- if interface.methods %} | 328 {%- if interface.methods %} |
| 318 switch (message->header()->name) { | 329 switch (message->header()->name) { |
| 319 {%- for method in interface.methods %} | 330 {%- for method in interface.methods %} |
| 320 case internal::k{{class_name}}_{{method.name}}_Name: { | 331 case internal::k{{class_name}}_{{method.name}}_Name: { |
| 321 {%- if method.response_parameters != None %} | 332 {%- if method.response_parameters != None %} |
| 322 internal::{{class_name}}_{{method.name}}_Params_Data* params = | 333 internal::{{class_name}}_{{method.name}}_Params_Data* params = |
| 323 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( | 334 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( |
| 324 message->mutable_payload()); | 335 message->mutable_payload()); |
| 325 | 336 |
| 326 {{alloc_params(method.param_struct, "params", "message", | 337 {{alloc_params(method.param_struct, "params", "message", |
| 338 "Result::ForBadRequest", method.name, | |
| 327 "&serialization_context_")|indent(4)}} | 339 "&serialization_context_")|indent(4)}} |
| 328 {{class_name}}::{{method.name}}Callback::Runnable* runnable = | 340 {{class_name}}::{{method.name}}Callback::Runnable* runnable = |
| 329 new {{class_name}}_{{method.name}}_ProxyToResponder( | 341 new {{class_name}}_{{method.name}}_ProxyToResponder( |
| 330 message->request_id(), | 342 message->request_id(), |
| 331 message->has_flag(mojo::internal::kMessageIsSync), | 343 message->has_flag(mojo::internal::kMessageIsSync), |
| 332 responder, | 344 responder, |
| 333 serialization_context_.router); | 345 serialization_context_.router); |
| 334 {{class_name}}::{{method.name}}Callback callback(runnable); | 346 {{class_name}}::{{method.name}}Callback callback(runnable); |
| 335 // A null |sink_| means no implementation was bound. | 347 // A null |sink_| means no implementation was bound. |
| 336 assert(sink_); | 348 assert(sink_); |
| 337 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); | 349 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); |
| 338 sink_->{{method.name}}( | 350 sink_->{{method.name}}( |
| 339 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}call back); | 351 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}call back); |
| 340 return true; | 352 return Result::ForSuccess(); |
| 341 {%- else %} | 353 {%- else %} |
| 342 break; | 354 break; |
| 343 {%- endif %} | 355 {%- endif %} |
| 344 } | 356 } |
| 345 {%- endfor %} | 357 {%- endfor %} |
| 346 } | 358 } |
| 347 {%- endif %} | 359 {%- endif %} |
| 348 return false; | 360 return Result::ForUnexpectedRequest("{{class_name}}", message); |
| 349 } | 361 } |
| 350 | 362 |
| 351 {#--- Request validator definitions #} | 363 {#--- Request validator definitions #} |
| 352 | 364 |
| 353 {{class_name}}RequestValidator::{{class_name}}RequestValidator( | 365 {{class_name}}RequestValidator::{{class_name}}RequestValidator( |
| 354 mojo::MessageReceiver* sink) : MessageFilter(sink) { | 366 mojo::MessageReceiver* sink) : MessageFilter(sink) { |
| 355 } | 367 } |
| 356 | 368 |
| 357 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { | 369 mojo::MessageReceiver::Result {{class_name}}RequestValidator::Accept( |
| 370 mojo::Message* message) { | |
| 358 assert(sink_); | 371 assert(sink_); |
| 359 | 372 |
| 360 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { | 373 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { |
| 361 if (!mojo::internal::ValidateControlRequest(message)) | 374 if (!mojo::internal::ValidateControlRequest(message)) |
| 362 return false; | 375 return Result::ForBadControlMessage("{{class_name}}", message); |
| 363 return sink_->Accept(message); | 376 return sink_->Accept(message); |
| 364 } | 377 } |
| 365 | 378 |
| 366 switch (message->header()->name) { | 379 switch (message->header()->name) { |
| 367 {%- for method in interface.methods %} | 380 {%- for method in interface.methods %} |
| 368 case internal::k{{class_name}}_{{method.name}}_Name: { | 381 case internal::k{{class_name}}_{{method.name}}_Name: { |
| 369 {%- if method.response_parameters != None %} | 382 {%- if method.response_parameters != None %} |
| 370 if (!mojo::internal::ValidateMessageIsRequestExpectingResponse(message)) | 383 if (!mojo::internal::ValidateMessageIsRequestExpectingResponse(message)) { |
| 371 return false; | 384 return Result::ForBadRequest( |
| 385 "{{class_name}}", "{{method.name}}", message); | |
| 386 } | |
| 372 {%- else %} | 387 {%- else %} |
| 373 if (!mojo::internal::ValidateMessageIsRequestWithoutResponse(message)) | 388 if (!mojo::internal::ValidateMessageIsRequestWithoutResponse(message)) { |
| 374 return false; | 389 return Result::ForBadRequest( |
| 390 "{{class_name}}", "{{method.name}}", message); | |
| 391 } | |
| 375 {%- endif %} | 392 {%- endif %} |
| 376 if (!mojo::internal::ValidateMessagePayload< | 393 if (!mojo::internal::ValidateMessagePayload< |
| 377 internal::{{class_name}}_{{method.name}}_Params_Data>(message)) { | 394 internal::{{class_name}}_{{method.name}}_Params_Data>(message)) { |
| 378 return false; | 395 return Result::ForBadRequest( |
| 396 "{{class_name}}", "{{method.name}}", message); | |
| 379 } | 397 } |
| 380 return sink_->Accept(message); | 398 return sink_->Accept(message); |
| 381 } | 399 } |
| 382 {%- endfor %} | 400 {%- endfor %} |
| 383 default: | 401 default: |
| 384 break; | 402 break; |
| 385 } | 403 } |
| 386 | 404 |
| 387 // Unrecognized message. | 405 // Unrecognized message. |
| 388 ReportValidationError( | 406 ReportValidationError( |
| 389 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); | 407 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
| 390 return false; | 408 return Result::ForUnexpectedRequest("{{class_name}}", message); |
| 391 } | 409 } |
| 392 | 410 |
| 393 {#--- Response validator definitions #} | 411 {#--- Response validator definitions #} |
| 394 {% if interface|has_callbacks %} | 412 {% if interface|has_callbacks %} |
| 395 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( | 413 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( |
| 396 mojo::MessageReceiver* sink) : MessageFilter(sink) { | 414 mojo::MessageReceiver* sink) : MessageFilter(sink) { |
| 397 } | 415 } |
| 398 | 416 |
| 399 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { | 417 mojo::MessageReceiver::Result {{class_name}}ResponseValidator::Accept( |
| 418 mojo::Message* message) { | |
| 400 assert(sink_); | 419 assert(sink_); |
| 401 | 420 |
| 402 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { | 421 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { |
| 403 if (!mojo::internal::ValidateControlResponse(message)) | 422 if (!mojo::internal::ValidateControlResponse(message)) |
| 404 return false; | 423 return Result::ForBadControlMessage("{{class_name}}", message); |
| 405 return sink_->Accept(message); | 424 return sink_->Accept(message); |
| 406 } | 425 } |
| 407 | 426 |
| 408 if (!mojo::internal::ValidateMessageIsResponse(message)) | 427 if (!mojo::internal::ValidateMessageIsResponse(message)) |
| 409 return false; | 428 return Result::ForUnexpectedRequest("{{class_name}}", message); |
| 410 switch (message->header()->name) { | 429 switch (message->header()->name) { |
| 411 {%- for method in interface.methods if method.response_parameters != None %} | 430 {%- for method in interface.methods if method.response_parameters != None %} |
| 412 case internal::k{{class_name}}_{{method.name}}_Name: { | 431 case internal::k{{class_name}}_{{method.name}}_Name: { |
| 413 if (!mojo::internal::ValidateMessagePayload< | 432 if (!mojo::internal::ValidateMessagePayload< |
| 414 internal::{{class_name}}_{{method.name}}_ResponseParams_Data>(mes sage)) { | 433 internal::{{class_name}}_{{method.name}}_ResponseParams_Data>( |
| 415 return false; | 434 message)) { |
| 435 return Result::ForBadResponse( | |
| 436 "{{class_name}}", "{{method.name}}", message); | |
| 416 } | 437 } |
| 417 return sink_->Accept(message); | 438 return sink_->Accept(message); |
| 418 } | 439 } |
| 419 {%- endfor %} | 440 {%- endfor %} |
| 420 default: | 441 default: |
| 421 break; | 442 break; |
| 422 } | 443 } |
| 423 | 444 |
| 424 // Unrecognized message. | 445 // Unrecognized message. |
| 425 ReportValidationError( | 446 ReportValidationError( |
| 426 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); | 447 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
| 427 return false; | 448 return Result::ForUnexpectedResponse("{{class_name}}", message); |
| 428 } | 449 } |
| 429 {%- endif -%} | 450 {%- endif -%} |
| OLD | NEW |