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

Unified Diff: mojo/public/cpp/bindings/lib/control_message_handler.cc

Issue 2277853003: Use unions for interface control messages. (Closed)
Patch Set: Created 4 years, 4 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
« no previous file with comments | « no previous file | mojo/public/cpp/bindings/lib/control_message_proxy.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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, &params_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, &params_ptr,
- &context_);
+ interface_control::RunOrClosePipeMessageParamsPtr params_ptr;
+ Deserialize<interface_control::RunOrClosePipeMessageParamsDataView>(
+ params, &params_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
« no previous file with comments | « no previous file | mojo/public/cpp/bindings/lib/control_message_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698