| Index: net/base/upload_data.h
|
| diff --git a/net/base/upload_data.h b/net/base/upload_data.h
|
| index 6f7216250a40c536a8cbdf1eba70c02d67fdb342..68ca26be3c9fb96290673fe4b5329ab15f9e5e5f 100644
|
| --- a/net/base/upload_data.h
|
| +++ b/net/base/upload_data.h
|
| @@ -19,12 +19,27 @@ namespace net {
|
|
|
| class FileStream;
|
|
|
| +// Interface implemented by callers who require callbacks when new chunks
|
| +// of data are added.
|
| +class ChunkCallback {
|
| + public:
|
| + // Invoked when a new data chunk was given for a chunked transfer upload.
|
| + virtual void OnChunkAvailable() = 0;
|
| +
|
| + protected:
|
| + virtual ~ChunkCallback() {}
|
| +};
|
| +
|
| class UploadData : public base::RefCounted<UploadData> {
|
| public:
|
| enum Type {
|
| TYPE_BYTES,
|
| TYPE_FILE,
|
| - TYPE_BLOB
|
| + TYPE_BLOB,
|
| +
|
| + // A block of bytes to be sent in chunked encoding immediately, without
|
| + // waiting for rest of the data.
|
| + TYPE_CHUNK,
|
| };
|
|
|
| class Element {
|
| @@ -72,6 +87,13 @@ class UploadData : public base::RefCounted<UploadData> {
|
| blob_url_ = blob_url;
|
| }
|
|
|
| + // Though similar to bytes, a chunk indicates that the element is sent via
|
| + // chunked transfer encoding and not buffered until the full upload data
|
| + // is available.
|
| + void SetToChunk(const char* bytes, int bytes_len);
|
| +
|
| + bool is_last_chunk() const { return is_last_chunk_; }
|
| +
|
| // Returns the byte-length of the element. For files that do not exist, 0
|
| // is returned. This is done for consistency with Mozilla.
|
| // Once called, this function will always return the same value.
|
| @@ -97,6 +119,7 @@ class UploadData : public base::RefCounted<UploadData> {
|
| uint64 file_range_length_;
|
| base::Time expected_file_modification_time_;
|
| GURL blob_url_;
|
| + bool is_last_chunk_;
|
| bool override_content_length_;
|
| bool content_length_computed_;
|
| uint64 content_length_;
|
| @@ -119,6 +142,18 @@ class UploadData : public base::RefCounted<UploadData> {
|
|
|
| void AppendBlob(const GURL& blob_url);
|
|
|
| + // Adds the given chunk of bytes to be sent immediately with chunked transfer
|
| + // encoding. Set bytes_len to zero for the last chunk.
|
| + void AppendChunk(const char* bytes, int bytes_len);
|
| +
|
| + // Sets the callback to be invoked when a new chunk is available to upload.
|
| + void set_chunk_callback(ChunkCallback* callback);
|
| +
|
| + // Initializes the object to send chunks of upload data over time rather
|
| + // than all at once.
|
| + void set_is_chunked(bool set) { is_chunked_ = set; }
|
| + bool is_chunked() const { return is_chunked_; }
|
| +
|
| // Returns the total size in bytes of the data to upload.
|
| uint64 GetContentLength();
|
|
|
| @@ -145,6 +180,8 @@ class UploadData : public base::RefCounted<UploadData> {
|
|
|
| std::vector<Element> elements_;
|
| int64 identifier_;
|
| + ChunkCallback* chunk_callback_;
|
| + bool is_chunked_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(UploadData);
|
| };
|
|
|