Index: mojo/public/cpp/bindings/lib/control_message_handler.cc |
diff --git a/mojo/public/cpp/bindings/lib/control_message_handler.cc b/mojo/public/cpp/bindings/lib/control_message_handler.cc |
index 75388d105e376ee73c65ef25759cb179b9fed7dc..b9bf7eb54ed5aaf96078f62181e58a42af7aa4ca 100644 |
--- a/mojo/public/cpp/bindings/lib/control_message_handler.cc |
+++ b/mojo/public/cpp/bindings/lib/control_message_handler.cc |
@@ -18,8 +18,8 @@ namespace internal { |
// static |
bool ControlMessageHandler::IsControlMessage(const Message* message) { |
- return message->header()->name == kRunMessageId || |
- message->header()->name == kRunOrClosePipeMessageId; |
+ return message->header()->name == interface_control::kRunMessageId || |
+ message->header()->name == interface_control::kRunOrClosePipeMessageId; |
} |
ControlMessageHandler::ControlMessageHandler(uint32_t interface_version) |
@@ -30,7 +30,7 @@ ControlMessageHandler::~ControlMessageHandler() { |
} |
bool ControlMessageHandler::Accept(Message* message) { |
- if (message->header()->name == kRunOrClosePipeMessageId) |
+ if (message->header()->name == interface_control::kRunOrClosePipeMessageId) |
return RunOrClosePipe(message); |
NOTREACHED(); |
@@ -40,7 +40,7 @@ bool ControlMessageHandler::Accept(Message* message) { |
bool ControlMessageHandler::AcceptWithResponder( |
Message* message, |
MessageReceiverWithStatus* responder) { |
- if (message->header()->name == kRunMessageId) |
+ if (message->header()->name == interface_control::kRunMessageId) |
return Run(message, responder); |
NOTREACHED(); |
@@ -49,19 +49,33 @@ bool ControlMessageHandler::AcceptWithResponder( |
bool ControlMessageHandler::Run(Message* message, |
MessageReceiverWithStatus* responder) { |
- RunResponseMessageParamsPtr response_params_ptr( |
- RunResponseMessageParams::New()); |
- response_params_ptr->reserved0 = 16u; |
- response_params_ptr->reserved1 = 0u; |
- response_params_ptr->query_version_result = QueryVersionResult::New(); |
- response_params_ptr->query_version_result->version = interface_version_; |
- |
- size_t size = PrepareToSerialize<RunResponseMessageParamsDataView>( |
- response_params_ptr, &context_); |
- ResponseMessageBuilder builder(kRunMessageId, size, message->request_id()); |
- |
- RunResponseMessageParams_Data* response_params = nullptr; |
- Serialize<RunResponseMessageParamsDataView>( |
+ interface_control::internal::RunMessageParams_Data* params = |
+ reinterpret_cast<interface_control::internal::RunMessageParams_Data*>( |
+ message->mutable_payload()); |
+ interface_control::RunMessageParamsPtr params_ptr; |
+ Deserialize<interface_control::RunMessageParamsDataView>(params, ¶ms_ptr, |
+ &context_); |
+ auto& input = *params_ptr->input; |
+ interface_control::RunOutputPtr output = interface_control::RunOutput::New(); |
+ if (input.is_query_version()) { |
+ output->set_query_version_result( |
+ interface_control::QueryVersionResult::New()); |
+ output->get_query_version_result()->version = interface_version_; |
+ } else { |
+ output.reset(); |
+ } |
+ |
+ auto response_params_ptr = interface_control::RunResponseMessageParams::New(); |
+ response_params_ptr->output = std::move(output); |
+ size_t size = |
+ PrepareToSerialize<interface_control::RunResponseMessageParamsDataView>( |
+ response_params_ptr, &context_); |
+ ResponseMessageBuilder builder(interface_control::kRunMessageId, size, |
+ message->request_id()); |
+ |
+ interface_control::internal::RunResponseMessageParams_Data* response_params = |
+ nullptr; |
+ Serialize<interface_control::RunResponseMessageParamsDataView>( |
response_params_ptr, builder.buffer(), &response_params, &context_); |
bool ok = responder->Accept(builder.message()); |
ALLOW_UNUSED_LOCAL(ok); |
@@ -71,14 +85,18 @@ bool ControlMessageHandler::Run(Message* message, |
} |
bool ControlMessageHandler::RunOrClosePipe(Message* message) { |
- RunOrClosePipeMessageParams_Data* params = |
- reinterpret_cast<RunOrClosePipeMessageParams_Data*>( |
+ interface_control::internal::RunOrClosePipeMessageParams_Data* params = |
+ reinterpret_cast< |
+ interface_control::internal::RunOrClosePipeMessageParams_Data*>( |
message->mutable_payload()); |
- RunOrClosePipeMessageParamsPtr params_ptr; |
- Deserialize<RunOrClosePipeMessageParamsDataView>(params, ¶ms_ptr, |
- &context_); |
+ interface_control::RunOrClosePipeMessageParamsPtr params_ptr; |
+ Deserialize<interface_control::RunOrClosePipeMessageParamsDataView>( |
+ params, ¶ms_ptr, &context_); |
+ auto& input = *params_ptr->input; |
+ if (input.is_require_version()) |
+ return interface_version_ >= input.get_require_version()->version; |
- return interface_version_ >= params_ptr->require_version->version; |
+ return false; |
} |
} // namespace internal |