| Index: mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| index 6503e586983220e307934aa1f1c35d8d6ee29d2e..6d723447cf29ae697162e65bf13fafa6e93d1ab4 100644
|
| --- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| +++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
|
| @@ -225,9 +225,37 @@ void {{proxy_name}}::{{method.name}}(
|
| {%- set params_description =
|
| "%s.%s response"|format(interface.name, method.name) %}
|
| class {{class_name}}_{{method.name}}_ProxyToResponder
|
| - : public {{class_name}}::{{method.name}}Callback::Runnable {
|
| + : public base::RefCountedThreadSafe<
|
| + {{class_name}}_{{method.name}}_ProxyToResponder> {
|
| public:
|
| - ~{{class_name}}_{{method.name}}_ProxyToResponder() override {
|
| + static {{class_name}}::{{method.name}}Callback CreateCallback(
|
| + uint64_t request_id,
|
| + bool is_sync,
|
| + mojo::MessageReceiverWithStatus* responder,
|
| + scoped_refptr<mojo::internal::MultiplexRouter> router) {
|
| + scoped_refptr<{{class_name}}_{{method.name}}_ProxyToResponder> proxy
|
| + = new {{class_name}}_{{method.name}}_ProxyToResponder(
|
| + request_id, is_sync, responder, router);
|
| + return base::Bind(&{{class_name}}_{{method.name}}_ProxyToResponder::Run,
|
| + proxy);
|
| + }
|
| +
|
| + private:
|
| + friend class base::RefCountedThreadSafe<
|
| + {{class_name}}_{{method.name}}_ProxyToResponder>;
|
| +
|
| + {{class_name}}_{{method.name}}_ProxyToResponder(
|
| + uint64_t request_id,
|
| + bool is_sync,
|
| + mojo::MessageReceiverWithStatus* responder,
|
| + scoped_refptr<mojo::internal::MultiplexRouter> router)
|
| + : request_id_(request_id),
|
| + is_sync_(is_sync),
|
| + responder_(responder),
|
| + serialization_context_(std::move(router)) {
|
| + }
|
| +
|
| + ~{{class_name}}_{{method.name}}_ProxyToResponder() {
|
| #if DCHECK_IS_ON()
|
| if (responder_) {
|
| // Is the Mojo application destroying the callback without running it
|
| @@ -242,29 +270,22 @@ class {{class_name}}_{{method.name}}_ProxyToResponder
|
| delete responder_;
|
| }
|
|
|
| - {{class_name}}_{{method.name}}_ProxyToResponder(
|
| - uint64_t request_id,
|
| - bool is_sync,
|
| - mojo::MessageReceiverWithStatus* responder,
|
| - scoped_refptr<mojo::internal::MultiplexRouter> router)
|
| - : request_id_(request_id),
|
| - is_sync_(is_sync),
|
| - responder_(responder),
|
| - serialization_context_(std::move(router)) {
|
| - }
|
| -
|
| - void Run({{interface_macros.declare_params("in_", method.response_parameters)}}) override;
|
| + void Run(
|
| + {{interface_macros.declare_responder_params(
|
| + "in_", method.response_parameters, for_blink)}});
|
|
|
| - private:
|
| uint64_t request_id_;
|
| bool is_sync_;
|
| mojo::MessageReceiverWithStatus* responder_;
|
| // TODO(yzshen): maybe I should use a ref to the original one?
|
| mojo::internal::SerializationContext serialization_context_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder);
|
| };
|
| +
|
| void {{class_name}}_{{method.name}}_ProxyToResponder::Run(
|
| - {{interface_macros.declare_params("in_", method.response_parameters)}}) {
|
| + {{interface_macros.declare_responder_params(
|
| + "in_", method.response_parameters, for_blink)}}) {
|
| {{struct_macros.get_serialized_size(response_params_struct, "in_%s",
|
| "&serialization_context_")}}
|
| mojo::internal::ResponseMessageBuilder builder(
|
| @@ -338,13 +359,12 @@ bool {{class_name}}Stub::AcceptWithResponder(
|
| {{alloc_params(method.param_struct, "params", "message",
|
| "&serialization_context_", "{{class_name}}::{{method.name}}")|
|
| indent(4)}}
|
| - {{class_name}}::{{method.name}}Callback::Runnable* runnable =
|
| - new {{class_name}}_{{method.name}}_ProxyToResponder(
|
| + {{class_name}}::{{method.name}}Callback callback =
|
| + {{class_name}}_{{method.name}}_ProxyToResponder::CreateCallback(
|
| message->request_id(),
|
| message->has_flag(mojo::internal::kMessageIsSync),
|
| responder,
|
| serialization_context_.router);
|
| - {{class_name}}::{{method.name}}Callback callback(runnable);
|
| // A null |sink_| means no implementation was bound.
|
| assert(sink_);
|
| TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}");
|
|
|