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 description) %} |
| 10 ({{serialization_context}})->handles.Swap(({{message}})->mutable_handles()); | 10 ({{serialization_context}})->handles.Swap(({{message}})->mutable_handles()); |
| 11 bool success = true; | 11 bool success = true; |
| 12 {%- for param in struct.packed.packed_fields_in_ordinal_order %} | 12 {%- for param in struct.packed.packed_fields_in_ordinal_order %} |
| 13 {{param.field.kind|cpp_wrapper_type}} p_{{param.field.name}}{}; | 13 {{param.field.kind|cpp_wrapper_type}} p_{{param.field.name}}{}; |
| 14 {%- endfor %} | 14 {%- endfor %} |
| 15 {{struct.name}}DataView input_data_view({{params}}, | 15 {{struct.name}}DataView input_data_view({{params}}, |
| 16 {{serialization_context}}); | 16 {{serialization_context}}); |
| 17 {{struct_macros.deserialize(struct, "input_data_view", "p_%s", "success")}} | 17 {{struct_macros.deserialize(struct, "input_data_view", "p_%s", "success")}} |
| 18 if (!success) { | 18 if (!success) { |
| 19 mojo::internal::ValidationContext validation_context( | 19 ReportValidationErrorForMessage( |
| 20 {{message}}->data(), {{message}}->data_num_bytes(), | 20 {{message}}, |
| 21 {{message}}->handles()->size(), {{message}}, | 21 mojo::internal::VALIDATION_ERROR_DESERIALIZATION_FAILED, |
| 22 "{{description}} deserializer"); | 22 "{{description}} deserializer"); |
| 23 ReportValidationError( | |
| 24 &validation_context, | |
| 25 mojo::internal::VALIDATION_ERROR_DESERIALIZATION_FAILED); | |
| 26 return false; | 23 return false; |
| 27 } | 24 } |
| 28 {%- endmacro %} | 25 {%- endmacro %} |
| 29 | 26 |
| 30 {%- macro pass_params(parameters) %} | 27 {%- macro pass_params(parameters) %} |
| 31 {%- for param in parameters %} | 28 {%- for param in parameters %} |
| 32 std::move(p_{{param.name}}) | 29 std::move(p_{{param.name}}) |
| 33 {%- if not loop.last %}, {% endif %} | 30 {%- if not loop.last %}, {% endif %} |
| 34 {%- endfor %} | 31 {%- endfor %} |
| 35 {%- endmacro %} | 32 {%- endmacro %} |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 93 {{param.kind|cpp_wrapper_type}}* out_{{param.name}}_; | 90 {{param.kind|cpp_wrapper_type}}* out_{{param.name}}_; |
| 94 {%- endfor -%} | 91 {%- endfor -%} |
| 95 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_HandleSyncResponse); | 92 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_HandleSyncResponse); |
| 96 }; | 93 }; |
| 97 bool {{class_name}}_{{method.name}}_HandleSyncResponse::Accept( | 94 bool {{class_name}}_{{method.name}}_HandleSyncResponse::Accept( |
| 98 mojo::Message* message) { | 95 mojo::Message* message) { |
| 99 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = | 96 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = |
| 100 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( | 97 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( |
| 101 message->mutable_payload()); | 98 message->mutable_payload()); |
| 102 | 99 |
| 100 {%- set desc = class_name~"::"~method.name~" response" %} | |
|
yzshen1
2016/07/31 07:16:32
:D good catch.
One thing may be worth considering
tibell
2016/07/31 23:50:29
Agreed. It's on my list.
| |
| 103 {{alloc_params(method.response_param_struct, "params", "message", | 101 {{alloc_params(method.response_param_struct, "params", "message", |
| 104 "&serialization_context_", | 102 "&serialization_context_", desc)}} |
| 105 "{{class_name}}::{{method.name}} response")}} | |
| 106 | 103 |
| 107 {%- for param in method.response_parameters %} | 104 {%- for param in method.response_parameters %} |
| 108 *out_{{param.name}}_ = std::move(p_{{param.name}}); | 105 *out_{{param.name}}_ = std::move(p_{{param.name}}); |
| 109 {%- endfor %} | 106 {%- endfor %} |
| 110 *result_ = true; | 107 *result_ = true; |
| 111 return true; | 108 return true; |
| 112 } | 109 } |
| 113 {%- endif %} | 110 {%- endif %} |
| 114 | 111 |
| 115 class {{class_name}}_{{method.name}}_ForwardToCallback | 112 class {{class_name}}_{{method.name}}_ForwardToCallback |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 126 {{class_name}}::{{method.name}}Callback callback_; | 123 {{class_name}}::{{method.name}}Callback callback_; |
| 127 mojo::internal::SerializationContext serialization_context_; | 124 mojo::internal::SerializationContext serialization_context_; |
| 128 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback); | 125 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback); |
| 129 }; | 126 }; |
| 130 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( | 127 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( |
| 131 mojo::Message* message) { | 128 mojo::Message* message) { |
| 132 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = | 129 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = |
| 133 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( | 130 reinterpret_cast<internal::{{class_name}}_{{method.name}}_ResponseParams_D ata*>( |
| 134 message->mutable_payload()); | 131 message->mutable_payload()); |
| 135 | 132 |
| 133 {%- set desc = class_name~"::"~method.name~" response" %} | |
| 136 {{alloc_params(method.response_param_struct, "params", "message", | 134 {{alloc_params(method.response_param_struct, "params", "message", |
| 137 "&serialization_context_", | 135 "&serialization_context_", desc)}} |
| 138 "{{class_name}}_{{method.name}} response")}} | |
| 139 if (!callback_.is_null()) | 136 if (!callback_.is_null()) |
| 140 callback_.Run({{pass_params(method.response_parameters)}}); | 137 callback_.Run({{pass_params(method.response_parameters)}}); |
| 141 return true; | 138 return true; |
| 142 } | 139 } |
| 143 {%- endif %} | 140 {%- endif %} |
| 144 {%- endfor %} | 141 {%- endfor %} |
| 145 | 142 |
| 146 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver) | 143 {{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver) |
| 147 : ControlMessageProxy(receiver) { | 144 : ControlMessageProxy(receiver) { |
| 148 } | 145 } |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 210 {%- endfor %} | 207 {%- endfor %} |
| 211 | 208 |
| 212 {#--- ProxyToResponder definition #} | 209 {#--- ProxyToResponder definition #} |
| 213 {%- for method in interface.methods -%} | 210 {%- for method in interface.methods -%} |
| 214 {%- if method.response_parameters != None %} | 211 {%- if method.response_parameters != None %} |
| 215 {%- set message_name = | 212 {%- set message_name = |
| 216 "internal::k%s_%s_Name"|format(interface.name, method.name) %} | 213 "internal::k%s_%s_Name"|format(interface.name, method.name) %} |
| 217 {%- set response_params_struct = method.response_param_struct %} | 214 {%- set response_params_struct = method.response_param_struct %} |
| 218 {%- set params_description = | 215 {%- set params_description = |
| 219 "%s.%s response"|format(interface.name, method.name) %} | 216 "%s.%s response"|format(interface.name, method.name) %} |
| 220 class {{class_name}}_{{method.name}}_ProxyToResponder | 217 class {{class_name}}_{{method.name}}_ProxyToResponder { |
| 221 : public base::RefCountedThreadSafe< | |
| 222 {{class_name}}_{{method.name}}_ProxyToResponder> { | |
| 223 public: | 218 public: |
| 224 static {{class_name}}::{{method.name}}Callback CreateCallback( | 219 static {{class_name}}::{{method.name}}Callback CreateCallback( |
| 225 uint64_t request_id, | 220 uint64_t request_id, |
| 226 bool is_sync, | 221 bool is_sync, |
| 227 mojo::MessageReceiverWithStatus* responder, | 222 mojo::MessageReceiverWithStatus* responder, |
| 228 scoped_refptr<mojo::AssociatedGroupController> | 223 scoped_refptr<mojo::AssociatedGroupController> |
| 229 group_controller) { | 224 group_controller) { |
| 230 scoped_refptr<{{class_name}}_{{method.name}}_ProxyToResponder> proxy | 225 std::unique_ptr<{{class_name}}_{{method.name}}_ProxyToResponder> proxy( |
| 231 = new {{class_name}}_{{method.name}}_ProxyToResponder( | 226 new {{class_name}}_{{method.name}}_ProxyToResponder( |
| 232 request_id, is_sync, responder, group_controller); | 227 request_id, is_sync, responder, group_controller)); |
| 233 return base::Bind(&{{class_name}}_{{method.name}}_ProxyToResponder::Run, | 228 return base::Bind(&{{class_name}}_{{method.name}}_ProxyToResponder::Run, |
| 234 proxy); | 229 base::Passed(&proxy)); |
| 235 } | |
| 236 | |
| 237 private: | |
| 238 friend class base::RefCountedThreadSafe< | |
| 239 {{class_name}}_{{method.name}}_ProxyToResponder>; | |
| 240 | |
| 241 {{class_name}}_{{method.name}}_ProxyToResponder( | |
| 242 uint64_t request_id, | |
| 243 bool is_sync, | |
| 244 mojo::MessageReceiverWithStatus* responder, | |
| 245 scoped_refptr<mojo::AssociatedGroupController> group_controller) | |
| 246 : request_id_(request_id), | |
| 247 is_sync_(is_sync), | |
| 248 responder_(responder), | |
| 249 serialization_context_(std::move(group_controller)) { | |
| 250 } | 230 } |
| 251 | 231 |
| 252 ~{{class_name}}_{{method.name}}_ProxyToResponder() { | 232 ~{{class_name}}_{{method.name}}_ProxyToResponder() { |
| 253 #if DCHECK_IS_ON() | 233 #if DCHECK_IS_ON() |
| 254 if (responder_) { | 234 if (responder_) { |
| 255 // Is the Mojo application destroying the callback without running it | 235 // Is the Mojo application destroying the callback without running it |
| 256 // and without first closing the pipe? | 236 // and without first closing the pipe? |
| 257 responder_->DCheckInvalid("The callback passed to " | 237 responder_->DCheckInvalid("The callback passed to " |
| 258 "{{class_name}}::{{method.name}}() was never run."); | 238 "{{class_name}}::{{method.name}}() was never run."); |
| 259 } | 239 } |
| 260 #endif | 240 #endif |
| 261 // If the Callback was dropped then deleting the responder will close | 241 // If the Callback was dropped then deleting the responder will close |
| 262 // the pipe so the calling application knows to stop waiting for a reply. | 242 // the pipe so the calling application knows to stop waiting for a reply. |
| 263 delete responder_; | 243 delete responder_; |
| 264 } | 244 } |
| 265 | 245 |
| 246 private: | |
| 247 {{class_name}}_{{method.name}}_ProxyToResponder( | |
| 248 uint64_t request_id, | |
| 249 bool is_sync, | |
| 250 mojo::MessageReceiverWithStatus* responder, | |
| 251 scoped_refptr<mojo::AssociatedGroupController> group_controller) | |
| 252 : request_id_(request_id), | |
| 253 is_sync_(is_sync), | |
| 254 responder_(responder), | |
| 255 serialization_context_(std::move(group_controller)) { | |
| 256 } | |
| 257 | |
| 266 void Run( | 258 void Run( |
| 267 {{interface_macros.declare_responder_params( | 259 {{interface_macros.declare_responder_params( |
| 268 "in_", method.response_parameters, for_blink, | 260 "in_", method.response_parameters, for_blink, |
| 269 use_new_wrapper_types)}}); | 261 use_new_wrapper_types)}}); |
| 270 | 262 |
| 271 uint64_t request_id_; | 263 uint64_t request_id_; |
| 272 bool is_sync_; | 264 bool is_sync_; |
| 273 mojo::MessageReceiverWithStatus* responder_; | 265 mojo::MessageReceiverWithStatus* responder_; |
| 274 // TODO(yzshen): maybe I should use a ref to the original one? | 266 // TODO(yzshen): maybe I should use a ref to the original one? |
| 275 mojo::internal::SerializationContext serialization_context_; | 267 mojo::internal::SerializationContext serialization_context_; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 313 return control_message_handler_.Accept(message); | 305 return control_message_handler_.Accept(message); |
| 314 {%- if interface.methods %} | 306 {%- if interface.methods %} |
| 315 switch (message->header()->name) { | 307 switch (message->header()->name) { |
| 316 {%- for method in interface.methods %} | 308 {%- for method in interface.methods %} |
| 317 case internal::k{{class_name}}_{{method.name}}_Name: { | 309 case internal::k{{class_name}}_{{method.name}}_Name: { |
| 318 {%- if method.response_parameters == None %} | 310 {%- if method.response_parameters == None %} |
| 319 internal::{{class_name}}_{{method.name}}_Params_Data* params = | 311 internal::{{class_name}}_{{method.name}}_Params_Data* params = |
| 320 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( | 312 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( |
| 321 message->mutable_payload()); | 313 message->mutable_payload()); |
| 322 | 314 |
| 315 {%- set desc = class_name~"::"~method.name %} | |
| 323 {{alloc_params(method.param_struct, "params", "message", | 316 {{alloc_params(method.param_struct, "params", "message", |
| 324 "&serialization_context_", "{{class_name}}::{{method.name}}") | 317 "&serialization_context_", desc) |
| 325 |indent(4)}} | 318 |indent(4)}} |
|
yzshen1
2016/07/31 07:16:32
nit: now this line could be merged with the one ab
tibell
2016/07/31 23:50:29
Done.
| |
| 326 // A null |sink_| means no implementation was bound. | 319 // A null |sink_| means no implementation was bound. |
| 327 assert(sink_); | 320 assert(sink_); |
| 328 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); | 321 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); |
| 329 sink_->{{method.name}}({{pass_params(method.parameters)}}); | 322 sink_->{{method.name}}({{pass_params(method.parameters)}}); |
| 330 return true; | 323 return true; |
| 331 {%- else %} | 324 {%- else %} |
| 332 break; | 325 break; |
| 333 {%- endif %} | 326 {%- endif %} |
| 334 } | 327 } |
| 335 {%- endfor %} | 328 {%- endfor %} |
| 336 } | 329 } |
| 337 {%- endif %} | 330 {%- endif %} |
| 338 return false; | 331 return false; |
| 339 } | 332 } |
| 340 | 333 |
| 341 bool {{class_name}}Stub::AcceptWithResponder( | 334 bool {{class_name}}Stub::AcceptWithResponder( |
| 342 mojo::Message* message, mojo::MessageReceiverWithStatus* responder) { | 335 mojo::Message* message, mojo::MessageReceiverWithStatus* responder) { |
| 343 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) | 336 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) |
| 344 return control_message_handler_.AcceptWithResponder(message, responder); | 337 return control_message_handler_.AcceptWithResponder(message, responder); |
| 345 {%- if interface.methods %} | 338 {%- if interface.methods %} |
| 346 switch (message->header()->name) { | 339 switch (message->header()->name) { |
| 347 {%- for method in interface.methods %} | 340 {%- for method in interface.methods %} |
| 348 case internal::k{{class_name}}_{{method.name}}_Name: { | 341 case internal::k{{class_name}}_{{method.name}}_Name: { |
| 349 {%- if method.response_parameters != None %} | 342 {%- if method.response_parameters != None %} |
| 350 internal::{{class_name}}_{{method.name}}_Params_Data* params = | 343 internal::{{class_name}}_{{method.name}}_Params_Data* params = |
| 351 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( | 344 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data* >( |
| 352 message->mutable_payload()); | 345 message->mutable_payload()); |
| 353 | 346 |
| 347 {%- set desc = class_name~"::"~method.name %} | |
| 354 {{alloc_params(method.param_struct, "params", "message", | 348 {{alloc_params(method.param_struct, "params", "message", |
| 355 "&serialization_context_", "{{class_name}}::{{method.name}}")| | 349 "&serialization_context_", desc)| |
| 356 indent(4)}} | 350 indent(4)}} |
| 357 {{class_name}}::{{method.name}}Callback callback = | 351 {{class_name}}::{{method.name}}Callback callback = |
| 358 {{class_name}}_{{method.name}}_ProxyToResponder::CreateCallback( | 352 {{class_name}}_{{method.name}}_ProxyToResponder::CreateCallback( |
| 359 message->request_id(), | 353 message->request_id(), |
| 360 message->has_flag(mojo::Message::kFlagIsSync), | 354 message->has_flag(mojo::Message::kFlagIsSync), |
| 361 responder, | 355 responder, |
| 362 serialization_context_.group_controller); | 356 serialization_context_.group_controller); |
| 363 // A null |sink_| means no implementation was bound. | 357 // A null |sink_| means no implementation was bound. |
| 364 assert(sink_); | 358 assert(sink_); |
| 365 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); | 359 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 464 break; | 458 break; |
| 465 } | 459 } |
| 466 | 460 |
| 467 // Unrecognized message. | 461 // Unrecognized message. |
| 468 ReportValidationError( | 462 ReportValidationError( |
| 469 &validation_context, | 463 &validation_context, |
| 470 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); | 464 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
| 471 return false; | 465 return false; |
| 472 } | 466 } |
| 473 {%- endif -%} | 467 {%- endif -%} |
| OLD | NEW |