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

Unified Diff: chrome/browser/google_apis/gdata_wapi_operations.cc

Issue 12246002: Implement GetUploadStatusOperation on GData WAPI. (Closed) Base URL: http://git.chromium.org/chromium/src.git@b148632_create_base_operation
Patch Set: Rebase Created 7 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: chrome/browser/google_apis/gdata_wapi_operations.cc
diff --git a/chrome/browser/google_apis/gdata_wapi_operations.cc b/chrome/browser/google_apis/gdata_wapi_operations.cc
index 1c85b140778cb150507805a8d81ac9676b65a9f8..70459d00c2e79842d96a0cc38c3990ba138b749b 100644
--- a/chrome/browser/google_apis/gdata_wapi_operations.cc
+++ b/chrome/browser/google_apis/gdata_wapi_operations.cc
@@ -18,6 +18,8 @@
using content::BrowserThread;
using net::URLFetcher;
+namespace google_apis {
+
namespace {
// etag matching header.
@@ -34,9 +36,24 @@ std::string GenerateIfMatchHeader(const std::string& etag) {
return etag.empty() ? kIfMatchAllHeader : (kIfMatchHeaderPrefix + etag);
}
-} // namespace
+// Parses the |value| to ResourceEntry with error handling.
+// This is designed to be used for ResumeUploadOperation and
+// GetUploadStatusOperation.
+scoped_ptr<ResourceEntry> ParseResourceEntry(scoped_ptr<base::Value> value) {
+ scoped_ptr<ResourceEntry> entry;
+ if (value.get()) {
+ entry = ResourceEntry::ExtractAndParse(*value);
-namespace google_apis {
+ // Note: |value| may be NULL, in particular if the callback is for a
+ // failure.
+ if (!entry.get())
+ LOG(WARNING) << "Invalid entry received on upload.";
+ }
+
+ return entry.Pass();
+}
+
+} // namespace
//============================ Structs ===========================
@@ -604,19 +621,17 @@ std::vector<std::string> ResumeUploadOperation::GetExtraRequestHeaders() const {
// Content-Range: bytes <start_position>-<end_position>/<content_length>
// for example:
// Content-Range: bytes 7864320-8388607/13851821
- // Use * for unknown/streaming content length.
// The header takes inclusive range, so we adjust by "end_position - 1".
DCHECK_GE(start_position_, 0);
DCHECK_GT(end_position_, 0);
- DCHECK_GE(content_length_, -1);
+ DCHECK_GE(content_length_, 0);
std::vector<std::string> headers;
headers.push_back(
std::string(kUploadContentRange) +
base::Int64ToString(start_position_) + "-" +
base::Int64ToString(end_position_ - 1) + "/" +
- (content_length_ == -1 ? "*" :
- base::Int64ToString(content_length_)));
+ base::Int64ToString(content_length_));
return headers;
}
@@ -635,17 +650,47 @@ void ResumeUploadOperation::OnURLFetchUploadProgress(
void ResumeUploadOperation::OnRangeOperationComplete(
const UploadRangeResponse& response, scoped_ptr<base::Value> value) {
- scoped_ptr<ResourceEntry> entry;
- if (value.get()) {
- entry = ResourceEntry::ExtractAndParse(*value);
+ callback_.Run(response, ParseResourceEntry(value.Pass()));
+}
- // Note: |value| may be NULL, in particular if the callback is for a
- // failure.
- if (!entry.get())
- LOG(WARNING) << "Invalid entry received on upload.";
- }
+//========================== GetUploadStatusOperation ==========================
+
+GetUploadStatusOperation::GetUploadStatusOperation(
+ OperationRegistry* registry,
+ net::URLRequestContextGetter* url_request_context_getter,
+ const UploadRangeCallback& callback,
+ UploadMode upload_mode,
+ const base::FilePath& drive_file_path,
+ const GURL& upload_url,
+ int64 content_length)
+ : UploadRangeOperationBase(registry,
+ url_request_context_getter,
+ upload_mode,
+ drive_file_path,
+ upload_url),
+ callback_(callback),
+ content_length_(content_length) {}
- callback_.Run(response, entry.Pass());
+GetUploadStatusOperation::~GetUploadStatusOperation() {}
+
+std::vector<std::string>
+GetUploadStatusOperation::GetExtraRequestHeaders() const {
+ // The header looks like
+ // Content-Range: bytes */<content_length>
+ // for example:
+ // Content-Range: bytes */13851821
+ DCHECK_GE(content_length_, 0);
+
+ std::vector<std::string> headers;
+ headers.push_back(
+ std::string(kUploadContentRange) + "*/" +
+ base::Int64ToString(content_length_));
+ return headers;
+}
+
+void GetUploadStatusOperation::OnRangeOperationComplete(
+ const UploadRangeResponse& response, scoped_ptr<base::Value> value) {
+ callback_.Run(response, ParseResourceEntry(value.Pass()));
}
} // namespace google_apis
« no previous file with comments | « chrome/browser/google_apis/gdata_wapi_operations.h ('k') | chrome/browser/google_apis/gdata_wapi_operations_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698