| 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 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 | 152 |
| 153 // TODO(yzshen): the way to use validator (or message filter in general) | 153 // TODO(yzshen): the way to use validator (or message filter in general) |
| 154 // directly is a little awkward. | 154 // directly is a little awkward. |
| 155 if (payload_validator) | 155 if (payload_validator) |
| 156 filters_.Append(std::move(payload_validator)); | 156 filters_.Append(std::move(payload_validator)); |
| 157 | 157 |
| 158 controller_ = handle_.group_controller()->AttachEndpointClient( | 158 controller_ = handle_.group_controller()->AttachEndpointClient( |
| 159 handle_, this, task_runner_); | 159 handle_, this, task_runner_); |
| 160 if (expect_sync_requests) | 160 if (expect_sync_requests) |
| 161 controller_->AllowWokenUpBySyncWatchOnSameThread(); | 161 controller_->AllowWokenUpBySyncWatchOnSameThread(); |
| 162 | |
| 163 base::MessageLoop::current()->AddDestructionObserver(this); | |
| 164 } | 162 } |
| 165 | 163 |
| 166 InterfaceEndpointClient::~InterfaceEndpointClient() { | 164 InterfaceEndpointClient::~InterfaceEndpointClient() { |
| 167 DCHECK(thread_checker_.CalledOnValidThread()); | 165 DCHECK(thread_checker_.CalledOnValidThread()); |
| 168 | 166 |
| 169 StopObservingIfNecessary(); | |
| 170 | |
| 171 if (handle_.is_valid()) | 167 if (handle_.is_valid()) |
| 172 handle_.group_controller()->DetachEndpointClient(handle_); | 168 handle_.group_controller()->DetachEndpointClient(handle_); |
| 173 } | 169 } |
| 174 | 170 |
| 175 AssociatedGroup* InterfaceEndpointClient::associated_group() { | 171 AssociatedGroup* InterfaceEndpointClient::associated_group() { |
| 176 if (!associated_group_) | 172 if (!associated_group_) |
| 177 associated_group_ = handle_.group_controller()->CreateAssociatedGroup(); | 173 associated_group_ = handle_.group_controller()->CreateAssociatedGroup(); |
| 178 return associated_group_.get(); | 174 return associated_group_.get(); |
| 179 } | 175 } |
| 180 | 176 |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 async_responders_.erase(it); | 340 async_responders_.erase(it); |
| 345 return responder->Accept(message); | 341 return responder->Accept(message); |
| 346 } else { | 342 } else { |
| 347 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) | 343 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) |
| 348 return control_message_handler_.Accept(message); | 344 return control_message_handler_.Accept(message); |
| 349 | 345 |
| 350 return incoming_receiver_->Accept(message); | 346 return incoming_receiver_->Accept(message); |
| 351 } | 347 } |
| 352 } | 348 } |
| 353 | 349 |
| 354 void InterfaceEndpointClient::StopObservingIfNecessary() { | |
| 355 if (!observing_message_loop_destruction_) | |
| 356 return; | |
| 357 | |
| 358 observing_message_loop_destruction_ = false; | |
| 359 base::MessageLoop::current()->RemoveDestructionObserver(this); | |
| 360 } | |
| 361 | |
| 362 void InterfaceEndpointClient::WillDestroyCurrentMessageLoop() { | |
| 363 StopObservingIfNecessary(); | |
| 364 NotifyError(base::nullopt); | |
| 365 } | |
| 366 | |
| 367 } // namespace mojo | 350 } // namespace mojo |
| OLD | NEW |