Home | History | Annotate | Download | only in base
      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 
     25   const char* bytes() const { return bytes_; }
     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