1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 <string> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "base/compiler_specific.h" 13 #include "net/base/upload_element_reader.h" 14 15 namespace net { 16 17 // An UploadElementReader implementation for bytes. 18 // |data| should outlive this class because this class does not take the 19 // ownership of the data. 20 class NET_EXPORT UploadBytesElementReader : public UploadElementReader { 21 public: 22 UploadBytesElementReader(const char* bytes, uint64 length); 23 virtual ~UploadBytesElementReader(); 24 bytes()25 const char* bytes() const { return bytes_; } length()26 uint64 length() const { return length_; } 27 28 // UploadElementReader overrides: 29 virtual const UploadBytesElementReader* AsBytesReader() const OVERRIDE; 30 virtual int Init(const CompletionCallback& callback) OVERRIDE; 31 virtual uint64 GetContentLength() const OVERRIDE; 32 virtual uint64 BytesRemaining() const OVERRIDE; 33 virtual bool IsInMemory() const OVERRIDE; 34 virtual int Read(IOBuffer* buf, 35 int buf_length, 36 const CompletionCallback& callback) OVERRIDE; 37 38 private: 39 const char* const bytes_; 40 const uint64 length_; 41 uint64 offset_; 42 43 DISALLOW_COPY_AND_ASSIGN(UploadBytesElementReader); 44 }; 45 46 // A subclass of UplodBytesElementReader which owns the data given as a vector. 47 class NET_EXPORT UploadOwnedBytesElementReader 48 : public UploadBytesElementReader { 49 public: 50 // |data| is cleared by this ctor. 51 explicit UploadOwnedBytesElementReader(std::vector<char>* data); 52 virtual ~UploadOwnedBytesElementReader(); 53 54 // Creates UploadOwnedBytesElementReader with a string. 55 static UploadOwnedBytesElementReader* CreateWithString( 56 const std::string& string); 57 58 private: 59 std::vector<char> data_; 60 61 DISALLOW_COPY_AND_ASSIGN(UploadOwnedBytesElementReader); 62 }; 63 64 } // namespace net 65 66 #endif // NET_BASE_UPLOAD_BYTES_ELEMENT_READER_H_ 67