Home | History | Annotate | Download | only in common
      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 
     16 namespace mojo {
     17 namespace common {
     18 
     19 class 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