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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 {%- endfor %} | 70 {%- endfor %} |
71 | 71 |
72 {#--- ForwardToCallback definition #} | 72 {#--- ForwardToCallback definition #} |
73 {%- for method in interface.methods -%} | 73 {%- for method in interface.methods -%} |
74 {%- if method.response_parameters != None %} | 74 {%- if method.response_parameters != None %} |
75 {%- if method.sync %} | 75 {%- if method.sync %} |
76 class {{class_name}}_{{method.name}}_HandleSyncResponse | 76 class {{class_name}}_{{method.name}}_HandleSyncResponse |
77 : public mojo::MessageReceiver { | 77 : public mojo::MessageReceiver { |
78 public: | 78 public: |
79 {{class_name}}_{{method.name}}_HandleSyncResponse( | 79 {{class_name}}_{{method.name}}_HandleSyncResponse( |
80 scoped_refptr<mojo::internal::MultiplexRouter> router, bool* result | 80 scoped_refptr<mojo::AssociatedGroupController> group_controller, |
| 81 bool* result |
81 {%- for param in method.response_parameters -%} | 82 {%- for param in method.response_parameters -%} |
82 , {{param.kind|cpp_wrapper_type}}* out_{{param.name}} | 83 , {{param.kind|cpp_wrapper_type}}* out_{{param.name}} |
83 {%- endfor %}) | 84 {%- endfor %}) |
84 : serialization_context_(std::move(router)), result_(result) | 85 : serialization_context_(std::move(group_controller)), result_(result) |
85 {%- for param in method.response_parameters -%} | 86 {%- for param in method.response_parameters -%} |
86 , out_{{param.name}}_(out_{{param.name}}) | 87 , out_{{param.name}}_(out_{{param.name}}) |
87 {%- endfor %} { | 88 {%- endfor %} { |
88 DCHECK(!*result_); | 89 DCHECK(!*result_); |
89 } | 90 } |
90 bool Accept(mojo::Message* message) override; | 91 bool Accept(mojo::Message* message) override; |
91 private: | 92 private: |
92 mojo::internal::SerializationContext serialization_context_; | 93 mojo::internal::SerializationContext serialization_context_; |
93 bool* result_; | 94 bool* result_; |
94 {%- for param in method.response_parameters %} | 95 {%- for param in method.response_parameters %} |
(...skipping 17 matching lines...) Expand all Loading... |
112 *result_ = true; | 113 *result_ = true; |
113 return true; | 114 return true; |
114 } | 115 } |
115 {%- endif %} | 116 {%- endif %} |
116 | 117 |
117 class {{class_name}}_{{method.name}}_ForwardToCallback | 118 class {{class_name}}_{{method.name}}_ForwardToCallback |
118 : public mojo::MessageReceiver { | 119 : public mojo::MessageReceiver { |
119 public: | 120 public: |
120 {{class_name}}_{{method.name}}_ForwardToCallback( | 121 {{class_name}}_{{method.name}}_ForwardToCallback( |
121 const {{class_name}}::{{method.name}}Callback& callback, | 122 const {{class_name}}::{{method.name}}Callback& callback, |
122 scoped_refptr<mojo::internal::MultiplexRouter> router) | 123 scoped_refptr<mojo::AssociatedGroupController> group_controller) |
123 : callback_(callback), serialization_context_(std::move(router)) { | 124 : callback_(callback), |
| 125 serialization_context_(std::move(group_controller)) { |
124 } | 126 } |
125 bool Accept(mojo::Message* message) override; | 127 bool Accept(mojo::Message* message) override; |
126 private: | 128 private: |
127 {{class_name}}::{{method.name}}Callback callback_; | 129 {{class_name}}::{{method.name}}Callback callback_; |
128 mojo::internal::SerializationContext serialization_context_; | 130 mojo::internal::SerializationContext serialization_context_; |
129 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback); | 131 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback); |
130 }; | 132 }; |
131 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( | 133 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( |
132 mojo::Message* message) { | 134 mojo::Message* message) { |
133 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = | 135 internal::{{class_name}}_{{method.name}}_ResponseParams_Data* params = |
(...skipping 30 matching lines...) Expand all Loading... |
164 | 166 |
165 mojo::internal::RequestMessageBuilder builder({{message_name}}, size, | 167 mojo::internal::RequestMessageBuilder builder({{message_name}}, size, |
166 mojo::internal::kMessageIsSync); | 168 mojo::internal::kMessageIsSync); |
167 | 169 |
168 {{build_message(params_struct, "param_%s", params_description, | 170 {{build_message(params_struct, "param_%s", params_description, |
169 "&serialization_context_")}} | 171 "&serialization_context_")}} |
170 | 172 |
171 bool result = false; | 173 bool result = false; |
172 mojo::MessageReceiver* responder = | 174 mojo::MessageReceiver* responder = |
173 new {{class_name}}_{{method.name}}_HandleSyncResponse( | 175 new {{class_name}}_{{method.name}}_HandleSyncResponse( |
174 serialization_context_.router, &result | 176 serialization_context_.group_controller, &result |
175 {%- for param in method.response_parameters -%} | 177 {%- for param in method.response_parameters -%} |
176 , param_{{param.name}} | 178 , param_{{param.name}} |
177 {%- endfor %}); | 179 {%- endfor %}); |
178 if (!receiver_->AcceptWithResponder(builder.message(), responder)) | 180 if (!receiver_->AcceptWithResponder(builder.message(), responder)) |
179 delete responder; | 181 delete responder; |
180 return result; | 182 return result; |
181 } | 183 } |
182 {%- endif %} | 184 {%- endif %} |
183 | 185 |
184 void {{proxy_name}}::{{method.name}}( | 186 void {{proxy_name}}::{{method.name}}( |
185 {{interface_macros.declare_request_params("in_", method)}}) { | 187 {{interface_macros.declare_request_params("in_", method)}}) { |
186 {{struct_macros.get_serialized_size(params_struct, "in_%s", | 188 {{struct_macros.get_serialized_size(params_struct, "in_%s", |
187 "&serialization_context_")}} | 189 "&serialization_context_")}} |
188 | 190 |
189 {%- if method.response_parameters != None %} | 191 {%- if method.response_parameters != None %} |
190 mojo::internal::RequestMessageBuilder builder({{message_name}}, size); | 192 mojo::internal::RequestMessageBuilder builder({{message_name}}, size); |
191 {%- else %} | 193 {%- else %} |
192 mojo::internal::MessageBuilder builder({{message_name}}, size); | 194 mojo::internal::MessageBuilder builder({{message_name}}, size); |
193 {%- endif %} | 195 {%- endif %} |
194 | 196 |
195 {{build_message(params_struct, "in_%s", params_description, | 197 {{build_message(params_struct, "in_%s", params_description, |
196 "&serialization_context_")}} | 198 "&serialization_context_")}} |
197 | 199 |
198 {%- if method.response_parameters != None %} | 200 {%- if method.response_parameters != None %} |
199 mojo::MessageReceiver* responder = | 201 mojo::MessageReceiver* responder = |
200 new {{class_name}}_{{method.name}}_ForwardToCallback(callback, serializati
on_context_.router); | 202 new {{class_name}}_{{method.name}}_ForwardToCallback( |
| 203 callback, serialization_context_.group_controller); |
201 if (!receiver_->AcceptWithResponder(builder.message(), responder)) | 204 if (!receiver_->AcceptWithResponder(builder.message(), responder)) |
202 delete responder; | 205 delete responder; |
203 {%- else %} | 206 {%- else %} |
204 bool ok = receiver_->Accept(builder.message()); | 207 bool ok = receiver_->Accept(builder.message()); |
205 // This return value may be ignored as !ok implies the Connector has | 208 // This return value may be ignored as !ok implies the Connector has |
206 // encountered an error, which will be visible through other means. | 209 // encountered an error, which will be visible through other means. |
207 ALLOW_UNUSED_LOCAL(ok); | 210 ALLOW_UNUSED_LOCAL(ok); |
208 {%- endif %} | 211 {%- endif %} |
209 } | 212 } |
210 {%- endfor %} | 213 {%- endfor %} |
211 | 214 |
212 {#--- ProxyToResponder definition #} | 215 {#--- ProxyToResponder definition #} |
213 {%- for method in interface.methods -%} | 216 {%- for method in interface.methods -%} |
214 {%- if method.response_parameters != None %} | 217 {%- if method.response_parameters != None %} |
215 {%- set message_name = | 218 {%- set message_name = |
216 "internal::k%s_%s_Name"|format(interface.name, method.name) %} | 219 "internal::k%s_%s_Name"|format(interface.name, method.name) %} |
217 {%- set response_params_struct = method.response_param_struct %} | 220 {%- set response_params_struct = method.response_param_struct %} |
218 {%- set params_description = | 221 {%- set params_description = |
219 "%s.%s response"|format(interface.name, method.name) %} | 222 "%s.%s response"|format(interface.name, method.name) %} |
220 class {{class_name}}_{{method.name}}_ProxyToResponder | 223 class {{class_name}}_{{method.name}}_ProxyToResponder |
221 : public base::RefCountedThreadSafe< | 224 : public base::RefCountedThreadSafe< |
222 {{class_name}}_{{method.name}}_ProxyToResponder> { | 225 {{class_name}}_{{method.name}}_ProxyToResponder> { |
223 public: | 226 public: |
224 static {{class_name}}::{{method.name}}Callback CreateCallback( | 227 static {{class_name}}::{{method.name}}Callback CreateCallback( |
225 uint64_t request_id, | 228 uint64_t request_id, |
226 bool is_sync, | 229 bool is_sync, |
227 mojo::MessageReceiverWithStatus* responder, | 230 mojo::MessageReceiverWithStatus* responder, |
228 scoped_refptr<mojo::internal::MultiplexRouter> router) { | 231 scoped_refptr<mojo::AssociatedGroupController> |
| 232 group_controller) { |
229 scoped_refptr<{{class_name}}_{{method.name}}_ProxyToResponder> proxy | 233 scoped_refptr<{{class_name}}_{{method.name}}_ProxyToResponder> proxy |
230 = new {{class_name}}_{{method.name}}_ProxyToResponder( | 234 = new {{class_name}}_{{method.name}}_ProxyToResponder( |
231 request_id, is_sync, responder, router); | 235 request_id, is_sync, responder, group_controller); |
232 return base::Bind(&{{class_name}}_{{method.name}}_ProxyToResponder::Run, | 236 return base::Bind(&{{class_name}}_{{method.name}}_ProxyToResponder::Run, |
233 proxy); | 237 proxy); |
234 } | 238 } |
235 | 239 |
236 private: | 240 private: |
237 friend class base::RefCountedThreadSafe< | 241 friend class base::RefCountedThreadSafe< |
238 {{class_name}}_{{method.name}}_ProxyToResponder>; | 242 {{class_name}}_{{method.name}}_ProxyToResponder>; |
239 | 243 |
240 {{class_name}}_{{method.name}}_ProxyToResponder( | 244 {{class_name}}_{{method.name}}_ProxyToResponder( |
241 uint64_t request_id, | 245 uint64_t request_id, |
242 bool is_sync, | 246 bool is_sync, |
243 mojo::MessageReceiverWithStatus* responder, | 247 mojo::MessageReceiverWithStatus* responder, |
244 scoped_refptr<mojo::internal::MultiplexRouter> router) | 248 scoped_refptr<mojo::AssociatedGroupController> group_controller) |
245 : request_id_(request_id), | 249 : request_id_(request_id), |
246 is_sync_(is_sync), | 250 is_sync_(is_sync), |
247 responder_(responder), | 251 responder_(responder), |
248 serialization_context_(std::move(router)) { | 252 serialization_context_(std::move(group_controller)) { |
249 } | 253 } |
250 | 254 |
251 ~{{class_name}}_{{method.name}}_ProxyToResponder() { | 255 ~{{class_name}}_{{method.name}}_ProxyToResponder() { |
252 #if DCHECK_IS_ON() | 256 #if DCHECK_IS_ON() |
253 if (responder_) { | 257 if (responder_) { |
254 // Is the Mojo application destroying the callback without running it | 258 // Is the Mojo application destroying the callback without running it |
255 // and without first closing the pipe? | 259 // and without first closing the pipe? |
256 responder_->DCheckInvalid("The callback passed to " | 260 responder_->DCheckInvalid("The callback passed to " |
257 "{{class_name}}::{{method.name}}() was never run."); | 261 "{{class_name}}::{{method.name}}() was never run."); |
258 } | 262 } |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 message->mutable_payload()); | 353 message->mutable_payload()); |
350 | 354 |
351 {{alloc_params(method.param_struct, "params", "message", | 355 {{alloc_params(method.param_struct, "params", "message", |
352 "&serialization_context_", "{{class_name}}::{{method.name}}")| | 356 "&serialization_context_", "{{class_name}}::{{method.name}}")| |
353 indent(4)}} | 357 indent(4)}} |
354 {{class_name}}::{{method.name}}Callback callback = | 358 {{class_name}}::{{method.name}}Callback callback = |
355 {{class_name}}_{{method.name}}_ProxyToResponder::CreateCallback( | 359 {{class_name}}_{{method.name}}_ProxyToResponder::CreateCallback( |
356 message->request_id(), | 360 message->request_id(), |
357 message->has_flag(mojo::internal::kMessageIsSync), | 361 message->has_flag(mojo::internal::kMessageIsSync), |
358 responder, | 362 responder, |
359 serialization_context_.router); | 363 serialization_context_.group_controller); |
360 // A null |sink_| means no implementation was bound. | 364 // A null |sink_| means no implementation was bound. |
361 assert(sink_); | 365 assert(sink_); |
362 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); | 366 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); |
363 sink_->{{method.name}}( | 367 sink_->{{method.name}}( |
364 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}call
back); | 368 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}call
back); |
365 return true; | 369 return true; |
366 {%- else %} | 370 {%- else %} |
367 break; | 371 break; |
368 {%- endif %} | 372 {%- endif %} |
369 } | 373 } |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 break; | 465 break; |
462 } | 466 } |
463 | 467 |
464 // Unrecognized message. | 468 // Unrecognized message. |
465 ReportValidationError( | 469 ReportValidationError( |
466 &validation_context, | 470 &validation_context, |
467 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); | 471 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
468 return false; | 472 return false; |
469 } | 473 } |
470 {%- endif -%} | 474 {%- endif -%} |
OLD | NEW |