| 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, description) %} | 8 {%- macro alloc_params(struct, params, message, description) %} |
| 9 mojo::internal::SerializationContext serialization_context; | 9 mojo::internal::SerializationContext serialization_context; |
| 10 serialization_context.handles.Swap(({{message}})->mutable_handles()); | 10 serialization_context.handles.Swap(({{message}})->mutable_handles()); |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 | 162 |
| 163 mojo::internal::MessageBuilder builder( | 163 mojo::internal::MessageBuilder builder( |
| 164 {{message_name}}, | 164 {{message_name}}, |
| 165 mojo::Message::kFlagIsSync | mojo::Message::kFlagExpectsResponse, | 165 mojo::Message::kFlagIsSync | mojo::Message::kFlagExpectsResponse, |
| 166 size, serialization_context.associated_endpoint_count); | 166 size, serialization_context.associated_endpoint_count); |
| 167 | 167 |
| 168 {{build_message(params_struct, "param_%s", params_description, | 168 {{build_message(params_struct, "param_%s", params_description, |
| 169 "&serialization_context")}} | 169 "&serialization_context")}} |
| 170 | 170 |
| 171 bool result = false; | 171 bool result = false; |
| 172 mojo::MessageReceiver* responder = | 172 std::unique_ptr<mojo::MessageReceiver> responder( |
| 173 new {{class_name}}_{{method.name}}_HandleSyncResponse( | 173 new {{class_name}}_{{method.name}}_HandleSyncResponse( |
| 174 &result | 174 &result |
| 175 {%- for param in method.response_parameters -%} | 175 {%- for param in method.response_parameters -%} |
| 176 , param_{{param.name}} | 176 , param_{{param.name}} |
| 177 {%- endfor %}); | 177 {%- endfor %})); |
| 178 if (!receiver_->AcceptWithResponder(builder.message(), responder)) | 178 ignore_result(receiver_->AcceptWithResponder(builder.message(), |
| 179 delete responder; | 179 std::move(responder))); |
| 180 return result; | 180 return result; |
| 181 } | 181 } |
| 182 {%- endif %} | 182 {%- endif %} |
| 183 | 183 |
| 184 void {{proxy_name}}::{{method.name}}( | 184 void {{proxy_name}}::{{method.name}}( |
| 185 {{interface_macros.declare_request_params("in_", method, use_once_callback)}
}) { | 185 {{interface_macros.declare_request_params("in_", method, use_once_callback)}
}) { |
| 186 mojo::internal::SerializationContext serialization_context; | 186 mojo::internal::SerializationContext serialization_context; |
| 187 {{struct_macros.get_serialized_size(params_struct, "in_%s", | 187 {{struct_macros.get_serialized_size(params_struct, "in_%s", |
| 188 "&serialization_context")}} | 188 "&serialization_context")}} |
| 189 | 189 |
| 190 {%- if method.response_parameters != None %} | 190 {%- if method.response_parameters != None %} |
| 191 constexpr uint32_t kFlags = mojo::Message::kFlagExpectsResponse; | 191 constexpr uint32_t kFlags = mojo::Message::kFlagExpectsResponse; |
| 192 {%- else %} | 192 {%- else %} |
| 193 constexpr uint32_t kFlags = 0; | 193 constexpr uint32_t kFlags = 0; |
| 194 {%- endif %} | 194 {%- endif %} |
| 195 mojo::internal::MessageBuilder builder( | 195 mojo::internal::MessageBuilder builder( |
| 196 {{message_name}}, kFlags, size, | 196 {{message_name}}, kFlags, size, |
| 197 serialization_context.associated_endpoint_count); | 197 serialization_context.associated_endpoint_count); |
| 198 | 198 |
| 199 {{build_message(params_struct, "in_%s", params_description, | 199 {{build_message(params_struct, "in_%s", params_description, |
| 200 "&serialization_context")}} | 200 "&serialization_context")}} |
| 201 | 201 |
| 202 {%- if method.response_parameters != None %} | 202 {%- if method.response_parameters != None %} |
| 203 mojo::MessageReceiver* responder = | 203 std::unique_ptr<mojo::MessageReceiver> responder( |
| 204 new {{class_name}}_{{method.name}}_ForwardToCallback(std::move(callback)); | 204 new {{class_name}}_{{method.name}}_ForwardToCallback( |
| 205 if (!receiver_->AcceptWithResponder(builder.message(), responder)) | 205 std::move(callback))); |
| 206 delete responder; | 206 ignore_result(receiver_->AcceptWithResponder(builder.message(), |
| 207 std::move(responder))); |
| 207 {%- else %} | 208 {%- else %} |
| 208 bool ok = receiver_->Accept(builder.message()); | 209 // This return value may be ignored as false implies the Connector has |
| 209 // This return value may be ignored as !ok implies the Connector has | |
| 210 // encountered an error, which will be visible through other means. | 210 // encountered an error, which will be visible through other means. |
| 211 ALLOW_UNUSED_LOCAL(ok); | 211 ignore_result(receiver_->Accept(builder.message())); |
| 212 {%- endif %} | 212 {%- endif %} |
| 213 } | 213 } |
| 214 {%- endfor %} | 214 {%- endfor %} |
| 215 | 215 |
| 216 {#--- ProxyToResponder definition #} | 216 {#--- ProxyToResponder definition #} |
| 217 {%- for method in interface.methods -%} | 217 {%- for method in interface.methods -%} |
| 218 {%- if method.response_parameters != None %} | 218 {%- if method.response_parameters != None %} |
| 219 {%- set message_name = | 219 {%- set message_name = |
| 220 "internal::k%s_%s_Name"|format(interface.name, method.name) %} | 220 "internal::k%s_%s_Name"|format(interface.name, method.name) %} |
| 221 {%- set response_params_struct = method.response_param_struct %} | 221 {%- set response_params_struct = method.response_param_struct %} |
| 222 {%- set params_description = | 222 {%- set params_description = |
| 223 "%s.%s response"|format(interface.name, method.name) %} | 223 "%s.%s response"|format(interface.name, method.name) %} |
| 224 class {{class_name}}_{{method.name}}_ProxyToResponder { | 224 class {{class_name}}_{{method.name}}_ProxyToResponder { |
| 225 public: | 225 public: |
| 226 static {{class_name}}::{{method.name}}Callback CreateCallback( | 226 static {{class_name}}::{{method.name}}Callback CreateCallback( |
| 227 uint64_t request_id, | 227 uint64_t request_id, |
| 228 bool is_sync, | 228 bool is_sync, |
| 229 mojo::MessageReceiverWithStatus* responder) { | 229 std::unique_ptr<mojo::MessageReceiverWithStatus> responder) { |
| 230 std::unique_ptr<{{class_name}}_{{method.name}}_ProxyToResponder> proxy( | 230 std::unique_ptr<{{class_name}}_{{method.name}}_ProxyToResponder> proxy( |
| 231 new {{class_name}}_{{method.name}}_ProxyToResponder( | 231 new {{class_name}}_{{method.name}}_ProxyToResponder( |
| 232 request_id, is_sync, responder)); | 232 request_id, is_sync, std::move(responder))); |
| 233 return base::Bind(&{{class_name}}_{{method.name}}_ProxyToResponder::Run, | 233 return base::Bind(&{{class_name}}_{{method.name}}_ProxyToResponder::Run, |
| 234 base::Passed(&proxy)); | 234 base::Passed(&proxy)); |
| 235 } | 235 } |
| 236 | 236 |
| 237 ~{{class_name}}_{{method.name}}_ProxyToResponder() { | 237 ~{{class_name}}_{{method.name}}_ProxyToResponder() { |
| 238 #if DCHECK_IS_ON() | 238 #if DCHECK_IS_ON() |
| 239 if (responder_) { | 239 if (responder_) { |
| 240 // Is the Service destroying the callback without running it | 240 // Is the Service destroying the callback without running it |
| 241 // and without first closing the pipe? | 241 // and without first closing the pipe? |
| 242 responder_->DCheckInvalid("The callback passed to " | 242 responder_->DCheckInvalid("The callback passed to " |
| 243 "{{class_name}}::{{method.name}}() was never run."); | 243 "{{class_name}}::{{method.name}}() was never run."); |
| 244 } | 244 } |
| 245 #endif | 245 #endif |
| 246 // If the Callback was dropped then deleting the responder will close | 246 // If the Callback was dropped then deleting the responder will close |
| 247 // the pipe so the calling application knows to stop waiting for a reply. | 247 // the pipe so the calling application knows to stop waiting for a reply. |
| 248 delete responder_; | 248 responder_ = nullptr; |
| 249 } | 249 } |
| 250 | 250 |
| 251 private: | 251 private: |
| 252 {{class_name}}_{{method.name}}_ProxyToResponder( | 252 {{class_name}}_{{method.name}}_ProxyToResponder( |
| 253 uint64_t request_id, | 253 uint64_t request_id, |
| 254 bool is_sync, | 254 bool is_sync, |
| 255 mojo::MessageReceiverWithStatus* responder) | 255 std::unique_ptr<mojo::MessageReceiverWithStatus> responder) |
| 256 : request_id_(request_id), | 256 : request_id_(request_id), |
| 257 is_sync_(is_sync), | 257 is_sync_(is_sync), |
| 258 responder_(responder) { | 258 responder_(std::move(responder)) { |
| 259 } | 259 } |
| 260 | 260 |
| 261 void Run( | 261 void Run( |
| 262 {{interface_macros.declare_responder_params( | 262 {{interface_macros.declare_responder_params( |
| 263 "in_", method.response_parameters, for_blink)}}); | 263 "in_", method.response_parameters, for_blink)}}); |
| 264 | 264 |
| 265 uint64_t request_id_; | 265 uint64_t request_id_; |
| 266 bool is_sync_; | 266 bool is_sync_; |
| 267 mojo::MessageReceiverWithStatus* responder_; | 267 std::unique_ptr<mojo::MessageReceiverWithStatus> responder_; |
| 268 | 268 |
| 269 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder); | 269 DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder); |
| 270 }; | 270 }; |
| 271 | 271 |
| 272 void {{class_name}}_{{method.name}}_ProxyToResponder::Run( | 272 void {{class_name}}_{{method.name}}_ProxyToResponder::Run( |
| 273 {{interface_macros.declare_responder_params( | 273 {{interface_macros.declare_responder_params( |
| 274 "in_", method.response_parameters, for_blink)}}) { | 274 "in_", method.response_parameters, for_blink)}}) { |
| 275 mojo::internal::SerializationContext serialization_context; | 275 mojo::internal::SerializationContext serialization_context; |
| 276 {{struct_macros.get_serialized_size(response_params_struct, "in_%s", | 276 {{struct_macros.get_serialized_size(response_params_struct, "in_%s", |
| 277 "&serialization_context")}} | 277 "&serialization_context")}} |
| 278 | 278 |
| 279 uint32_t flags = (is_sync_ ? mojo::Message::kFlagIsSync : 0) | | 279 uint32_t flags = (is_sync_ ? mojo::Message::kFlagIsSync : 0) | |
| 280 mojo::Message::kFlagIsResponse; | 280 mojo::Message::kFlagIsResponse; |
| 281 mojo::internal::MessageBuilder builder( | 281 mojo::internal::MessageBuilder builder( |
| 282 {{message_name}}, flags, size, | 282 {{message_name}}, flags, size, |
| 283 serialization_context.associated_endpoint_count); | 283 serialization_context.associated_endpoint_count); |
| 284 builder.message()->set_request_id(request_id_); | 284 builder.message()->set_request_id(request_id_); |
| 285 | 285 |
| 286 {{build_message(response_params_struct, "in_%s", params_description, | 286 {{build_message(response_params_struct, "in_%s", params_description, |
| 287 "&serialization_context")}} | 287 "&serialization_context")}} |
| 288 bool ok = responder_->Accept(builder.message()); | 288 ignore_result(responder_->Accept(builder.message())); |
| 289 ALLOW_UNUSED_LOCAL(ok); | 289 // TODO(darin): Accept() returning false indicates a malformed message, and |
| 290 // TODO(darin): !ok returned here indicates a malformed message, and that may | 290 // that may be good reason to close the connection. However, we don't have a |
| 291 // be good reason to close the connection. However, we don't have a way to do | 291 // way to do that from here. We should add a way. |
| 292 // that from here. We should add a way. | |
| 293 delete responder_; | |
| 294 responder_ = nullptr; | 292 responder_ = nullptr; |
| 295 } | 293 } |
| 296 {%- endif -%} | 294 {%- endif -%} |
| 297 {%- endfor %} | 295 {%- endfor %} |
| 298 | 296 |
| 299 {#--- StubDispatch definition #} | 297 {#--- StubDispatch definition #} |
| 300 | 298 |
| 301 // static | 299 // static |
| 302 bool {{class_name}}StubDispatch::Accept( | 300 bool {{class_name}}StubDispatch::Accept( |
| 303 {{interface.name}}* impl, | 301 {{interface.name}}* impl, |
| (...skipping 23 matching lines...) Expand all Loading... |
| 327 {%- endfor %} | 325 {%- endfor %} |
| 328 } | 326 } |
| 329 {%- endif %} | 327 {%- endif %} |
| 330 return false; | 328 return false; |
| 331 } | 329 } |
| 332 | 330 |
| 333 // static | 331 // static |
| 334 bool {{class_name}}StubDispatch::AcceptWithResponder( | 332 bool {{class_name}}StubDispatch::AcceptWithResponder( |
| 335 {{interface.name}}* impl, | 333 {{interface.name}}* impl, |
| 336 mojo::Message* message, | 334 mojo::Message* message, |
| 337 mojo::MessageReceiverWithStatus* responder) { | 335 std::unique_ptr<mojo::MessageReceiverWithStatus> responder) { |
| 338 {%- if interface.methods %} | 336 {%- if interface.methods %} |
| 339 switch (message->header()->name) { | 337 switch (message->header()->name) { |
| 340 {%- for method in interface.methods %} | 338 {%- for method in interface.methods %} |
| 341 case internal::k{{class_name}}_{{method.name}}_Name: { | 339 case internal::k{{class_name}}_{{method.name}}_Name: { |
| 342 {%- if method.response_parameters != None %} | 340 {%- if method.response_parameters != None %} |
| 343 internal::{{class_name}}_{{method.name}}_Params_Data* params = | 341 internal::{{class_name}}_{{method.name}}_Params_Data* params = |
| 344 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data*
>( | 342 reinterpret_cast<internal::{{class_name}}_{{method.name}}_Params_Data*
>( |
| 345 message->mutable_payload()); | 343 message->mutable_payload()); |
| 346 | 344 |
| 347 {%- set desc = class_name~"::"~method.name %} | 345 {%- set desc = class_name~"::"~method.name %} |
| 348 {{alloc_params(method.param_struct, "params", "message", desc)| | 346 {{alloc_params(method.param_struct, "params", "message", desc)| |
| 349 indent(4)}} | 347 indent(4)}} |
| 350 {{class_name}}::{{method.name}}Callback callback = | 348 {{class_name}}::{{method.name}}Callback callback = |
| 351 {{class_name}}_{{method.name}}_ProxyToResponder::CreateCallback( | 349 {{class_name}}_{{method.name}}_ProxyToResponder::CreateCallback( |
| 352 message->request_id(), | 350 message->request_id(), |
| 353 message->has_flag(mojo::Message::kFlagIsSync), responder); | 351 message->has_flag(mojo::Message::kFlagIsSync), |
| 352 std::move(responder)); |
| 354 // A null |impl| means no implementation was bound. | 353 // A null |impl| means no implementation was bound. |
| 355 assert(impl); | 354 assert(impl); |
| 356 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); | 355 TRACE_EVENT0("mojom", "{{class_name}}::{{method.name}}"); |
| 357 mojo::internal::MessageDispatchContext context(message); | 356 mojo::internal::MessageDispatchContext context(message); |
| 358 impl->{{method.name}}( | 357 impl->{{method.name}}( |
| 359 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}std:
:move(callback)); | 358 {%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}std:
:move(callback)); |
| 360 return true; | 359 return true; |
| 361 {%- else %} | 360 {%- else %} |
| 362 break; | 361 break; |
| 363 {%- endif %} | 362 {%- endif %} |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 break; | 439 break; |
| 441 } | 440 } |
| 442 | 441 |
| 443 // Unrecognized message. | 442 // Unrecognized message. |
| 444 ReportValidationError( | 443 ReportValidationError( |
| 445 &validation_context, | 444 &validation_context, |
| 446 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); | 445 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
| 447 return false; | 446 return false; |
| 448 } | 447 } |
| 449 {%- endif -%} | 448 {%- endif -%} |
| OLD | NEW |