blob: b931eaec11644f24101e21ac32d9841d041b49a9 [file] [log] [blame]
// 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_