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 3cadeed808817434ccd3af7cababd94d40fd57b1..38991a959fdbec83fe2ed7fc11d9b11fc297e6d9 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 |
@@ -30,11 +30,16 @@ p_{{param.name}} |
{%- endmacro %} |
{#--- Begin #} |
-const char* {{class_name}}::Name_ = "{{namespace_as_string}}::{{class_name}}"; |
-const uint32_t {{class_name}}::Version_ = {{interface.version}}; |
+MOJO_STATIC_CONST_MEMBER_DEFINITION const char {{class_name}}::Name_[] = "{{namespace_as_string}}::{{class_name}}"; |
+MOJO_STATIC_CONST_MEMBER_DEFINITION const uint32_t {{class_name}}::Version_; |
+ |
{#--- Constants #} |
-{% for constant in interface.constants %} |
-const {{constant.kind|cpp_pod_type}} {{interface.name}}::{{constant.name}} = {{constant|constant_value}}; |
+{%- for constant in interface.constants %} |
+{%- if constant.kind|is_integral_kind %} |
+MOJO_STATIC_CONST_MEMBER_DEFINITION const {{constant.kind|cpp_pod_type}} {{interface.name}}::{{constant.name}}; |
+{%- else %} |
+MOJO_STATIC_CONST_MEMBER_DEFINITION const {{constant.kind|cpp_pod_type}} {{interface.name}}::{{constant.name}} = {{constant|constant_value}}; |
+{%- endif %} |
{%- endfor %} |
{#--- ForwardToCallback definition #} |
@@ -67,7 +72,7 @@ bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept( |
{%- endfor %} |
{{proxy_name}}::{{proxy_name}}(mojo::MessageReceiverWithResponder* receiver) |
- : receiver_(receiver) { |
+ : ControlMessageProxy(receiver) { |
} |
{#--- Proxy definitions #} |
@@ -115,7 +120,7 @@ void {{proxy_name}}::{{method.name}}( |
class {{class_name}}_{{method.name}}_ProxyToResponder |
: public {{class_name}}::{{method.name}}Callback::Runnable { |
public: |
- virtual ~{{class_name}}_{{method.name}}_ProxyToResponder() { |
+ ~{{class_name}}_{{method.name}}_ProxyToResponder() override { |
// Is the Mojo application destroying the callback without running it |
// and without first closing the pipe? |
bool callback_was_dropped = responder_ && responder_->IsValid(); |
@@ -159,7 +164,8 @@ void {{class_name}}_{{method.name}}_ProxyToResponder::Run( |
{%- endfor %} |
{{class_name}}Stub::{{class_name}}Stub() |
- : sink_(nullptr) { |
+ : sink_(nullptr), |
+ control_message_handler_({{interface.name}}::Version_) { |
} |
{{class_name}}Stub::~{{interface.name}}Stub() {} |
@@ -167,6 +173,8 @@ void {{class_name}}_{{method.name}}_ProxyToResponder::Run( |
{#--- Stub definition #} |
bool {{class_name}}Stub::Accept(mojo::Message* message) { |
+ if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) |
+ return control_message_handler_.Accept(message); |
{%- if interface.methods %} |
switch (message->header()->name) { |
{%- for method in interface.methods %} |
@@ -195,6 +203,8 @@ bool {{class_name}}Stub::Accept(mojo::Message* message) { |
bool {{class_name}}Stub::AcceptWithResponder( |
mojo::Message* message, mojo::MessageReceiverWithStatus* responder) { |
+ if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) |
+ return control_message_handler_.AcceptWithResponder(message, responder); |
{%- if interface.methods %} |
switch (message->header()->name) { |
{%- for method in interface.methods %} |
@@ -234,6 +244,13 @@ bool {{class_name}}Stub::AcceptWithResponder( |
bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
assert(sink_); |
+ |
+ if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { |
+ if (!mojo::internal::ValidateControlRequest(message)) |
+ return false; |
+ return sink_->Accept(message); |
+ } |
+ |
switch (message->header()->name) { |
{%- for method in interface.methods %} |
case internal::k{{class_name}}_{{method.name}}_Name: { |
@@ -269,6 +286,13 @@ bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { |
assert(sink_); |
+ |
+ if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { |
+ if (!mojo::internal::ValidateControlResponse(message)) |
+ return false; |
+ return sink_->Accept(message); |
+ } |
+ |
if (!mojo::internal::ValidateMessageIsResponse(message)) |
return false; |
switch (message->header()->name) { |