| Index: mojo/public/cpp/bindings/lib/router.cc
|
| diff --git a/mojo/public/cpp/bindings/lib/router.cc b/mojo/public/cpp/bindings/lib/router.cc
|
| index 5d5db54caa13981a0f96b1f9d0b12826b5963513..2c8036849cae5d4d0af8513a7f60897296002cbb 100644
|
| --- a/mojo/public/cpp/bindings/lib/router.cc
|
| +++ b/mojo/public/cpp/bindings/lib/router.cc
|
| @@ -13,6 +13,7 @@
|
| #include "base/logging.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "base/stl_util.h"
|
| +#include "mojo/public/cpp/bindings/lib/validation_util.h"
|
| #include "mojo/public/cpp/bindings/sync_call_restrictions.h"
|
|
|
| namespace mojo {
|
| @@ -118,7 +119,8 @@ bool Router::HandleIncomingMessageThunk::Accept(Message* message) {
|
| Router::Router(ScopedMessagePipeHandle message_pipe,
|
| FilterChain filters,
|
| bool expects_sync_requests,
|
| - scoped_refptr<base::SingleThreadTaskRunner> runner)
|
| + scoped_refptr<base::SingleThreadTaskRunner> runner,
|
| + int interface_version)
|
| : thunk_(this),
|
| filters_(std::move(filters)),
|
| connector_(std::move(message_pipe),
|
| @@ -129,6 +131,8 @@ Router::Router(ScopedMessagePipeHandle message_pipe,
|
| testing_mode_(false),
|
| pending_task_for_messages_(false),
|
| encountered_error_(false),
|
| + control_message_proxy_(this),
|
| + control_message_handler_(interface_version),
|
| weak_factory_(this) {
|
| filters_.SetSink(&thunk_);
|
| if (expects_sync_requests)
|
| @@ -253,12 +257,14 @@ bool Router::HandleMessageInternal(Message* message) {
|
| DCHECK(!encountered_error_);
|
|
|
| if (message->has_flag(Message::kFlagExpectsResponse)) {
|
| - if (!incoming_receiver_)
|
| - return false;
|
| -
|
| MessageReceiverWithStatus* responder = new ResponderThunk(
|
| weak_factory_.GetWeakPtr(), connector_.task_runner());
|
| - bool ok = incoming_receiver_->AcceptWithResponder(message, responder);
|
| + bool ok = false;
|
| + if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) {
|
| + ok = control_message_handler_.AcceptWithResponder(message, responder);
|
| + } else {
|
| + ok = incoming_receiver_->AcceptWithResponder(message, responder);
|
| + }
|
| if (!ok)
|
| delete responder;
|
| return ok;
|
| @@ -286,8 +292,8 @@ bool Router::HandleMessageInternal(Message* message) {
|
| async_responders_.erase(it);
|
| return responder->Accept(message);
|
| } else {
|
| - if (!incoming_receiver_)
|
| - return false;
|
| + if (mojo::internal::ControlMessageHandler::IsControlMessage(message))
|
| + return control_message_handler_.Accept(message);
|
|
|
| return incoming_receiver_->Accept(message);
|
| }
|
| @@ -313,6 +319,8 @@ void Router::OnConnectionError() {
|
| return;
|
| }
|
|
|
| + control_message_proxy_.OnConnectionError();
|
| +
|
| encountered_error_ = true;
|
|
|
| // The callbacks may hold on to resources. There is no need to keep them any
|
|
|