Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / mojo / edk / system / data_pipe_producer_dispatcher.h
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_EDK_SYSTEM_DATA_PIPE_PRODUCER_DISPATCHER_H_
6 #define MOJO_EDK_SYSTEM_DATA_PIPE_PRODUCER_DISPATCHER_H_
7
8 #include "base/macros.h"
9 #include "base/memory/ref_counted.h"
10 #include "mojo/edk/system/dispatcher.h"
11 #include "mojo/edk/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   Type GetType() const override;
30
31  private:
32   ~DataPipeProducerDispatcher() override;
33
34   // |Dispatcher| protected methods:
35   void CancelAllWaitersNoLock() override;
36   void CloseImplNoLock() override;
37   scoped_refptr<Dispatcher> CreateEquivalentDispatcherAndCloseImplNoLock()
38       override;
39   MojoResult WriteDataImplNoLock(UserPointer<const void> elements,
40                                  UserPointer<uint32_t> num_bytes,
41                                  MojoWriteDataFlags flags) override;
42   MojoResult BeginWriteDataImplNoLock(UserPointer<void*> buffer,
43                                       UserPointer<uint32_t> buffer_num_bytes,
44                                       MojoWriteDataFlags flags) override;
45   MojoResult EndWriteDataImplNoLock(uint32_t num_bytes_written) override;
46   HandleSignalsState GetHandleSignalsStateImplNoLock() const override;
47   MojoResult AddWaiterImplNoLock(Waiter* waiter,
48                                  MojoHandleSignals signals,
49                                  uint32_t context,
50                                  HandleSignalsState* signals_state) override;
51   void RemoveWaiterImplNoLock(Waiter* waiter,
52                               HandleSignalsState* signals_state) override;
53   bool IsBusyNoLock() const override;
54
55   // Protected by |lock()|:
56   scoped_refptr<DataPipe> data_pipe_;  // This will be null if closed.
57
58   DISALLOW_COPY_AND_ASSIGN(DataPipeProducerDispatcher);
59 };
60
61 }  // namespace system
62 }  // namespace mojo
63
64 #endif  // MOJO_EDK_SYSTEM_DATA_PIPE_PRODUCER_DISPATCHER_H_