web_socket_write_queue.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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_WRITE_QUEUE_H_ 6#define MOJO_SERVICES_PUBLIC_CPP_NETWORK_WEB_SOCKET_WRITE_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 13namespace mojo { 14 15// This class simplifies the handling of multiple Writes on a DataPipe. It 16// writes each chunk all at once (or waits until the pipe is ready before 17// writing), calling the callback when finished. Callbacks are owned by this 18// class, and are guaranteed not to be called after this class is destroyed. 19// See also: WebSocketReadQueue 20class WebSocketWriteQueue { 21 public: 22 WebSocketWriteQueue(DataPipeProducerHandle handle); 23 ~WebSocketWriteQueue(); 24 25 void Write(const char* data, 26 uint32_t num_bytes, 27 base::Callback<void(const char*)> callback); 28 29 private: 30 struct Operation; 31 32 MojoResult TryToWrite(); 33 void Wait(); 34 void OnHandleReady(MojoResult result); 35 36 DataPipeProducerHandle handle_; 37 common::HandleWatcher handle_watcher_; 38 ScopedVector<Operation> queue_; 39 bool is_waiting_; 40}; 41 42} // namespace mojo 43 44#endif // MOJO_SERVICES_PUBLIC_CPP_NETWORK_WEB_SOCKET_WRITE_QUEUE_H_ 45