1// Copyright 2014 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_COMMON_DATA_PIPE_DRAINER_H_
6#define MOJO_COMMON_DATA_PIPE_DRAINER_H_
7
8#include <stddef.h>
9
10#include "base/macros.h"
11#include "base/memory/weak_ptr.h"
12#include "mojo/common/mojo_common_export.h"
13#include "mojo/public/cpp/system/core.h"
14#include "mojo/public/cpp/system/watcher.h"
15
16namespace mojo {
17namespace common {
18
19class MOJO_COMMON_EXPORT DataPipeDrainer {
20 public:
21  class Client {
22   public:
23    virtual void OnDataAvailable(const void* data, size_t num_bytes) = 0;
24    virtual void OnDataComplete() = 0;
25
26   protected:
27    virtual ~Client() {}
28  };
29
30  DataPipeDrainer(Client*, mojo::ScopedDataPipeConsumerHandle source);
31  ~DataPipeDrainer();
32
33 private:
34  void ReadData();
35  void WaitComplete(MojoResult result);
36
37  Client* client_;
38  mojo::ScopedDataPipeConsumerHandle source_;
39  mojo::Watcher handle_watcher_;
40
41  base::WeakPtrFactory<DataPipeDrainer> weak_factory_;
42
43  DISALLOW_COPY_AND_ASSIGN(DataPipeDrainer);
44};
45
46}  // namespace common
47}  // namespace mojo
48
49#endif  // MOJO_COMMON_DATA_PIPE_DRAINER_H_
50