1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_BASE_UPLOAD_ELEMENT_READER_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_BASE_UPLOAD_ELEMENT_READER_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "net/base/completion_once_callback.h" 11*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker namespace net { 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker class IOBuffer; 16*6777b538SAndroid Build Coastguard Worker class UploadBytesElementReader; 17*6777b538SAndroid Build Coastguard Worker class UploadFileElementReader; 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker // An interface to read an upload data element. 20*6777b538SAndroid Build Coastguard Worker class NET_EXPORT UploadElementReader { 21*6777b538SAndroid Build Coastguard Worker public: 22*6777b538SAndroid Build Coastguard Worker UploadElementReader() = default; 23*6777b538SAndroid Build Coastguard Worker UploadElementReader(const UploadElementReader&) = delete; 24*6777b538SAndroid Build Coastguard Worker UploadElementReader& operator=(const UploadElementReader&) = delete; 25*6777b538SAndroid Build Coastguard Worker virtual ~UploadElementReader() = default; 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker // Returns this instance's pointer as UploadBytesElementReader when possible, 28*6777b538SAndroid Build Coastguard Worker // otherwise returns NULL. 29*6777b538SAndroid Build Coastguard Worker virtual const UploadBytesElementReader* AsBytesReader() const; 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker // Returns this instance's pointer as UploadFileElementReader when possible, 32*6777b538SAndroid Build Coastguard Worker // otherwise returns NULL. 33*6777b538SAndroid Build Coastguard Worker virtual const UploadFileElementReader* AsFileReader() const; 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker // This function must be called before calling any other method. It is not 36*6777b538SAndroid Build Coastguard Worker // valid to call any method (other than the destructor) if Init() fails. 37*6777b538SAndroid Build Coastguard Worker // This method can be called multiple times. Calling this results in resetting 38*6777b538SAndroid Build Coastguard Worker // the state (i.e. the stream is rewound), and any previously pending Init() 39*6777b538SAndroid Build Coastguard Worker // or Read() calls are aborted. 40*6777b538SAndroid Build Coastguard Worker // 41*6777b538SAndroid Build Coastguard Worker // Initializes the instance synchronously when possible, otherwise does 42*6777b538SAndroid Build Coastguard Worker // initialization aynschronously, returns ERR_IO_PENDING and runs callback. 43*6777b538SAndroid Build Coastguard Worker // Calling this method again after a Init() success results in resetting the 44*6777b538SAndroid Build Coastguard Worker // state. 45*6777b538SAndroid Build Coastguard Worker virtual int Init(CompletionOnceCallback callback) = 0; 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker // Returns the byte-length of the element. For files that do not exist, 0 48*6777b538SAndroid Build Coastguard Worker // is returned. This is done for consistency with Mozilla. 49*6777b538SAndroid Build Coastguard Worker virtual uint64_t GetContentLength() const = 0; 50*6777b538SAndroid Build Coastguard Worker 51*6777b538SAndroid Build Coastguard Worker // Returns the number of bytes remaining to read. 52*6777b538SAndroid Build Coastguard Worker virtual uint64_t BytesRemaining() const = 0; 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker // Returns true if the upload element is entirely in memory. 55*6777b538SAndroid Build Coastguard Worker // The default implementation returns false. 56*6777b538SAndroid Build Coastguard Worker virtual bool IsInMemory() const; 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker // Reads up to |buf_length| bytes synchronously and returns the number of 59*6777b538SAndroid Build Coastguard Worker // bytes read or error code when possible, otherwise, returns ERR_IO_PENDING 60*6777b538SAndroid Build Coastguard Worker // and runs |callback| with the result. |buf_length| must be greater than 0. 61*6777b538SAndroid Build Coastguard Worker virtual int Read(IOBuffer* buf, 62*6777b538SAndroid Build Coastguard Worker int buf_length, 63*6777b538SAndroid Build Coastguard Worker CompletionOnceCallback callback) = 0; 64*6777b538SAndroid Build Coastguard Worker }; 65*6777b538SAndroid Build Coastguard Worker 66*6777b538SAndroid Build Coastguard Worker } // namespace net 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker #endif // NET_BASE_UPLOAD_ELEMENT_READER_H_ 69