#ifndef COMPONENTS_CRONET_NATIVE_IO_BUFFER_WITH_CRONET_BUFFER_H_
#define COMPONENTS_CRONET_NATIVE_IO_BUFFER_WITH_CRONET_BUFFER_H_
#include <memory>
#include "components/cronet/native/generated/cronet.idl_c.h"
#include "net/base/io_buffer.h"
namespace cronet {
class IOBufferWithCronet_Buffer : public net::WrappedIOBuffer {
public:
explicit IOBufferWithCronet_Buffer(Cronet_BufferPtr cronet_buffer);
IOBufferWithCronet_Buffer(const IOBufferWithCronet_Buffer&) = delete;
IOBufferWithCronet_Buffer& operator=(const IOBufferWithCronet_Buffer&) =
delete;
Cronet_BufferPtr Release();
private:
~IOBufferWithCronet_Buffer() override;
std::unique_ptr<Cronet_Buffer> cronet_buffer_;
};
class Cronet_BufferWithIOBuffer {
public:
Cronet_BufferWithIOBuffer(scoped_refptr<net::IOBuffer> io_buffer,
size_t io_buffer_len);
Cronet_BufferWithIOBuffer(const Cronet_BufferWithIOBuffer&) = delete;
Cronet_BufferWithIOBuffer& operator=(const Cronet_BufferWithIOBuffer&) =
delete;
~Cronet_BufferWithIOBuffer();
const net::IOBuffer* io_buffer() const { return io_buffer_.get(); }
size_t io_buffer_len() const { return io_buffer_len_; }
Cronet_BufferPtr cronet_buffer() {
CHECK(io_buffer_->HasAtLeastOneRef());
return cronet_buffer_.get();
}
private:
scoped_refptr<net::IOBuffer> io_buffer_;
size_t io_buffer_len_;
std::unique_ptr<Cronet_Buffer> cronet_buffer_;
};
}
#endif