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

Side by Side Diff: mojo/public/cpp/bindings/lib/control_message_handler.cc

Issue 2766523002: mojo: MessageReceiver*::AcceptWithResponder() now take a unique_ptr to the responder (Closed)
Patch Set: comments Created 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/public/cpp/bindings/lib/control_message_handler.h" 5 #include "mojo/public/cpp/bindings/lib/control_message_handler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/macros.h"
12 #include "mojo/public/cpp/bindings/lib/message_builder.h" 13 #include "mojo/public/cpp/bindings/lib/message_builder.h"
13 #include "mojo/public/cpp/bindings/lib/serialization.h" 14 #include "mojo/public/cpp/bindings/lib/serialization.h"
14 #include "mojo/public/cpp/bindings/lib/validation_util.h" 15 #include "mojo/public/cpp/bindings/lib/validation_util.h"
15 #include "mojo/public/interfaces/bindings/interface_control_messages.mojom.h" 16 #include "mojo/public/interfaces/bindings/interface_control_messages.mojom.h"
16 17
17 namespace mojo { 18 namespace mojo {
18 namespace internal { 19 namespace internal {
19 namespace { 20 namespace {
20 21
21 bool ValidateControlRequestWithResponse(Message* message) { 22 bool ValidateControlRequestWithResponse(Message* message) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 74
74 if (message->header()->name == interface_control::kRunOrClosePipeMessageId) 75 if (message->header()->name == interface_control::kRunOrClosePipeMessageId)
75 return RunOrClosePipe(message); 76 return RunOrClosePipe(message);
76 77
77 NOTREACHED(); 78 NOTREACHED();
78 return false; 79 return false;
79 } 80 }
80 81
81 bool ControlMessageHandler::AcceptWithResponder( 82 bool ControlMessageHandler::AcceptWithResponder(
82 Message* message, 83 Message* message,
83 MessageReceiverWithStatus* responder) { 84 std::unique_ptr<MessageReceiverWithStatus> responder) {
84 if (!ValidateControlRequestWithResponse(message)) 85 if (!ValidateControlRequestWithResponse(message))
85 return false; 86 return false;
86 87
87 if (message->header()->name == interface_control::kRunMessageId) 88 if (message->header()->name == interface_control::kRunMessageId)
88 return Run(message, responder); 89 return Run(message, std::move(responder));
89 90
90 NOTREACHED(); 91 NOTREACHED();
91 return false; 92 return false;
92 } 93 }
93 94
94 bool ControlMessageHandler::Run(Message* message, 95 bool ControlMessageHandler::Run(
95 MessageReceiverWithStatus* responder) { 96 Message* message,
97 std::unique_ptr<MessageReceiverWithStatus> responder) {
96 interface_control::internal::RunMessageParams_Data* params = 98 interface_control::internal::RunMessageParams_Data* params =
97 reinterpret_cast<interface_control::internal::RunMessageParams_Data*>( 99 reinterpret_cast<interface_control::internal::RunMessageParams_Data*>(
98 message->mutable_payload()); 100 message->mutable_payload());
99 interface_control::RunMessageParamsPtr params_ptr; 101 interface_control::RunMessageParamsPtr params_ptr;
100 Deserialize<interface_control::RunMessageParamsDataView>(params, &params_ptr, 102 Deserialize<interface_control::RunMessageParamsDataView>(params, &params_ptr,
101 &context_); 103 &context_);
102 auto& input = *params_ptr->input; 104 auto& input = *params_ptr->input;
103 interface_control::RunOutputPtr output = interface_control::RunOutput::New(); 105 interface_control::RunOutputPtr output = interface_control::RunOutput::New();
104 if (input.is_query_version()) { 106 if (input.is_query_version()) {
105 output->set_query_version_result( 107 output->set_query_version_result(
(...skipping 11 matching lines...) Expand all
117 PrepareToSerialize<interface_control::RunResponseMessageParamsDataView>( 119 PrepareToSerialize<interface_control::RunResponseMessageParamsDataView>(
118 response_params_ptr, &context_); 120 response_params_ptr, &context_);
119 MessageBuilder builder(interface_control::kRunMessageId, 121 MessageBuilder builder(interface_control::kRunMessageId,
120 Message::kFlagIsResponse, size, 0); 122 Message::kFlagIsResponse, size, 0);
121 builder.message()->set_request_id(message->request_id()); 123 builder.message()->set_request_id(message->request_id());
122 124
123 interface_control::internal::RunResponseMessageParams_Data* response_params = 125 interface_control::internal::RunResponseMessageParams_Data* response_params =
124 nullptr; 126 nullptr;
125 Serialize<interface_control::RunResponseMessageParamsDataView>( 127 Serialize<interface_control::RunResponseMessageParamsDataView>(
126 response_params_ptr, builder.buffer(), &response_params, &context_); 128 response_params_ptr, builder.buffer(), &response_params, &context_);
127 bool ok = responder->Accept(builder.message()); 129 ignore_result(responder->Accept(builder.message()));
128 ALLOW_UNUSED_LOCAL(ok);
129 delete responder;
130 130
131 return true; 131 return true;
132 } 132 }
133 133
134 bool ControlMessageHandler::RunOrClosePipe(Message* message) { 134 bool ControlMessageHandler::RunOrClosePipe(Message* message) {
135 interface_control::internal::RunOrClosePipeMessageParams_Data* params = 135 interface_control::internal::RunOrClosePipeMessageParams_Data* params =
136 reinterpret_cast< 136 reinterpret_cast<
137 interface_control::internal::RunOrClosePipeMessageParams_Data*>( 137 interface_control::internal::RunOrClosePipeMessageParams_Data*>(
138 message->mutable_payload()); 138 message->mutable_payload());
139 interface_control::RunOrClosePipeMessageParamsPtr params_ptr; 139 interface_control::RunOrClosePipeMessageParamsPtr params_ptr;
140 Deserialize<interface_control::RunOrClosePipeMessageParamsDataView>( 140 Deserialize<interface_control::RunOrClosePipeMessageParamsDataView>(
141 params, &params_ptr, &context_); 141 params, &params_ptr, &context_);
142 auto& input = *params_ptr->input; 142 auto& input = *params_ptr->input;
143 if (input.is_require_version()) 143 if (input.is_require_version())
144 return interface_version_ >= input.get_require_version()->version; 144 return interface_version_ >= input.get_require_version()->version;
145 145
146 return false; 146 return false;
147 } 147 }
148 148
149 } // namespace internal 149 } // namespace internal
150 } // namespace mojo 150 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/control_message_handler.h ('k') | mojo/public/cpp/bindings/lib/control_message_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698