1 // Copyright 2012 The Chromium Authors 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 NET_BASE_UPLOAD_BYTES_ELEMENT_READER_H_ 6 #define NET_BASE_UPLOAD_BYTES_ELEMENT_READER_H_ 7 8 #include <stddef.h> 9 #include <stdint.h> 10 11 #include <string> 12 #include <vector> 13 14 #include "base/compiler_specific.h" 15 #include "base/containers/span.h" 16 #include "base/memory/raw_span.h" 17 #include "net/base/net_export.h" 18 #include "net/base/upload_element_reader.h" 19 20 namespace net { 21 22 // An UploadElementReader implementation for bytes. The caller owns |bytes|, 23 // and is responsible for ensuring it outlives the UploadBytesElementReader. 24 class NET_EXPORT UploadBytesElementReader : public UploadElementReader { 25 public: 26 explicit UploadBytesElementReader(base::span<const uint8_t> bytes); 27 UploadBytesElementReader(const UploadBytesElementReader&) = delete; 28 UploadBytesElementReader& operator=(const UploadBytesElementReader&) = delete; 29 ~UploadBytesElementReader() override; 30 bytes()31 base::span<const uint8_t> bytes() const { return bytes_; } 32 33 // UploadElementReader overrides: 34 const UploadBytesElementReader* AsBytesReader() const override; 35 int Init(CompletionOnceCallback callback) override; 36 uint64_t GetContentLength() const override; 37 uint64_t BytesRemaining() const override; 38 bool IsInMemory() const override; 39 int Read(IOBuffer* buf, 40 int buf_length, 41 CompletionOnceCallback callback) override; 42 43 private: 44 const base::raw_span<const uint8_t, DanglingUntriaged> bytes_; 45 size_t offset_ = 0; 46 }; 47 48 // A subclass of UplodBytesElementReader which owns the data given as a vector. 49 class NET_EXPORT UploadOwnedBytesElementReader 50 : public UploadBytesElementReader { 51 public: 52 // |data| is cleared by this ctor. 53 explicit UploadOwnedBytesElementReader(std::vector<char>* data); 54 UploadOwnedBytesElementReader(const UploadOwnedBytesElementReader&) = delete; 55 UploadOwnedBytesElementReader& operator=( 56 const UploadOwnedBytesElementReader&) = delete; 57 ~UploadOwnedBytesElementReader() override; 58 59 // Creates UploadOwnedBytesElementReader with a string. 60 static std::unique_ptr<UploadOwnedBytesElementReader> CreateWithString( 61 const std::string& string); 62 63 private: 64 std::vector<char> data_; 65 }; 66 67 } // namespace net 68 69 #endif // NET_BASE_UPLOAD_BYTES_ELEMENT_READER_H_ 70