| Index: mojo/public/bindings/lib/router.cc
|
| diff --git a/mojo/public/bindings/lib/router.cc b/mojo/public/bindings/lib/router.cc
|
| deleted file mode 100644
|
| index 90e0541f922494538caaedcee94f67f751c43446..0000000000000000000000000000000000000000
|
| --- a/mojo/public/bindings/lib/router.cc
|
| +++ /dev/null
|
| @@ -1,137 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "mojo/public/bindings/lib/router.h"
|
| -
|
| -namespace mojo {
|
| -namespace internal {
|
| -
|
| -// ----------------------------------------------------------------------------
|
| -
|
| -class ResponderThunk : public MessageReceiver {
|
| - public:
|
| - explicit ResponderThunk(const SharedData<Router*>& router)
|
| - : router_(router) {
|
| - }
|
| - virtual ~ResponderThunk() {
|
| - }
|
| -
|
| - // MessageReceiver implementation:
|
| - virtual bool Accept(Message* message) MOJO_OVERRIDE {
|
| - assert(message->has_flag(kMessageIsResponse));
|
| -
|
| - bool result = false;
|
| -
|
| - Router* router = router_.value();
|
| - if (router)
|
| - result = router->Accept(message);
|
| -
|
| - return result;
|
| - }
|
| -
|
| - virtual bool AcceptWithResponder(Message* message,
|
| - MessageReceiver* responder) MOJO_OVERRIDE {
|
| - assert(false); // not reached!
|
| - return false;
|
| - }
|
| -
|
| - private:
|
| - SharedData<Router*> router_;
|
| -};
|
| -
|
| -// ----------------------------------------------------------------------------
|
| -
|
| -Router::HandleIncomingMessageThunk::HandleIncomingMessageThunk(Router* router)
|
| - : router_(router) {
|
| -}
|
| -
|
| -Router::HandleIncomingMessageThunk::~HandleIncomingMessageThunk() {
|
| -}
|
| -
|
| -bool Router::HandleIncomingMessageThunk::Accept(Message* message) {
|
| - return router_->HandleIncomingMessage(message);
|
| -}
|
| -
|
| -bool Router::HandleIncomingMessageThunk::AcceptWithResponder(
|
| - Message* message,
|
| - MessageReceiver* responder) {
|
| - assert(false); // not reached!
|
| - return false;
|
| -}
|
| -
|
| -// ----------------------------------------------------------------------------
|
| -
|
| -Router::Router(ScopedMessagePipeHandle message_pipe, MojoAsyncWaiter* waiter)
|
| - : connector_(message_pipe.Pass(), waiter),
|
| - weak_self_(this),
|
| - incoming_receiver_(NULL),
|
| - thunk_(this),
|
| - next_request_id_(0) {
|
| - connector_.set_incoming_receiver(&thunk_);
|
| -}
|
| -
|
| -Router::~Router() {
|
| - weak_self_.set_value(NULL);
|
| -}
|
| -
|
| -bool Router::Accept(Message* message) {
|
| - assert(!message->has_flag(kMessageExpectsResponse));
|
| - return connector_.Accept(message);
|
| -}
|
| -
|
| -bool Router::AcceptWithResponder(Message* message,
|
| - MessageReceiver* responder) {
|
| - assert(message->has_flag(kMessageExpectsResponse));
|
| -
|
| - // Reserve 0 in case we want it to convey special meaning in the future.
|
| - uint64_t request_id = next_request_id_++;
|
| - if (request_id == 0)
|
| - request_id = next_request_id_++;
|
| -
|
| - message->set_request_id(request_id);
|
| - if (!connector_.Accept(message))
|
| - return false;
|
| -
|
| - // We assume ownership of |responder|.
|
| - responders_[request_id] = responder;
|
| - return true;
|
| -}
|
| -
|
| -bool Router::HandleIncomingMessage(Message* message) {
|
| - if (message->has_flag(kMessageExpectsResponse)) {
|
| - if (incoming_receiver_) {
|
| - MessageReceiver* responder = new ResponderThunk(weak_self_);
|
| - bool ok = incoming_receiver_->AcceptWithResponder(message, responder);
|
| - if (!ok)
|
| - delete responder;
|
| - return ok;
|
| - }
|
| -
|
| - // If we receive a request expecting a response when the client is not
|
| - // listening, then we have no choice but to tear down the pipe.
|
| - connector_.CloseMessagePipe();
|
| - } else if (message->has_flag(kMessageIsResponse)) {
|
| - uint64_t request_id = message->request_id();
|
| - ResponderMap::iterator it = responders_.find(request_id);
|
| - if (it == responders_.end()) {
|
| - assert(false);
|
| - return false;
|
| - }
|
| - MessageReceiver* responder = it->second;
|
| - responders_.erase(it);
|
| - responder->Accept(message);
|
| - delete responder;
|
| - } else {
|
| - if (incoming_receiver_)
|
| - return incoming_receiver_->Accept(message);
|
| - // OK to drop message on the floor.
|
| - }
|
| -
|
| - return false;
|
| -}
|
| -
|
| -// ----------------------------------------------------------------------------
|
| -
|
| -} // namespace internal
|
| -} // namespace mojo
|
|
|