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

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

Issue 2660733002: Mojo C++ bindings: introduce an optional array to store transferred interface IDs in messages. (Closed)
Patch Set: . Created 3 years, 10 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_proxy.h" 5 #include "mojo/public/cpp/bindings/lib/control_message_proxy.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/bind.h" 11 #include "base/bind.h"
12 #include "base/callback_helpers.h" 12 #include "base/callback_helpers.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/run_loop.h" 14 #include "base/run_loop.h"
15 #include "mojo/public/cpp/bindings/lib/message_builder.h" 15 #include "mojo/public/cpp/bindings/lib/message_builder.h"
16 #include "mojo/public/cpp/bindings/lib/serialization.h" 16 #include "mojo/public/cpp/bindings/lib/serialization.h"
17 #include "mojo/public/cpp/bindings/lib/validation_util.h" 17 #include "mojo/public/cpp/bindings/lib/validation_util.h"
18 #include "mojo/public/cpp/bindings/message.h" 18 #include "mojo/public/cpp/bindings/message.h"
19 #include "mojo/public/interfaces/bindings/interface_control_messages.mojom.h" 19 #include "mojo/public/interfaces/bindings/interface_control_messages.mojom.h"
20 20
21 namespace mojo { 21 namespace mojo {
22 namespace internal { 22 namespace internal {
23 23
24 namespace { 24 namespace {
25 25
26 bool ValidateControlResponse(Message* message) { 26 bool ValidateControlResponse(Message* message) {
27 ValidationContext validation_context( 27 ValidationContext validation_context(message->payload(),
28 message->data(), message->data_num_bytes(), message->handles()->size(), 28 message->payload_num_bytes(), 0, 0,
29 message, "ControlResponseValidator"); 29 message, "ControlResponseValidator");
30 if (!ValidateMessageIsResponse(message, &validation_context)) 30 if (!ValidateMessageIsResponse(message, &validation_context))
31 return false; 31 return false;
32 32
33 switch (message->header()->name) { 33 switch (message->header()->name) {
34 case interface_control::kRunMessageId: 34 case interface_control::kRunMessageId:
35 return ValidateMessagePayload< 35 return ValidateMessagePayload<
36 interface_control::internal::RunResponseMessageParams_Data>( 36 interface_control::internal::RunResponseMessageParams_Data>(
37 message, &validation_context); 37 message, &validation_context);
38 } 38 }
39 return false; 39 return false;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 72
73 void SendRunMessage(MessageReceiverWithResponder* receiver, 73 void SendRunMessage(MessageReceiverWithResponder* receiver,
74 interface_control::RunInputPtr input_ptr, 74 interface_control::RunInputPtr input_ptr,
75 const RunCallback& callback) { 75 const RunCallback& callback) {
76 SerializationContext context; 76 SerializationContext context;
77 77
78 auto params_ptr = interface_control::RunMessageParams::New(); 78 auto params_ptr = interface_control::RunMessageParams::New();
79 params_ptr->input = std::move(input_ptr); 79 params_ptr->input = std::move(input_ptr);
80 size_t size = PrepareToSerialize<interface_control::RunMessageParamsDataView>( 80 size_t size = PrepareToSerialize<interface_control::RunMessageParamsDataView>(
81 params_ptr, &context); 81 params_ptr, &context);
82 RequestMessageBuilder builder(interface_control::kRunMessageId, size); 82 MessageBuilder builder(interface_control::kRunMessageId,
83 Message::kFlagExpectsResponse, size, 0);
83 84
84 interface_control::internal::RunMessageParams_Data* params = nullptr; 85 interface_control::internal::RunMessageParams_Data* params = nullptr;
85 Serialize<interface_control::RunMessageParamsDataView>( 86 Serialize<interface_control::RunMessageParamsDataView>(
86 params_ptr, builder.buffer(), &params, &context); 87 params_ptr, builder.buffer(), &params, &context);
87 MessageReceiver* responder = new RunResponseForwardToCallback(callback); 88 MessageReceiver* responder = new RunResponseForwardToCallback(callback);
88 if (!receiver->AcceptWithResponder(builder.message(), responder)) 89 if (!receiver->AcceptWithResponder(builder.message(), responder))
89 delete responder; 90 delete responder;
90 } 91 }
91 92
92 Message ConstructRunOrClosePipeMessage( 93 Message ConstructRunOrClosePipeMessage(
93 interface_control::RunOrClosePipeInputPtr input_ptr) { 94 interface_control::RunOrClosePipeInputPtr input_ptr) {
94 SerializationContext context; 95 SerializationContext context;
95 96
96 auto params_ptr = interface_control::RunOrClosePipeMessageParams::New(); 97 auto params_ptr = interface_control::RunOrClosePipeMessageParams::New();
97 params_ptr->input = std::move(input_ptr); 98 params_ptr->input = std::move(input_ptr);
98 99
99 size_t size = PrepareToSerialize< 100 size_t size = PrepareToSerialize<
100 interface_control::RunOrClosePipeMessageParamsDataView>(params_ptr, 101 interface_control::RunOrClosePipeMessageParamsDataView>(params_ptr,
101 &context); 102 &context);
102 MessageBuilder builder(interface_control::kRunOrClosePipeMessageId, size); 103 MessageBuilder builder(interface_control::kRunOrClosePipeMessageId, 0, size,
104 0);
103 105
104 interface_control::internal::RunOrClosePipeMessageParams_Data* params = 106 interface_control::internal::RunOrClosePipeMessageParams_Data* params =
105 nullptr; 107 nullptr;
106 Serialize<interface_control::RunOrClosePipeMessageParamsDataView>( 108 Serialize<interface_control::RunOrClosePipeMessageParamsDataView>(
107 params_ptr, builder.buffer(), &params, &context); 109 params_ptr, builder.buffer(), &params, &context);
108 return std::move(*builder.message()); 110 return std::move(*builder.message());
109 } 111 }
110 112
111 void SendRunOrClosePipeMessage( 113 void SendRunOrClosePipeMessage(
112 MessageReceiverWithResponder* receiver, 114 MessageReceiverWithResponder* receiver,
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 } 179 }
178 180
179 void ControlMessageProxy::OnConnectionError() { 181 void ControlMessageProxy::OnConnectionError() {
180 encountered_error_ = true; 182 encountered_error_ = true;
181 if (!run_loop_quit_closure_.is_null()) 183 if (!run_loop_quit_closure_.is_null())
182 RunFlushForTestingClosure(); 184 RunFlushForTestingClosure();
183 } 185 }
184 186
185 } // namespace internal 187 } // namespace internal
186 } // namespace mojo 188 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/control_message_handler.cc ('k') | mojo/public/cpp/bindings/lib/handle_interface_serialization.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698