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

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

Issue 2062333002: mojo::Callback -> base::Callback (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 6 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
OLDNEW
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
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
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
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 -%}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698