| 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 |