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