| 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 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/location.h" | 12 #include "base/location.h" |
| 13 #include "base/logging.h" |
| 13 #include "base/macros.h" | 14 #include "base/macros.h" |
| 14 #include "base/memory/ptr_util.h" | 15 #include "base/memory/ptr_util.h" |
| 15 #include "base/single_thread_task_runner.h" | 16 #include "base/single_thread_task_runner.h" |
| 16 #include "base/stl_util.h" | 17 #include "base/stl_util.h" |
| 17 #include "mojo/public/cpp/bindings/associated_group.h" | 18 #include "mojo/public/cpp/bindings/associated_group.h" |
| 18 #include "mojo/public/cpp/bindings/associated_group_controller.h" | 19 #include "mojo/public/cpp/bindings/associated_group_controller.h" |
| 19 #include "mojo/public/cpp/bindings/interface_endpoint_controller.h" | 20 #include "mojo/public/cpp/bindings/interface_endpoint_controller.h" |
| 20 #include "mojo/public/cpp/bindings/lib/validation_util.h" | 21 #include "mojo/public/cpp/bindings/lib/validation_util.h" |
| 21 #include "mojo/public/cpp/bindings/sync_call_restrictions.h" | 22 #include "mojo/public/cpp/bindings/sync_call_restrictions.h" |
| 22 | 23 |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 ScopedInterfaceEndpointHandle::PEER_CLOSED_BEFORE_ASSOCIATION) { | 354 ScopedInterfaceEndpointHandle::PEER_CLOSED_BEFORE_ASSOCIATION) { |
| 354 task_runner_->PostTask(FROM_HERE, | 355 task_runner_->PostTask(FROM_HERE, |
| 355 base::Bind(&InterfaceEndpointClient::NotifyError, | 356 base::Bind(&InterfaceEndpointClient::NotifyError, |
| 356 weak_ptr_factory_.GetWeakPtr(), | 357 weak_ptr_factory_.GetWeakPtr(), |
| 357 handle_.disconnect_reason())); | 358 handle_.disconnect_reason())); |
| 358 } | 359 } |
| 359 } | 360 } |
| 360 | 361 |
| 361 bool InterfaceEndpointClient::HandleValidatedMessage(Message* message) { | 362 bool InterfaceEndpointClient::HandleValidatedMessage(Message* message) { |
| 362 DCHECK_EQ(handle_.id(), message->interface_id()); | 363 DCHECK_EQ(handle_.id(), message->interface_id()); |
| 363 DCHECK(!encountered_error_); | 364 |
| 365 if (encountered_error_) { |
| 366 // This message is received after error has been encountered. For associated |
| 367 // interfaces, this means the remote side sends a |
| 368 // PeerAssociatedEndpointClosed event but continues to send more messages |
| 369 // for the same interface. Close the pipe because this shouldn't happen. |
| 370 DVLOG(1) << "A message is received for an interface after it has been " |
| 371 << "disconnected. Closing the pipe."; |
| 372 return false; |
| 373 } |
| 364 | 374 |
| 365 if (message->has_flag(Message::kFlagExpectsResponse)) { | 375 if (message->has_flag(Message::kFlagExpectsResponse)) { |
| 366 MessageReceiverWithStatus* responder = | 376 MessageReceiverWithStatus* responder = |
| 367 new ResponderThunk(weak_ptr_factory_.GetWeakPtr(), task_runner_); | 377 new ResponderThunk(weak_ptr_factory_.GetWeakPtr(), task_runner_); |
| 368 bool ok = false; | 378 bool ok = false; |
| 369 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { | 379 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) { |
| 370 ok = control_message_handler_.AcceptWithResponder(message, responder); | 380 ok = control_message_handler_.AcceptWithResponder(message, responder); |
| 371 } else { | 381 } else { |
| 372 ok = incoming_receiver_->AcceptWithResponder(message, responder); | 382 ok = incoming_receiver_->AcceptWithResponder(message, responder); |
| 373 } | 383 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 394 return responder->Accept(message); | 404 return responder->Accept(message); |
| 395 } else { | 405 } else { |
| 396 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) | 406 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) |
| 397 return control_message_handler_.Accept(message); | 407 return control_message_handler_.Accept(message); |
| 398 | 408 |
| 399 return incoming_receiver_->Accept(message); | 409 return incoming_receiver_->Accept(message); |
| 400 } | 410 } |
| 401 } | 411 } |
| 402 | 412 |
| 403 } // namespace mojo | 413 } // namespace mojo |
| OLD | NEW |