15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef MOJO_SYSTEM_DATA_PIPE_CONSUMER_DISPATCHER_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define MOJO_SYSTEM_DATA_PIPE_CONSUMER_DISPATCHER_H_ 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/macros.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/ref_counted.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "mojo/system/dispatcher.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "mojo/system/system_impl_export.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace mojo { 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace system { 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class DataPipe; 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// This is the |Dispatcher| implementation for the consumer handle for data 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// pipes (created by the Mojo primitive |MojoCreateDataPipe()|). This class is 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// thread-safe. 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class MOJO_SYSTEM_IMPL_EXPORT DataPipeConsumerDispatcher : public Dispatcher { 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DataPipeConsumerDispatcher(); 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Must be called before any other methods. 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void Init(scoped_refptr<DataPipe> data_pipe); 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // |Dispatcher| public methods: 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual Type GetType() const OVERRIDE; 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~DataPipeConsumerDispatcher(); 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // |Dispatcher| protected methods: 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void CancelAllWaitersNoLock() OVERRIDE; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void CloseImplNoLock() OVERRIDE; 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual scoped_refptr<Dispatcher> 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateEquivalentDispatcherAndCloseImplNoLock() OVERRIDE; 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual MojoResult ReadDataImplNoLock(UserPointer<void> elements, 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) UserPointer<uint32_t> num_bytes, 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MojoReadDataFlags flags) OVERRIDE; 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual MojoResult BeginReadDataImplNoLock( 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) UserPointer<const void*> buffer, 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) UserPointer<uint32_t> buffer_num_bytes, 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MojoReadDataFlags flags) OVERRIDE; 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual MojoResult EndReadDataImplNoLock(uint32_t num_bytes_read) OVERRIDE; 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual HandleSignalsState GetHandleSignalsStateImplNoLock() const OVERRIDE; 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual MojoResult AddWaiterImplNoLock( 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Waiter* waiter, 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MojoHandleSignals signals, 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) uint32_t context, 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HandleSignalsState* signals_state) OVERRIDE; 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void RemoveWaiterImplNoLock( 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Waiter* waiter, 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HandleSignalsState* signals_state) OVERRIDE; 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool IsBusyNoLock() const OVERRIDE; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Protected by |lock()|: 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<DataPipe> data_pipe_; // This will be null if closed. 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DataPipeConsumerDispatcher); 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace system 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace mojo 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // MOJO_SYSTEM_DATA_PIPE_CONSUMER_DISPATCHER_H_ 68