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(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|: message_queue()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