OLD | NEW |
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/interface_endpoint_client.h" | 5 #include "mojo/public/cpp/bindings/interface_endpoint_client.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 bool InterfaceEndpointClient::HandleIncomingMessageThunk::Accept( | 125 bool InterfaceEndpointClient::HandleIncomingMessageThunk::Accept( |
126 Message* message) { | 126 Message* message) { |
127 return owner_->HandleValidatedMessage(message); | 127 return owner_->HandleValidatedMessage(message); |
128 } | 128 } |
129 | 129 |
130 // ---------------------------------------------------------------------------- | 130 // ---------------------------------------------------------------------------- |
131 | 131 |
132 InterfaceEndpointClient::InterfaceEndpointClient( | 132 InterfaceEndpointClient::InterfaceEndpointClient( |
133 ScopedInterfaceEndpointHandle handle, | 133 ScopedInterfaceEndpointHandle handle, |
134 MessageReceiverWithResponderStatus* receiver, | 134 MessageReceiverWithResponderStatus* receiver, |
135 std::unique_ptr<MessageFilter> payload_validator, | 135 std::unique_ptr<MessageReceiver> payload_validator, |
136 bool expect_sync_requests, | 136 bool expect_sync_requests, |
137 scoped_refptr<base::SingleThreadTaskRunner> runner) | 137 scoped_refptr<base::SingleThreadTaskRunner> runner) |
138 : handle_(std::move(handle)), | 138 : handle_(std::move(handle)), |
139 incoming_receiver_(receiver), | 139 incoming_receiver_(receiver), |
140 payload_validator_(std::move(payload_validator)), | |
141 thunk_(this), | 140 thunk_(this), |
| 141 filters_(&thunk_), |
142 next_request_id_(1), | 142 next_request_id_(1), |
143 encountered_error_(false), | 143 encountered_error_(false), |
144 task_runner_(std::move(runner)), | 144 task_runner_(std::move(runner)), |
145 weak_ptr_factory_(this) { | 145 weak_ptr_factory_(this) { |
146 DCHECK(handle_.is_valid()); | 146 DCHECK(handle_.is_valid()); |
147 DCHECK(handle_.is_local()); | 147 DCHECK(handle_.is_local()); |
148 | 148 |
149 // TODO(yzshen): the way to use validator (or message filter in general) | 149 // TODO(yzshen): the way to use validator (or message filter in general) |
150 // directly is a little awkward. | 150 // directly is a little awkward. |
151 payload_validator_->set_sink(&thunk_); | 151 filters_.Append(std::move(payload_validator)); |
152 | 152 |
153 controller_ = handle_.group_controller()->AttachEndpointClient( | 153 controller_ = handle_.group_controller()->AttachEndpointClient( |
154 handle_, this, task_runner_); | 154 handle_, this, task_runner_); |
155 if (expect_sync_requests) | 155 if (expect_sync_requests) |
156 controller_->AllowWokenUpBySyncWatchOnSameThread(); | 156 controller_->AllowWokenUpBySyncWatchOnSameThread(); |
157 } | 157 } |
158 | 158 |
159 InterfaceEndpointClient::~InterfaceEndpointClient() { | 159 InterfaceEndpointClient::~InterfaceEndpointClient() { |
160 DCHECK(thread_checker_.CalledOnValidThread()); | 160 DCHECK(thread_checker_.CalledOnValidThread()); |
161 | 161 |
(...skipping 18 matching lines...) Expand all Loading... |
180 | 180 |
181 if (!handle_.is_valid()) | 181 if (!handle_.is_valid()) |
182 return ScopedInterfaceEndpointHandle(); | 182 return ScopedInterfaceEndpointHandle(); |
183 | 183 |
184 controller_ = nullptr; | 184 controller_ = nullptr; |
185 handle_.group_controller()->DetachEndpointClient(handle_); | 185 handle_.group_controller()->DetachEndpointClient(handle_); |
186 | 186 |
187 return std::move(handle_); | 187 return std::move(handle_); |
188 } | 188 } |
189 | 189 |
| 190 void InterfaceEndpointClient::AddFilter( |
| 191 std::unique_ptr<MessageReceiver> filter) { |
| 192 filters_.Append(std::move(filter)); |
| 193 } |
| 194 |
190 void InterfaceEndpointClient::RaiseError() { | 195 void InterfaceEndpointClient::RaiseError() { |
191 DCHECK(thread_checker_.CalledOnValidThread()); | 196 DCHECK(thread_checker_.CalledOnValidThread()); |
192 | 197 |
193 handle_.group_controller()->RaiseError(); | 198 handle_.group_controller()->RaiseError(); |
194 } | 199 } |
195 | 200 |
196 bool InterfaceEndpointClient::Accept(Message* message) { | 201 bool InterfaceEndpointClient::Accept(Message* message) { |
197 DCHECK(thread_checker_.CalledOnValidThread()); | 202 DCHECK(thread_checker_.CalledOnValidThread()); |
198 DCHECK(controller_); | 203 DCHECK(controller_); |
199 DCHECK(!message->has_flag(Message::kFlagExpectsResponse)); | 204 DCHECK(!message->has_flag(Message::kFlagExpectsResponse)); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 ignore_result(sync_responder->Accept(&iter->second->response)); | 254 ignore_result(sync_responder->Accept(&iter->second->response)); |
250 sync_responses_.erase(iter); | 255 sync_responses_.erase(iter); |
251 } | 256 } |
252 | 257 |
253 // Return true means that we take ownership of |responder|. | 258 // Return true means that we take ownership of |responder|. |
254 return true; | 259 return true; |
255 } | 260 } |
256 | 261 |
257 bool InterfaceEndpointClient::HandleIncomingMessage(Message* message) { | 262 bool InterfaceEndpointClient::HandleIncomingMessage(Message* message) { |
258 DCHECK(thread_checker_.CalledOnValidThread()); | 263 DCHECK(thread_checker_.CalledOnValidThread()); |
259 | 264 return filters_.Accept(message); |
260 return payload_validator_->Accept(message); | |
261 } | 265 } |
262 | 266 |
263 void InterfaceEndpointClient::NotifyError() { | 267 void InterfaceEndpointClient::NotifyError() { |
264 DCHECK(thread_checker_.CalledOnValidThread()); | 268 DCHECK(thread_checker_.CalledOnValidThread()); |
265 | 269 |
266 if (encountered_error_) | 270 if (encountered_error_) |
267 return; | 271 return; |
268 encountered_error_ = true; | 272 encountered_error_ = true; |
269 | 273 |
270 // The callbacks may hold on to resources. There is no need to keep them any | 274 // The callbacks may hold on to resources. There is no need to keep them any |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 return responder->Accept(message); | 313 return responder->Accept(message); |
310 } else { | 314 } else { |
311 if (!incoming_receiver_) | 315 if (!incoming_receiver_) |
312 return false; | 316 return false; |
313 | 317 |
314 return incoming_receiver_->Accept(message); | 318 return incoming_receiver_->Accept(message); |
315 } | 319 } |
316 } | 320 } |
317 | 321 |
318 } // namespace mojo | 322 } // namespace mojo |
OLD | NEW |