blob: d0366fac3586caa0cdb494811e3ab8f0f113832a [file] [log] [blame]
ergf451f522015-10-17 00:26:001// 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
Avi Drissman2e88ac372015-12-21 18:14:578#include <stddef.h>
9
ergf451f522015-10-17 00:26:0010#include "base/macros.h"
11#include "base/memory/weak_ptr.h"
jam08c85fb2015-11-06 17:16:2912#include "mojo/common/mojo_common_export.h"
rockot85dce0862015-11-13 01:33:5913#include "mojo/public/cpp/system/core.h"
rockot8ae2de92016-05-01 04:34:0314#include "mojo/public/cpp/system/watcher.h"
ergf451f522015-10-17 00:26:0015
16namespace mojo {
17namespace common {
18
jam08c85fb2015-11-06 17:16:2919class MOJO_COMMON_EXPORT DataPipeDrainer {
ergf451f522015-10-17 00:26:0020 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();
ergf451f522015-10-17 00:26:0035 void WaitComplete(MojoResult result);
36
37 Client* client_;
38 mojo::ScopedDataPipeConsumerHandle source_;
rockot8ae2de92016-05-01 04:34:0339 mojo::Watcher handle_watcher_;
ergf451f522015-10-17 00:26:0040
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_