| 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 description) %} |
| 10 ({{params}})->DecodePointers(); | 10 ({{params}})->DecodePointers(); |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 | 218 |
| 219 {#--- ProxyToResponder definition #} | 219 {#--- ProxyToResponder definition #} |
| 220 {%- for method in interface.methods -%} | 220 {%- for method in interface.methods -%} |
| 221 {%- if method.response_parameters != None %} | 221 {%- if method.response_parameters != None %} |
| 222 {%- set message_name = | 222 {%- set message_name = |
| 223 "internal::k%s_%s_Name"|format(interface.name, method.name) %} | 223 "internal::k%s_%s_Name"|format(interface.name, method.name) %} |
| 224 {%- set response_params_struct = method.response_param_struct %} | 224 {%- set response_params_struct = method.response_param_struct %} |
| 225 {%- set params_description = | 225 {%- set params_description = |
| 226 "%s.%s response"|format(interface.name, method.name) %} | 226 "%s.%s response"|format(interface.name, method.name) %} |
| 227 class {{class_name}}_{{method.name}}_ProxyToResponder | 227 class {{class_name}}_{{method.name}}_ProxyToResponder |
| 228 : public {{class_name}}::{{method.name}}Callback::Runnable { | 228 : public base::RefCountedThreadSafe< |
| 229 {{class_name}}_{{method.name}}_ProxyToResponder> { |
| 229 public: | 230 public: |
| 230 ~{{class_name}}_{{method.name}}_ProxyToResponder() override { | 231 static {{class_name}}::{{method.name}}Callback CreateCallback( |
| 232 uint64_t request_id, |
| 233 bool is_sync, |
| 234 mojo::MessageReceiverWithStatus* responder, |
| 235 scoped_refptr<mojo::internal::MultiplexRouter> router) { |
| 236 scoped_refptr<{{class_name}}_{{method.name}}_ProxyToResponder> proxy |
| 237 = new {{class_name}}_{{method.name}}_ProxyToResponder( |
| 238 request_id, is_sync, responder, router); |
| 239 return base::Bind(&{{class_name}}_{{method.name}}_ProxyToResponder::Run, |
| 240 proxy); |
| 241 } |
| 242 |
| 243 private: |
| 244 friend class base::RefCountedThreadSafe< |
| 245 {{class_name}}_{{method.name}}_ProxyToResponder>; |
| 246 |
| 247 {{class_name}}_{{method.name}}_ProxyToResponder( |
| 248 uint64_t request_id, |
| 249 bool is_sync, |
| 250 mojo::MessageReceiverWithStatus* responder, |
| 251 scoped_refptr<mojo::internal::MultiplexRouter> router) |
| 252 : request_id_(request_id), |
| 253 is_sync_(is_sync), |
| 254 responder_(responder), |
| 255 serialization_context_(std::move(router)) { |
| 256 } |
| 257 |
| 258 ~{{class_name}}_{{method.name}}_ProxyToResponder() { |
| 231 #if DCHECK_IS_ON() | 259 #if DCHECK_IS_ON() |
| 232 if (responder_) { | 260 if (responder_) { |
| 233 // Is the Mojo application destroying the callback without running it | 261 // Is the Mojo application destroying the callback without running it |
| 234 // and without first closing the pipe? | 262 // and without first closing the pipe? |
| 235 responder_->DCheckInvalid("The callback passed to " | 263 responder_->DCheckInvalid("The callback passed to " |
| 236 "{{class_name}}::{{method.name}}({%- if method.parameters -%}{{pass_pa
rams(method.parameters)}}, {% endif -%}callback) " | 264 "{{class_name}}::{{method.name}}({%- if method.parameters -%}{{pass_pa
rams(method.parameters)}}, {% endif -%}callback) " |
| 237 "was never run."); | 265 "was never run."); |
| 238 } | 266 } |
| 239 #endif | 267 #endif |
| 240 // If the Callback was dropped then deleting the responder will close | 268 // If the Callback was dropped then deleting the responder will close |
| 241 // the pipe so the calling application knows to stop waiting for a reply. | 269 // the pipe so the calling application knows to stop waiting for a reply. |
| 242 delete responder_; | 270 delete responder_; |
| 243 } | 271 } |
| 244 | 272 |
| 245 {{class_name}}_{{method.name}}_ProxyToResponder( | 273 void Run( |
| 246 uint64_t request_id, | 274 {{interface_macros.declare_responder_params( |
| 247 bool is_sync, | 275 "in_", method.response_parameters, for_blink)}}); |
| 248 mojo::MessageReceiverWithStatus* responder, | |
| 249 scoped_refptr<mojo::internal::MultiplexRouter> router) | |
| 250 : request_id_(request_id), | |
| 251 is_sync_(is_sync), | |
| 252 responder_(responder), | |
| 253 serialization_context_(std::move(router)) { | |
| 254 } | |
| 255 | 276 |
| 256 void Run({{interface_macros.declare_params("in_", method.response_parameters)}
}) override; | |
| 257 | |
| 258 private: | |
| 259 uint64_t request_id_; | 277 uint64_t request_id_; |
| 260 bool is_sync_; | 278 bool is_sync_; |
| 261 mojo::MessageReceiverWithStatus* responder_; | 279 mojo::MessageReceiverWithStatus* responder_; |
| 262 // TODO(yzshen): maybe I should use a ref to the original one? | 280 // TODO(yzshen): maybe I should use a ref to the original one? |
| 263 mojo::internal::SerializationContext serialization_context_; | 281 mojo::internal::SerializationContext serialization_context_; |
| 282 |
| 264 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder); | 283 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder); |
| 265 }; | 284 }; |
| 285 |
| 266 void {{class_name}}_{{method.name}}_ProxyToResponder::Run( | 286 void {{class_name}}_{{method.name}}_ProxyToResponder::Run( |
| 267 {{interface_macros.declare_params("in_", method.response_parameters)}}) { | 287 {{interface_macros.declare_responder_params( |
| 288 "in_", method.response_parameters, for_blink)}}) { |
| 268 {{struct_macros.get_serialized_size(response_params_struct, "in_%s", | 289 {{struct_macros.get_serialized_size(response_params_struct, "in_%s", |
| 269 "&serialization_context_")}} | 290 "&serialization_context_")}} |
| 270 mojo::internal::ResponseMessageBuilder builder( | 291 mojo::internal::ResponseMessageBuilder builder( |
| 271 {{message_name}}, size, request_id_, | 292 {{message_name}}, size, request_id_, |
| 272 is_sync_ ? mojo::internal::kMessageIsSync : 0); | 293 is_sync_ ? mojo::internal::kMessageIsSync : 0); |
| 273 {{build_message(response_params_struct, "in_%s", params_description, | 294 {{build_message(response_params_struct, "in_%s", params_description, |
| 274 "&serialization_context_")}} | 295 "&serialization_context_")}} |
| 275 bool ok = responder_->Accept(builder.message()); | 296 bool ok = responder_->Accept(builder.message()); |
| 276 ALLOW_UNUSED_LOCAL(ok); | 297 ALLOW_UNUSED_LOCAL(ok); |
| 277 // TODO(darin): !ok returned here indicates a malformed message, and that may | 298 // TODO(darin): !ok returned here indicates a malformed message, and that may |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 {%- for method in interface.methods %} | 352 {%- for method in interface.methods %} |
| 332 case internal::k{{class_name}}_{{method.name}}_Name: { | 353 case internal::k{{class_name}}_{{method.name}}_Name: { |
| 333 {%- if method.response_parameters != None %} | 354 {%- if method.response_parameters != None %} |
| 334 internal::{{class_name}}_{{method.name}}_Params_Data* params = | 355 internal::{{class_name}}_{{method.name}}_Params_Data* params = |
| 335 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data*
>( | 356 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data*
>( |
| 336 message->mutable_payload()); | 357 message->mutable_payload()); |
| 337 | 358 |
| 338 {{alloc_params(method.param_struct, "params", "message", | 359 {{alloc_params(method.param_struct, "params", "message", |
| 339 "&serialization_context_", "{{class_name}}::{{method.name}}")| | 360 "&serialization_context_", "{{class_name}}::{{method.name}}")| |
| 340 indent(4)}} | 361 indent(4)}} |
| 341 {{class_name}}::{{method.name}}Callback::Runnable* runnable = | 362 {{class_name}}::{{method.name}}Callback callback = |
| 342 new {{class_name}}_{{method.name}}_ProxyToResponder( | 363 {{class_name}}_{{method.name}}_ProxyToResponder::CreateCallback( |
| 343 message->request_id(), | 364 message->request_id(), |
| 344 message->has_flag(mojo::internal::kMessageIsSync), | 365 message->has_flag(mojo::internal::kMessageIsSync), |
| 345 responder, | 366 responder, |
| 346 serialization_context_.router); | 367 serialization_context_.router); |
| 347 {{class_name}}::{{method.name}}Callback callback(runnable); | |
| 348 // A null |sink_| means no implementation was bound. | 368 // A null |sink_| means no implementation was bound. |
| 349 assert(sink_); | 369 assert(sink_); |
| 350 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); | 370 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); |
| 351 sink_->{{method.name}}( | 371 sink_->{{method.name}}( |
| 352 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}call
back); | 372 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}call
back); |
| 353 return true; | 373 return true; |
| 354 {%- else %} | 374 {%- else %} |
| 355 break; | 375 break; |
| 356 {%- endif %} | 376 {%- endif %} |
| 357 } | 377 } |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 break; | 469 break; |
| 450 } | 470 } |
| 451 | 471 |
| 452 // Unrecognized message. | 472 // Unrecognized message. |
| 453 ReportValidationError( | 473 ReportValidationError( |
| 454 &validation_context, | 474 &validation_context, |
| 455 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); | 475 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
| 456 return false; | 476 return false; |
| 457 } | 477 } |
| 458 {%- endif -%} | 478 {%- endif -%} |
| OLD | NEW |