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

Unified Diff: third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl

Issue 1058033002: NOT TO COMMITTED: Update mojo sdk to rev 0018e6a91b75bcb941c867f8a7aa1753c3b53a13 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
diff --git a/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
index 44d1428d00340edc9472a5e6f2bcba0a5854eca5..19a33e17c17116ab906b0955cbd02060e6c2543e 100644
--- a/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
+++ b/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
@@ -46,7 +46,7 @@ class {{class_name}}_{{method.name}}_ForwardToCallback
const {{class_name}}::{{method.name}}Callback& callback)
: callback_(callback) {
}
- virtual bool Accept(mojo::Message* message) override;
+ bool Accept(mojo::Message* message) override;
private:
{{class_name}}::{{method.name}}Callback callback_;
MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback);
@@ -115,31 +115,33 @@ class {{class_name}}_{{method.name}}_ProxyToResponder
: public {{class_name}}::{{method.name}}Callback::Runnable {
public:
virtual ~{{class_name}}_{{method.name}}_ProxyToResponder() {
+ // Is the Mojo application destroying the callback without running it
+ // and without first closing the pipe?
+ bool callback_was_dropped = responder_ && responder_->IsValid();
+ // If the Callback was dropped then deleting the responder will close
+ // the pipe so the calling application knows to stop waiting for a reply.
delete responder_;
- // TODO(rudominer) DCHECK if |was_run_| is false and we don't have evidence
- // that we are in a legitamte shutdown case such as the Connector detected
- // an error or Close() was invoked.
+ MOJO_DCHECK(!callback_was_dropped) << "The callback passed to "
+ "{{class_name}}::{{method.name}}({%- if method.parameters -%}{{pass_params(method.parameters)}}, {% endif -%}callback) "
+ "was never run.";
}
{{class_name}}_{{method.name}}_ProxyToResponder(
uint64_t request_id,
- mojo::MessageReceiver* responder)
+ mojo::MessageReceiverWithStatus* responder)
: request_id_(request_id),
- responder_(responder),
- was_run_(false) {
+ responder_(responder) {
}
- virtual void Run({{interface_macros.declare_params("in_", method.response_parameters)}}) const override;
+ void Run({{interface_macros.declare_params("in_", method.response_parameters)}}) const override;
private:
uint64_t request_id_;
- mutable mojo::MessageReceiver* responder_;
- mutable bool was_run_;
+ mutable mojo::MessageReceiverWithStatus* responder_;
MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder);
};
void {{class_name}}_{{method.name}}_ProxyToResponder::Run(
{{interface_macros.declare_params("in_", method.response_parameters)}}) const {
- was_run_ = true;
{{struct_macros.get_serialized_size(response_params_struct, "in_%s")}}
mojo::internal::ResponseMessageBuilder builder(
{{message_name}}, size, request_id_);
@@ -159,6 +161,8 @@ void {{class_name}}_{{method.name}}_ProxyToResponder::Run(
: sink_(nullptr) {
}
+{{class_name}}Stub::~{{interface.name}}Stub() {}
+
{#--- Stub definition #}
bool {{class_name}}Stub::Accept(mojo::Message* message) {
@@ -188,7 +192,7 @@ bool {{class_name}}Stub::Accept(mojo::Message* message) {
}
bool {{class_name}}Stub::AcceptWithResponder(
- mojo::Message* message, mojo::MessageReceiver* responder) {
+ mojo::Message* message, mojo::MessageReceiverWithStatus* responder) {
{%- if interface.methods %}
switch (message->header()->name) {
{%- for method in interface.methods %}
@@ -227,16 +231,25 @@ bool {{class_name}}Stub::AcceptWithResponder(
bool {{class_name}}RequestValidator::Accept(mojo::Message* message) {
{%- if interface.methods %}
+ if (message->has_flag(mojo::internal::kMessageIsResponse)) {
+ ReportValidationError(
+ mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS);
+ return false;
+ }
switch (message->header()->name) {
{%- for method in interface.methods %}
case internal::k{{class_name}}_{{method.name}}_Name: {
{%- if method.response_parameters != None %}
- if (!message->has_flag(mojo::internal::kMessageExpectsResponse))
- break;
+ if (!message->has_flag(mojo::internal::kMessageExpectsResponse)) {
+ ReportValidationError(
+ mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS);
+ return false;
+ }
{%- else %}
- if (message->has_flag(mojo::internal::kMessageExpectsResponse) ||
- message->has_flag(mojo::internal::kMessageIsResponse)) {
- break;
+ if (message->has_flag(mojo::internal::kMessageExpectsResponse)) {
+ ReportValidationError(
+ mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS);
+ return false;
}
{%- endif %}
mojo::internal::BoundsChecker bounds_checker(
@@ -249,6 +262,12 @@ bool {{class_name}}RequestValidator::Accept(mojo::Message* message) {
break;
}
{%- endfor %}
+ default: {
+ // Unrecognized message.
+ ReportValidationError(
+ mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD);
+ return false;
+ }
}
{%- endif %}
@@ -264,11 +283,14 @@ bool {{class_name}}RequestValidator::Accept(mojo::Message* message) {
bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
{%- if interface.methods %}
+ if (!message->has_flag(mojo::internal::kMessageIsResponse)) {
+ ReportValidationError(
+ mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS);
+ return false;
+ }
switch (message->header()->name) {
{%- for method in interface.methods if method.response_parameters != None %}
case internal::k{{class_name}}_{{method.name}}_Name: {
- if (!message->has_flag(mojo::internal::kMessageIsResponse))
- break;
mojo::internal::BoundsChecker bounds_checker(
message->payload(), message->payload_num_bytes(),
message->handles()->size());
@@ -279,6 +301,12 @@ bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
break;
}
{%- endfor %}
+ default: {
+ // Unrecognized message.
+ ReportValidationError(
+ mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD);
+ return false;
+ }
}
{%- endif %}

Powered by Google App Engine
This is Rietveld 408576698