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 13namespace mojo { 14namespace system { 15 16class 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. 21class 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