| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/google_apis/gdata_operations.h" | 5 #include "chrome/browser/google_apis/gdata_operations.h" |
| 6 | 6 |
| 7 #include "base/string_number_conversions.h" | 7 #include "base/string_number_conversions.h" |
| 8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
| 9 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "chrome/browser/google_apis/gdata_util.h" | 10 #include "chrome/browser/google_apis/gdata_util.h" |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 | 171 |
| 172 ResumeUploadResponse::~ResumeUploadResponse() { | 172 ResumeUploadResponse::~ResumeUploadResponse() { |
| 173 } | 173 } |
| 174 | 174 |
| 175 InitiateUploadParams::InitiateUploadParams( | 175 InitiateUploadParams::InitiateUploadParams( |
| 176 UploadMode upload_mode, | 176 UploadMode upload_mode, |
| 177 const std::string& title, | 177 const std::string& title, |
| 178 const std::string& content_type, | 178 const std::string& content_type, |
| 179 int64 content_length, | 179 int64 content_length, |
| 180 const GURL& upload_location, | 180 const GURL& upload_location, |
| 181 const FilePath& virtual_path) | 181 const FilePath& virtual_path, |
| 182 const std::string& etag) |
| 182 : upload_mode(upload_mode), | 183 : upload_mode(upload_mode), |
| 183 title(title), | 184 title(title), |
| 184 content_type(content_type), | 185 content_type(content_type), |
| 185 content_length(content_length), | 186 content_length(content_length), |
| 186 upload_location(upload_location), | 187 upload_location(upload_location), |
| 187 virtual_path(virtual_path) { | 188 virtual_path(virtual_path), |
| 189 etag(etag) { |
| 190 DCHECK(upload_mode == UPLOAD_NEW_FILE || upload_mode == UPLOAD_EXISTING_FILE); |
| 191 DCHECK(upload_mode != UPLOAD_NEW_FILE || (!title.empty() && etag.empty())); |
| 192 DCHECK(upload_mode != UPLOAD_EXISTING_FILE || title.empty()); |
| 188 } | 193 } |
| 189 | 194 |
| 190 InitiateUploadParams::~InitiateUploadParams() { | 195 InitiateUploadParams::~InitiateUploadParams() { |
| 191 } | 196 } |
| 192 | 197 |
| 193 ResumeUploadParams::ResumeUploadParams( | 198 ResumeUploadParams::ResumeUploadParams( |
| 194 UploadMode upload_mode, | 199 UploadMode upload_mode, |
| 195 int64 start_range, | 200 int64 start_range, |
| 196 int64 end_range, | 201 int64 end_range, |
| 197 int64 content_length, | 202 int64 content_length, |
| 198 const std::string& content_type, | 203 const std::string& content_type, |
| 199 scoped_refptr<net::IOBuffer> buf, | 204 scoped_refptr<net::IOBuffer> buf, |
| 200 const GURL& upload_location, | 205 const GURL& upload_location, |
| 201 const FilePath& virtual_path) : upload_mode(upload_mode), | 206 const FilePath& virtual_path, |
| 202 start_range(start_range), | 207 const std::string& etag) |
| 203 end_range(end_range), | 208 : upload_mode(upload_mode), |
| 204 content_length(content_length), | 209 start_range(start_range), |
| 205 content_type(content_type), | 210 end_range(end_range), |
| 206 buf(buf), | 211 content_length(content_length), |
| 207 upload_location(upload_location), | 212 content_type(content_type), |
| 208 virtual_path(virtual_path) { | 213 buf(buf), |
| 214 upload_location(upload_location), |
| 215 virtual_path(virtual_path), |
| 216 etag(etag) { |
| 209 } | 217 } |
| 210 | 218 |
| 211 ResumeUploadParams::~ResumeUploadParams() { | 219 ResumeUploadParams::~ResumeUploadParams() { |
| 212 } | 220 } |
| 213 | 221 |
| 214 //============================ GetDocumentsOperation =========================== | 222 //============================ GetDocumentsOperation =========================== |
| 215 | 223 |
| 216 GetDocumentsOperation::GetDocumentsOperation( | 224 GetDocumentsOperation::GetDocumentsOperation( |
| 217 OperationRegistry* registry, | 225 OperationRegistry* registry, |
| 218 const GURL& url, | 226 const GURL& url, |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 285 } | 293 } |
| 286 | 294 |
| 287 //============================ DownloadFileOperation =========================== | 295 //============================ DownloadFileOperation =========================== |
| 288 | 296 |
| 289 DownloadFileOperation::DownloadFileOperation( | 297 DownloadFileOperation::DownloadFileOperation( |
| 290 OperationRegistry* registry, | 298 OperationRegistry* registry, |
| 291 const DownloadActionCallback& download_action_callback, | 299 const DownloadActionCallback& download_action_callback, |
| 292 const GetContentCallback& get_content_callback, | 300 const GetContentCallback& get_content_callback, |
| 293 const GURL& document_url, | 301 const GURL& document_url, |
| 294 const FilePath& virtual_path, | 302 const FilePath& virtual_path, |
| 295 const FilePath& output_file_path) | 303 const FilePath& output_file_path, |
| 304 const std::string& etag) |
| 296 : UrlFetchOperationBase(registry, | 305 : UrlFetchOperationBase(registry, |
| 297 OPERATION_DOWNLOAD, | 306 OPERATION_DOWNLOAD, |
| 298 virtual_path), | 307 virtual_path), |
| 299 download_action_callback_(download_action_callback), | 308 download_action_callback_(download_action_callback), |
| 300 get_content_callback_(get_content_callback), | 309 get_content_callback_(get_content_callback), |
| 301 document_url_(document_url) { | 310 document_url_(document_url), |
| 311 etag_(etag) { |
| 302 // Make sure we download the content into a temp file. | 312 // Make sure we download the content into a temp file. |
| 303 if (output_file_path.empty()) | 313 if (output_file_path.empty()) |
| 304 save_temp_file_ = true; | 314 save_temp_file_ = true; |
| 305 else | 315 else |
| 306 output_file_path_ = output_file_path; | 316 output_file_path_ = output_file_path; |
| 307 } | 317 } |
| 308 | 318 |
| 309 DownloadFileOperation::~DownloadFileOperation() {} | 319 DownloadFileOperation::~DownloadFileOperation() {} |
| 310 | 320 |
| 311 // Overridden from UrlFetchOperationBase. | 321 // Overridden from UrlFetchOperationBase. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 if (!download_action_callback_.is_null()) | 354 if (!download_action_callback_.is_null()) |
| 345 download_action_callback_.Run(code, document_url_, temp_file); | 355 download_action_callback_.Run(code, document_url_, temp_file); |
| 346 OnProcessURLFetchResultsComplete(code == HTTP_SUCCESS); | 356 OnProcessURLFetchResultsComplete(code == HTTP_SUCCESS); |
| 347 } | 357 } |
| 348 | 358 |
| 349 void DownloadFileOperation::RunCallbackOnPrematureFailure(GDataErrorCode code) { | 359 void DownloadFileOperation::RunCallbackOnPrematureFailure(GDataErrorCode code) { |
| 350 if (!download_action_callback_.is_null()) | 360 if (!download_action_callback_.is_null()) |
| 351 download_action_callback_.Run(code, document_url_, FilePath()); | 361 download_action_callback_.Run(code, document_url_, FilePath()); |
| 352 } | 362 } |
| 353 | 363 |
| 364 std::vector<std::string> DownloadFileOperation::GetExtraRequestHeaders() const { |
| 365 std::vector<std::string> headers; |
| 366 if (!etag_.empty()) |
| 367 headers.push_back(base::StringPrintf(kIfMatchHeaderFormat, etag_.c_str())); |
| 368 return headers; |
| 369 } |
| 370 |
| 354 //=========================== DeleteDocumentOperation ========================== | 371 //=========================== DeleteDocumentOperation ========================== |
| 355 | 372 |
| 356 DeleteDocumentOperation::DeleteDocumentOperation( | 373 DeleteDocumentOperation::DeleteDocumentOperation( |
| 357 OperationRegistry* registry, | 374 OperationRegistry* registry, |
| 358 const EntryActionCallback& callback, | 375 const EntryActionCallback& callback, |
| 359 const GURL& document_url) | 376 const GURL& document_url, |
| 360 : EntryActionOperation(registry, callback, document_url) { | 377 const std::string& etag) |
| 378 : EntryActionOperation(registry, callback, document_url), |
| 379 etag_(etag) { |
| 361 } | 380 } |
| 362 | 381 |
| 363 DeleteDocumentOperation::~DeleteDocumentOperation() {} | 382 DeleteDocumentOperation::~DeleteDocumentOperation() {} |
| 364 | 383 |
| 365 GURL DeleteDocumentOperation::GetURL() const { | 384 GURL DeleteDocumentOperation::GetURL() const { |
| 366 return AddStandardUrlParams(document_url()); | 385 return AddStandardUrlParams(document_url()); |
| 367 } | 386 } |
| 368 | 387 |
| 369 URLFetcher::RequestType DeleteDocumentOperation::GetRequestType() const { | 388 URLFetcher::RequestType DeleteDocumentOperation::GetRequestType() const { |
| 370 return URLFetcher::DELETE_REQUEST; | 389 return URLFetcher::DELETE_REQUEST; |
| 371 } | 390 } |
| 372 | 391 |
| 373 std::vector<std::string> | 392 std::vector<std::string> |
| 374 DeleteDocumentOperation::GetExtraRequestHeaders() const { | 393 DeleteDocumentOperation::GetExtraRequestHeaders() const { |
| 375 std::vector<std::string> headers; | 394 std::vector<std::string> headers; |
| 376 headers.push_back(kIfMatchAllHeader); | 395 if (etag_.empty()) |
| 396 headers.push_back(kIfMatchAllHeader); |
| 397 else |
| 398 headers.push_back(base::StringPrintf(kIfMatchHeaderFormat, etag_.c_str())); |
| 377 return headers; | 399 return headers; |
| 378 } | 400 } |
| 379 | 401 |
| 380 //========================== CreateDirectoryOperation ========================== | 402 //========================== CreateDirectoryOperation ========================== |
| 381 | 403 |
| 382 CreateDirectoryOperation::CreateDirectoryOperation( | 404 CreateDirectoryOperation::CreateDirectoryOperation( |
| 383 OperationRegistry* registry, | 405 OperationRegistry* registry, |
| 384 const GetDataCallback& callback, | 406 const GetDataCallback& callback, |
| 385 const GURL& parent_content_url, | 407 const GURL& parent_content_url, |
| 386 const FilePath::StringType& directory_name) | 408 const FilePath::StringType& directory_name) |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 746 | 768 |
| 747 std::vector<std::string> | 769 std::vector<std::string> |
| 748 InitiateUploadOperation::GetExtraRequestHeaders() const { | 770 InitiateUploadOperation::GetExtraRequestHeaders() const { |
| 749 std::vector<std::string> headers; | 771 std::vector<std::string> headers; |
| 750 if (!params_.content_type.empty()) | 772 if (!params_.content_type.empty()) |
| 751 headers.push_back(kUploadContentType + params_.content_type); | 773 headers.push_back(kUploadContentType + params_.content_type); |
| 752 | 774 |
| 753 headers.push_back( | 775 headers.push_back( |
| 754 kUploadContentLength + base::Int64ToString(params_.content_length)); | 776 kUploadContentLength + base::Int64ToString(params_.content_length)); |
| 755 | 777 |
| 756 if (params_.upload_mode == UPLOAD_EXISTING_FILE) | 778 if (params_.upload_mode == UPLOAD_EXISTING_FILE) { |
| 757 headers.push_back("If-Match: *"); | 779 if (params_.etag.empty()) { |
| 780 headers.push_back(kIfMatchAllHeader); |
| 781 } else { |
| 782 headers.push_back( |
| 783 base::StringPrintf(kIfMatchHeaderFormat, params_.etag.c_str())); |
| 784 } |
| 785 } |
| 758 | 786 |
| 759 return headers; | 787 return headers; |
| 760 } | 788 } |
| 761 | 789 |
| 762 bool InitiateUploadOperation::GetContentData(std::string* upload_content_type, | 790 bool InitiateUploadOperation::GetContentData(std::string* upload_content_type, |
| 763 std::string* upload_content) { | 791 std::string* upload_content) { |
| 764 if (params_.upload_mode == UPLOAD_EXISTING_FILE) { | 792 if (params_.upload_mode == UPLOAD_EXISTING_FILE) { |
| 765 // When uploading an existing file, the body is empty as we don't modify | 793 // When uploading an existing file, the body is empty as we don't modify |
| 766 // the metadata. | 794 // the metadata. |
| 767 *upload_content = ""; | 795 *upload_content = ""; |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 888 scoped_ptr<DocumentEntry> entry; | 916 scoped_ptr<DocumentEntry> entry; |
| 889 if (!callback_.is_null()) | 917 if (!callback_.is_null()) |
| 890 callback_.Run(ResumeUploadResponse(code, 0, 0), entry.Pass()); | 918 callback_.Run(ResumeUploadResponse(code, 0, 0), entry.Pass()); |
| 891 } | 919 } |
| 892 | 920 |
| 893 URLFetcher::RequestType ResumeUploadOperation::GetRequestType() const { | 921 URLFetcher::RequestType ResumeUploadOperation::GetRequestType() const { |
| 894 return URLFetcher::PUT; | 922 return URLFetcher::PUT; |
| 895 } | 923 } |
| 896 | 924 |
| 897 std::vector<std::string> ResumeUploadOperation::GetExtraRequestHeaders() const { | 925 std::vector<std::string> ResumeUploadOperation::GetExtraRequestHeaders() const { |
| 926 std::vector<std::string> headers; |
| 927 |
| 928 if (params_.etag.empty()) { |
| 929 headers.push_back(kIfMatchAllHeader); |
| 930 } else { |
| 931 headers.push_back( |
| 932 base::StringPrintf(kIfMatchHeaderFormat, params_.etag.c_str())); |
| 933 } |
| 934 |
| 898 if (params_.content_length == 0) { | 935 if (params_.content_length == 0) { |
| 899 // For uploading an empty document, just PUT an empty content. | 936 // For uploading an empty document, just PUT an empty content. |
| 900 DCHECK_EQ(params_.start_range, 0); | 937 DCHECK_EQ(params_.start_range, 0); |
| 901 DCHECK_EQ(params_.end_range, -1); | 938 DCHECK_EQ(params_.end_range, -1); |
| 902 return std::vector<std::string>(); | 939 return headers; |
| 903 } | 940 } |
| 904 | 941 |
| 905 // The header looks like | 942 // The header looks like |
| 906 // Content-Range: bytes <start_range>-<end_range>/<content_length> | 943 // Content-Range: bytes <start_range>-<end_range>/<content_length> |
| 907 // for example: | 944 // for example: |
| 908 // Content-Range: bytes 7864320-8388607/13851821 | 945 // Content-Range: bytes 7864320-8388607/13851821 |
| 909 // Use * for unknown/streaming content length. | 946 // Use * for unknown/streaming content length. |
| 910 DCHECK_GE(params_.start_range, 0); | 947 DCHECK_GE(params_.start_range, 0); |
| 911 DCHECK_GE(params_.end_range, 0); | 948 DCHECK_GE(params_.end_range, 0); |
| 912 DCHECK_GE(params_.content_length, -1); | 949 DCHECK_GE(params_.content_length, -1); |
| 913 | 950 |
| 914 std::vector<std::string> headers; | |
| 915 headers.push_back( | 951 headers.push_back( |
| 916 std::string(kUploadContentRange) + | 952 std::string(kUploadContentRange) + |
| 917 base::Int64ToString(params_.start_range) + "-" + | 953 base::Int64ToString(params_.start_range) + "-" + |
| 918 base::Int64ToString(params_.end_range) + "/" + | 954 base::Int64ToString(params_.end_range) + "/" + |
| 919 (params_.content_length == -1 ? "*" : | 955 (params_.content_length == -1 ? "*" : |
| 920 base::Int64ToString(params_.content_length))); | 956 base::Int64ToString(params_.content_length))); |
| 921 return headers; | 957 return headers; |
| 922 } | 958 } |
| 923 | 959 |
| 924 bool ResumeUploadOperation::GetContentData(std::string* upload_content_type, | 960 bool ResumeUploadOperation::GetContentData(std::string* upload_content_type, |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1008 OnProcessURLFetchResultsComplete(code == HTTP_SUCCESS); | 1044 OnProcessURLFetchResultsComplete(code == HTTP_SUCCESS); |
| 1009 } | 1045 } |
| 1010 | 1046 |
| 1011 void GetContactPhotoOperation::RunCallbackOnPrematureFailure( | 1047 void GetContactPhotoOperation::RunCallbackOnPrematureFailure( |
| 1012 GDataErrorCode code) { | 1048 GDataErrorCode code) { |
| 1013 scoped_ptr<std::string> data(new std::string); | 1049 scoped_ptr<std::string> data(new std::string); |
| 1014 callback_.Run(code, data.Pass()); | 1050 callback_.Run(code, data.Pass()); |
| 1015 } | 1051 } |
| 1016 | 1052 |
| 1017 } // namespace gdata | 1053 } // namespace gdata |
| OLD | NEW |