Home | History | Annotate | Download | only in network
      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_SERVICES_PUBLIC_CPP_NETWORK_WEB_SOCKET_READ_QUEUE_H_
      6 #define MOJO_SERVICES_PUBLIC_CPP_NETWORK_WEB_SOCKET_READ_QUEUE_H_
      7 
      8 #include "base/callback.h"
      9 #include "base/memory/scoped_vector.h"
     10 #include "mojo/common/handle_watcher.h"
     11 #include "mojo/public/cpp/system/data_pipe.h"
     12 
     13 namespace mojo {
     14 
     15 // This class simplifies the handling of multiple Reads on a DataPipe. It reads
     16 // the data in the expected chunk size, calling the callback once a full chunk
     17 // is ready. Callbacks are owned by this class, and are guaranteed not to be
     18 // called after this class is destroyed.
     19 // See also: WebSocketWriteQueue
     20 class WebSocketReadQueue {
     21  public:
     22   WebSocketReadQueue(DataPipeConsumerHandle handle);
     23   ~WebSocketReadQueue();
     24 
     25   void Read(uint32_t num_bytes, base::Callback<void(const char*)> callback);
     26 
     27  private:
     28   struct Operation;
     29 
     30   void TryToRead();
     31   void Wait();
     32   void OnHandleReady(MojoResult result);
     33 
     34   DataPipeConsumerHandle handle_;
     35   common::HandleWatcher handle_watcher_;
     36   ScopedVector<Operation> queue_;
     37   bool is_waiting_;
     38 };
     39 
     40 }  // namespace mojo
     41 
     42 #endif  // MOJO_SERVICES_PUBLIC_CPP_NETWORK_WEB_SOCKET_READ_QUEUE_H_
     43