1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef MOJO_SYSTEM_LOCAL_MESSAGE_PIPE_ENDPOINT_H_ 6#define MOJO_SYSTEM_LOCAL_MESSAGE_PIPE_ENDPOINT_H_ 7 8#include "base/compiler_specific.h" 9#include "base/macros.h" 10#include "mojo/system/handle_signals_state.h" 11#include "mojo/system/message_in_transit_queue.h" 12#include "mojo/system/message_pipe_endpoint.h" 13#include "mojo/system/system_impl_export.h" 14#include "mojo/system/waiter_list.h" 15 16namespace mojo { 17namespace system { 18 19class MOJO_SYSTEM_IMPL_EXPORT LocalMessagePipeEndpoint 20 : public MessagePipeEndpoint { 21 public: 22 LocalMessagePipeEndpoint(); 23 virtual ~LocalMessagePipeEndpoint(); 24 25 // |MessagePipeEndpoint| implementation: 26 virtual Type GetType() const OVERRIDE; 27 virtual bool OnPeerClose() OVERRIDE; 28 virtual void EnqueueMessage(scoped_ptr<MessageInTransit> message) OVERRIDE; 29 30 // There's a dispatcher for |LocalMessagePipeEndpoint|s, so we have to 31 // implement/override these: 32 virtual void Close() OVERRIDE; 33 virtual void CancelAllWaiters() OVERRIDE; 34 virtual MojoResult ReadMessage(UserPointer<void> bytes, 35 UserPointer<uint32_t> num_bytes, 36 DispatcherVector* dispatchers, 37 uint32_t* num_dispatchers, 38 MojoReadMessageFlags flags) OVERRIDE; 39 virtual HandleSignalsState GetHandleSignalsState() const OVERRIDE; 40 virtual MojoResult AddWaiter(Waiter* waiter, 41 MojoHandleSignals signals, 42 uint32_t context, 43 HandleSignalsState* signals_state) OVERRIDE; 44 virtual void RemoveWaiter(Waiter* waiter, 45 HandleSignalsState* signals_state) OVERRIDE; 46 47 // This is only to be used by |MessagePipe|: 48 MessageInTransitQueue* message_queue() { return &message_queue_; } 49 50 private: 51 bool is_open_; 52 bool is_peer_open_; 53 54 // Queue of incoming messages. 55 MessageInTransitQueue message_queue_; 56 WaiterList waiter_list_; 57 58 DISALLOW_COPY_AND_ASSIGN(LocalMessagePipeEndpoint); 59}; 60 61} // namespace system 62} // namespace mojo 63 64#endif // MOJO_SYSTEM_LOCAL_MESSAGE_PIPE_ENDPOINT_H_ 65