|  | // Copyright 2018 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_STREAM_PIPE_H_ | 
|  | #define CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_STREAM_PIPE_H_ | 
|  |  | 
|  | #include "base/callback.h" | 
|  | #include "base/containers/queue.h" | 
|  | #include "base/memory/scoped_refptr.h" | 
|  | #include "content/browser/devtools/devtools_io_context.h" | 
|  | #include "mojo/public/cpp/system/data_pipe.h" | 
|  | #include "mojo/public/cpp/system/simple_watcher.h" | 
|  |  | 
|  | #include <memory> | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | class DevToolsStreamPipe : public DevToolsIOContext::Stream { | 
|  | public: | 
|  | static scoped_refptr<DevToolsStreamPipe> Create( | 
|  | DevToolsIOContext* context, | 
|  | mojo::ScopedDataPipeConsumerHandle pipe, | 
|  | bool is_binary); | 
|  | const std::string& handle() const { return handle_; } | 
|  |  | 
|  | private: | 
|  | struct ReadRequest; | 
|  |  | 
|  | DevToolsStreamPipe(DevToolsIOContext* context, | 
|  | mojo::ScopedDataPipeConsumerHandle pipe, | 
|  | bool is_binary); | 
|  | ~DevToolsStreamPipe() override; | 
|  |  | 
|  | bool SupportsSeek() const override; | 
|  | void Read(off_t position, size_t max_size, ReadCallback callback) override; | 
|  |  | 
|  | void OnPipeSignalled(MojoResult result, | 
|  | const mojo::HandleSignalsState& state); | 
|  | void DispatchResponse(); | 
|  | void DispatchEOFOrError(bool is_eof); | 
|  |  | 
|  | const std::string handle_; | 
|  | const mojo::ScopedDataPipeConsumerHandle pipe_; | 
|  | const bool is_binary_; | 
|  |  | 
|  | mojo::SimpleWatcher pipe_watcher_; | 
|  | base::queue<ReadRequest> read_requests_; | 
|  | std::string buffer_; | 
|  | Status last_status_; | 
|  | }; | 
|  |  | 
|  | }  // namespace content | 
|  |  | 
|  | #endif  // CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_STREAM_PIPE_H_ |