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_PRODUCER_DISPATCHER_H_ 6 #define MOJO_SYSTEM_DATA_PIPE_PRODUCER_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 producer handle for data 19 // pipes (created by the Mojo primitive |MojoCreateDataPipe()|). This class is 20 // thread-safe. 21 class MOJO_SYSTEM_IMPL_EXPORT DataPipeProducerDispatcher : public Dispatcher { 22 public: 23 DataPipeProducerDispatcher(); 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 ~DataPipeProducerDispatcher(); 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 WriteDataImplNoLock(UserPointer<const void> elements, 40 UserPointer<uint32_t> num_bytes, 41 MojoWriteDataFlags flags) OVERRIDE; 42 virtual MojoResult BeginWriteDataImplNoLock( 43 UserPointer<void*> buffer, 44 UserPointer<uint32_t> buffer_num_bytes, 45 MojoWriteDataFlags flags) OVERRIDE; 46 virtual MojoResult EndWriteDataImplNoLock( 47 uint32_t num_bytes_written) OVERRIDE; 48 virtual HandleSignalsState GetHandleSignalsStateImplNoLock() const OVERRIDE; 49 virtual MojoResult AddWaiterImplNoLock( 50 Waiter* waiter, 51 MojoHandleSignals signals, 52 uint32_t context, 53 HandleSignalsState* signals_state) OVERRIDE; 54 virtual void RemoveWaiterImplNoLock( 55 Waiter* waiter, 56 HandleSignalsState* signals_state) OVERRIDE; 57 virtual bool IsBusyNoLock() const OVERRIDE; 58 59 // Protected by |lock()|: 60 scoped_refptr<DataPipe> data_pipe_; // This will be null if closed. 61 62 DISALLOW_COPY_AND_ASSIGN(DataPipeProducerDispatcher); 63 }; 64 65 } // namespace system 66 } // namespace mojo 67 68 #endif // MOJO_SYSTEM_DATA_PIPE_PRODUCER_DISPATCHER_H_ 69