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 16 namespace mojo { 17 namespace system { 18 19 class 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(void* bytes, 35 uint32_t* num_bytes, 36 DispatcherVector* dispatchers, 37 uint32_t* num_dispatchers, 38 MojoReadMessageFlags flags) OVERRIDE; 39 virtual MojoResult AddWaiter(Waiter* waiter, 40 MojoHandleSignals signals, 41 uint32_t context) OVERRIDE; 42 virtual void RemoveWaiter(Waiter* waiter) OVERRIDE; 43 44 // This is only to be used by |ProxyMessagePipeEndpoint|: 45 MessageInTransitQueue* message_queue() { return &message_queue_; } 46 47 private: 48 HandleSignalsState GetHandleSignalsState(); 49 50 bool is_open_; 51 bool is_peer_open_; 52 53 // Queue of incoming messages. 54 MessageInTransitQueue message_queue_; 55 WaiterList waiter_list_; 56 57 DISALLOW_COPY_AND_ASSIGN(LocalMessagePipeEndpoint); 58 }; 59 60 } // namespace system 61 } // namespace mojo 62 63 #endif // MOJO_SYSTEM_LOCAL_MESSAGE_PIPE_ENDPOINT_H_ 64