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

Unified Diff: net/base/upload_data.h

Issue 9321003: net: Make UploadData::GetContentLength() asynchronous. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 8 years, 10 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 31c1958a6966c9e321f554754819b54f0c98726e..43d209b31dd141bd60697bfec3973761b19d84fb 100644
--- a/net/base/upload_data.h
+++ b/net/base/upload_data.h
@@ -9,6 +9,7 @@
#include <vector>
#include "base/basictypes.h"
+#include "base/callback_forward.h"
#include "base/file_path.h"
#include "base/gtest_prod_util.h"
#include "base/memory/ref_counted.h"
@@ -107,7 +108,6 @@ class NET_EXPORT UploadData : public base::RefCounted<UploadData> {
// 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.
uint64 GetContentLength();
// Returns a FileStream opened for reading for this element, positioned at
@@ -163,8 +163,26 @@ class NET_EXPORT UploadData : public base::RefCounted<UploadData> {
void set_is_chunked(bool set) { is_chunked_ = set; }
bool is_chunked() const { return is_chunked_; }
+ // Gets the total size in bytes of the data to upload. Computing the
+ // content length can result in performing file IO hence the operation is
+ // done asynchronously. Runs the callback with the content length once the
+ // computation is done.
+ typedef base::Callback<void(uint64 content_length)> ContentLengthCallback;
+ void GetContentLength(const ContentLengthCallback& callback);
+
+ // Returns the total size in bytes of the data to upload, for testing.
+ // This version may perform file IO on the current thread. This function
+ // will fail if called on a thread where file IO is prohibited. Usually
+ // used for testing, but Chrome Frame also uses this version.
+ uint64 GetContentLengthSync();
+
// Returns the total size in bytes of the data to upload.
- uint64 GetContentLength();
+ // This version may perform file IO on the current thread, but
+ // ThreadRestrictions::AllowIO is placed so this function won't crash even
+ // if it's called on a thread where file IO is prohibited.
+ //
+ // TODO(satorux): Remove this once clients are gone.
+ uint64 GetContentLengthSyncHack();
// Returns true if the upload data is entirely in memory (i.e. the
// upload data is not chunked, and all elemnts are of TYPE_BYTES).
@@ -187,6 +205,9 @@ class NET_EXPORT UploadData : public base::RefCounted<UploadData> {
int64 identifier() const { return identifier_; }
private:
+ // Helper function for GetContentLength().
+ void DoGetContentLength(uint64* content_length);
+
friend class base::RefCounted<UploadData>;
~UploadData();

Powered by Google App Engine
This is Rietveld 408576698