Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Unified Diff: net/base/upload_data.h

Issue 6134003: Prototype of chunked transfer encoded POST. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/base/upload_data.h
diff --git a/net/base/upload_data.h b/net/base/upload_data.h
index 6f7216250a40c536a8cbdf1eba70c02d67fdb342..b23614af1f7ca6a9ae2ecc59f7ebae26c53f19f3 100644
--- a/net/base/upload_data.h
+++ b/net/base/upload_data.h
@@ -13,6 +13,7 @@
#include "base/gtest_prod_util.h"
#include "base/ref_counted.h"
#include "googleurl/src/gurl.h"
+#include "net/base/completion_callback.h"
vandebo (ex-Chrome) 2011/01/18 21:51:17 This header isn't needed.
#include "base/time.h"
namespace net {
@@ -24,7 +25,22 @@ class UploadData : public base::RefCounted<UploadData> {
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,
+ };
+
+ // Interface implemented by callers who require callbacks when new chunks
+ // of data are received.
wtc 2011/01/20 00:29:47 Nit: received => added Make the same change to up
+ class ChunkCallback {
willchan no longer on Chromium 2011/01/20 08:51:04 I don't understand this. Why don't you just typede
Satish 2011/01/20 18:02:36 I used a callback initially and was suggested an i
vandebo (ex-Chrome) 2011/01/21 18:08:41 Will implied that using Callback0::Type would woul
willchan no longer on Chromium 2011/01/21 18:16:19 Callback0::Type by itself isn't safer. But ScopedC
+ public:
+ // Invoked when a new data chunk was given for a chunked transfer upload.
+ virtual void OnChunkAvailable() = 0;
+
+ protected:
+ virtual ~ChunkCallback() {}
};
class Element {
@@ -72,6 +88,13 @@ class UploadData : public base::RefCounted<UploadData> {
blob_url_ = blob_url;
}
+ // Though similar to bytes, a chunk indicates that the stream is sent via
wtc 2011/01/20 00:29:47 Nit: stream => element
+ // chunked transfer encoding and not buffered until the full upload data
+ // is available.
+ void SetToChunk(const char* bytes, int bytes_len);
+
+ void SetToEndOfChunksMarker();
+
// 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.
@@ -119,6 +142,16 @@ class UploadData : public base::RefCounted<UploadData> {
void AppendBlob(const GURL& blob_url);
+ 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);
+
+ // Iniitalizes the object to receive chunks of upload data over time rather
wtc 2011/01/20 00:29:47 Nit: receive => send ?
+ // 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 +178,8 @@ class UploadData : public base::RefCounted<UploadData> {
std::vector<Element> elements_;
int64 identifier_;
+ ChunkCallback* chunk_callback_;
+ bool is_chunked_;
DISALLOW_COPY_AND_ASSIGN(UploadData);
};

Powered by Google App Engine
This is Rietveld 408576698