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_DATA_PIPE_CONSUMER_DISPATCHER_H_ 6 #define MOJO_SYSTEM_DATA_PIPE_CONSUMER_DISPATCHER_H_ 7 8 #include "base/macros.h" 9 #include "base/memory/ref_counted.h" 10 #include "mojo/system/dispatcher.h" 11 #include "mojo/system/system_impl_export.h" 12 13 namespace mojo { 14 namespace system { 15 16 class DataPipe; 17 18 // This is the |Dispatcher| implementation for the consumer handle for data 19 // pipes (created by the Mojo primitive |MojoCreateDataPipe()|). This class is 20 // thread-safe. 21 class MOJO_SYSTEM_IMPL_EXPORT DataPipeConsumerDispatcher : public Dispatcher { 22 public: 23 DataPipeConsumerDispatcher(); 24 25 // Must be called before any other methods. 26 void Init(scoped_refptr<DataPipe> data_pipe); 27 28 // |Dispatcher| public methods: 29 virtual Type GetType() const OVERRIDE; 30 31 private: 32 virtual ~DataPipeConsumerDispatcher(); 33 34 // |Dispatcher| protected methods: 35 virtual void CancelAllWaitersNoLock() OVERRIDE; 36 virtual void CloseImplNoLock() OVERRIDE; 37 virtual scoped_refptr<Dispatcher> 38 CreateEquivalentDispatcherAndCloseImplNoLock() OVERRIDE; 39 virtual MojoResult ReadDataImplNoLock(UserPointer<void> elements, 40 UserPointer<uint32_t> num_bytes, 41 MojoReadDataFlags flags) OVERRIDE; 42 virtual MojoResult BeginReadDataImplNoLock( 43 UserPointer<const void*> buffer, 44 UserPointer<uint32_t> buffer_num_bytes, 45 MojoReadDataFlags flags) OVERRIDE; 46 virtual MojoResult EndReadDataImplNoLock(uint32_t num_bytes_read) OVERRIDE; 47 virtual HandleSignalsState GetHandleSignalsStateImplNoLock() const OVERRIDE; 48 virtual MojoResult AddWaiterImplNoLock( 49 Waiter* waiter, 50 MojoHandleSignals signals, 51 uint32_t context, 52 HandleSignalsState* signals_state) OVERRIDE; 53 virtual void RemoveWaiterImplNoLock( 54 Waiter* waiter, 55 HandleSignalsState* signals_state) OVERRIDE; 56 virtual bool IsBusyNoLock() const OVERRIDE; 57 58 // Protected by |lock()|: 59 scoped_refptr<DataPipe> data_pipe_; // This will be null if closed. 60 61 DISALLOW_COPY_AND_ASSIGN(DataPipeConsumerDispatcher); 62 }; 63 64 } // namespace system 65 } // namespace mojo 66 67 #endif // MOJO_SYSTEM_DATA_PIPE_CONSUMER_DISPATCHER_H_ 68