| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "net/base/upload_bytes_element_reader.h" |
| |
| #include "base/check_op.h" |
| #include "base/numerics/safe_conversions.h" |
| #include "net/base/io_buffer.h" |
| #include "net/base/net_errors.h" |
| |
| namespace net { |
| |
| UploadBytesElementReader::UploadBytesElementReader( |
| base::span<const uint8_t> bytes) |
| : bytes_(bytes) {} |
| |
| UploadBytesElementReader::~UploadBytesElementReader() = default; |
| |
| int UploadBytesElementReader::Init(CompletionOnceCallback callback) { |
| offset_ = 0; |
| return OK; |
| } |
| |
| uint64_t UploadBytesElementReader::GetContentLength() const { |
| return bytes_.size(); |
| } |
| |
| uint64_t UploadBytesElementReader::BytesRemaining() const { |
| return bytes_.size() - offset_; |
| } |
| |
| bool UploadBytesElementReader::IsInMemory() const { |
| return true; |
| } |
| |
| int UploadBytesElementReader::Read(IOBuffer* buf, |
| int buf_length, |
| CompletionOnceCallback callback) { |
| base::span<const uint8_t> bytes_to_read = |
| bytes_.subspan(offset_, std::min(static_cast<size_t>(BytesRemaining()), |
| base::checked_cast<size_t>(buf_length))); |
| if (!bytes_to_read.empty()) { |
| buf->span().copy_prefix_from(bytes_to_read); |
| } |
| |
| offset_ += bytes_to_read.size(); |
| return bytes_to_read.size(); |
| } |
| |
| UploadOwnedBytesElementReader::UploadOwnedBytesElementReader( |
| std::vector<char>* data) |
| : UploadBytesElementReader(base::as_byte_span(*data)) { |
| data_.swap(*data); |
| } |
| |
| UploadOwnedBytesElementReader::~UploadOwnedBytesElementReader() = default; |
| |
| std::unique_ptr<UploadOwnedBytesElementReader> |
| UploadOwnedBytesElementReader::CreateWithString(const std::string& string) { |
| std::vector<char> data(string.begin(), string.end()); |
| return std::make_unique<UploadOwnedBytesElementReader>(&data); |
| } |
| |
| } // namespace net |