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

Side by Side Diff: google_apis/drive/base_requests.cc

Issue 1873663002: Convert //google_apis from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 unified diff | Download patch
« no previous file with comments | « google_apis/drive/base_requests.h ('k') | google_apis/drive/base_requests_server_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "google_apis/drive/base_requests.h" 5 #include "google_apis/drive/base_requests.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8
8 #include <utility> 9 #include <utility>
9 10
10 #include "base/files/file_util.h" 11 #include "base/files/file_util.h"
11 #include "base/json/json_reader.h" 12 #include "base/json/json_reader.h"
12 #include "base/json/json_writer.h" 13 #include "base/json/json_writer.h"
13 #include "base/location.h" 14 #include "base/location.h"
14 #include "base/macros.h" 15 #include "base/macros.h"
16 #include "base/memory/ptr_util.h"
15 #include "base/sequenced_task_runner.h" 17 #include "base/sequenced_task_runner.h"
16 #include "base/strings/string_number_conversions.h" 18 #include "base/strings/string_number_conversions.h"
17 #include "base/strings/stringprintf.h" 19 #include "base/strings/stringprintf.h"
18 #include "base/task_runner_util.h" 20 #include "base/task_runner_util.h"
19 #include "base/thread_task_runner_handle.h" 21 #include "base/thread_task_runner_handle.h"
20 #include "base/values.h" 22 #include "base/values.h"
21 #include "google_apis/drive/drive_api_parser.h" 23 #include "google_apis/drive/drive_api_parser.h"
22 #include "google_apis/drive/request_sender.h" 24 #include "google_apis/drive/request_sender.h"
23 #include "google_apis/drive/request_util.h" 25 #include "google_apis/drive/request_util.h"
24 #include "google_apis/drive/task_util.h" 26 #include "google_apis/drive/task_util.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 77
76 // Footer for whole multipart message. 78 // Footer for whole multipart message.
77 const char kMultipartFooterFormat[] = "--%s--"; 79 const char kMultipartFooterFormat[] = "--%s--";
78 80
79 // Parses JSON passed in |json| on |blocking_task_runner|. Runs |callback| on 81 // Parses JSON passed in |json| on |blocking_task_runner|. Runs |callback| on
80 // the calling thread when finished with either success or failure. 82 // the calling thread when finished with either success or failure.
81 // The callback must not be null. 83 // The callback must not be null.
82 void ParseJsonOnBlockingPool( 84 void ParseJsonOnBlockingPool(
83 base::TaskRunner* blocking_task_runner, 85 base::TaskRunner* blocking_task_runner,
84 const std::string& json, 86 const std::string& json,
85 const base::Callback<void(scoped_ptr<base::Value> value)>& callback) { 87 const base::Callback<void(std::unique_ptr<base::Value> value)>& callback) {
86 base::PostTaskAndReplyWithResult( 88 base::PostTaskAndReplyWithResult(
87 blocking_task_runner, 89 blocking_task_runner,
88 FROM_HERE, 90 FROM_HERE,
89 base::Bind(&google_apis::ParseJson, json), 91 base::Bind(&google_apis::ParseJson, json),
90 callback); 92 callback);
91 } 93 }
92 94
93 // Returns response headers as a string. Returns a warning message if 95 // Returns response headers as a string. Returns a warning message if
94 // |url_fetcher| does not contain a valid response. Used only for debugging. 96 // |url_fetcher| does not contain a valid response. Used only for debugging.
95 std::string GetResponseHeadersAsString(const URLFetcher* url_fetcher) { 97 std::string GetResponseHeadersAsString(const URLFetcher* url_fetcher) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 DVLOG(1) << error_body; 146 DVLOG(1) << error_body;
145 const char kErrorKey[] = "error"; 147 const char kErrorKey[] = "error";
146 const char kErrorErrorsKey[] = "errors"; 148 const char kErrorErrorsKey[] = "errors";
147 const char kErrorReasonKey[] = "reason"; 149 const char kErrorReasonKey[] = "reason";
148 const char kErrorMessageKey[] = "message"; 150 const char kErrorMessageKey[] = "message";
149 const char kErrorReasonRateLimitExceeded[] = "rateLimitExceeded"; 151 const char kErrorReasonRateLimitExceeded[] = "rateLimitExceeded";
150 const char kErrorReasonUserRateLimitExceeded[] = "userRateLimitExceeded"; 152 const char kErrorReasonUserRateLimitExceeded[] = "userRateLimitExceeded";
151 const char kErrorReasonQuotaExceeded[] = "quotaExceeded"; 153 const char kErrorReasonQuotaExceeded[] = "quotaExceeded";
152 const char kErrorReasonResponseTooLarge[] = "responseTooLarge"; 154 const char kErrorReasonResponseTooLarge[] = "responseTooLarge";
153 155
154 scoped_ptr<const base::Value> value(google_apis::ParseJson(error_body)); 156 std::unique_ptr<const base::Value> value(google_apis::ParseJson(error_body));
155 const base::DictionaryValue* dictionary = NULL; 157 const base::DictionaryValue* dictionary = NULL;
156 const base::DictionaryValue* error = NULL; 158 const base::DictionaryValue* error = NULL;
157 if (value && 159 if (value &&
158 value->GetAsDictionary(&dictionary) && 160 value->GetAsDictionary(&dictionary) &&
159 dictionary->GetDictionaryWithoutPathExpansion(kErrorKey, &error)) { 161 dictionary->GetDictionaryWithoutPathExpansion(kErrorKey, &error)) {
160 // Get error message. 162 // Get error message.
161 std::string message; 163 std::string message;
162 error->GetStringWithoutPathExpansion(kErrorMessageKey, &message); 164 error->GetStringWithoutPathExpansion(kErrorMessageKey, &message);
163 DLOG(ERROR) << "code: " << code << ", message: " << message; 165 DLOG(ERROR) << "code: " << code << ", message: " << message;
164 166
(...skipping 15 matching lines...) Expand all
180 } 182 }
181 } 183 }
182 184
183 return code; 185 return code;
184 } 186 }
185 187
186 } // namespace 188 } // namespace
187 189
188 namespace google_apis { 190 namespace google_apis {
189 191
190 scoped_ptr<base::Value> ParseJson(const std::string& json) { 192 std::unique_ptr<base::Value> ParseJson(const std::string& json) {
191 int error_code = -1; 193 int error_code = -1;
192 std::string error_message; 194 std::string error_message;
193 scoped_ptr<base::Value> value = base::JSONReader::ReadAndReturnError( 195 std::unique_ptr<base::Value> value = base::JSONReader::ReadAndReturnError(
194 json, base::JSON_PARSE_RFC, &error_code, &error_message); 196 json, base::JSON_PARSE_RFC, &error_code, &error_message);
195 197
196 if (!value.get()) { 198 if (!value.get()) {
197 std::string trimmed_json; 199 std::string trimmed_json;
198 if (json.size() < 80) { 200 if (json.size() < 80) {
199 trimmed_json = json; 201 trimmed_json = json;
200 } else { 202 } else {
201 // Take the first 50 and the last 10 bytes. 203 // Take the first 50 and the last 10 bytes.
202 trimmed_json = base::StringPrintf( 204 trimmed_json = base::StringPrintf(
203 "%s [%s bytes] %s", 205 "%s [%s bytes] %s",
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 return file_writer_->Initialize(callback); 286 return file_writer_->Initialize(callback);
285 287
286 data_.clear(); 288 data_.clear();
287 return net::OK; 289 return net::OK;
288 } 290 }
289 291
290 int ResponseWriter::Write(net::IOBuffer* buffer, 292 int ResponseWriter::Write(net::IOBuffer* buffer,
291 int num_bytes, 293 int num_bytes,
292 const net::CompletionCallback& callback) { 294 const net::CompletionCallback& callback) {
293 if (!get_content_callback_.is_null()) { 295 if (!get_content_callback_.is_null()) {
294 get_content_callback_.Run( 296 get_content_callback_.Run(HTTP_SUCCESS, base::WrapUnique(new std::string(
295 HTTP_SUCCESS, 297 buffer->data(), num_bytes)));
Roger Tawa OOO till Jul 10th 2016/04/08 15:03:33 Line formatting does not seem right here.
dcheng 2016/04/08 17:27:26 This is technically compliant to the style guide:
296 make_scoped_ptr(new std::string(buffer->data(), num_bytes)));
297 } 298 }
298 299
299 if (file_writer_) { 300 if (file_writer_) {
300 const int result = file_writer_->Write( 301 const int result = file_writer_->Write(
301 buffer, num_bytes, 302 buffer, num_bytes,
302 base::Bind(&ResponseWriter::DidWrite, 303 base::Bind(&ResponseWriter::DidWrite,
303 weak_ptr_factory_.GetWeakPtr(), 304 weak_ptr_factory_.GetWeakPtr(),
304 make_scoped_refptr(buffer), callback)); 305 make_scoped_refptr(buffer), callback));
305 if (result != net::ERR_IO_PENDING) 306 if (result != net::ERR_IO_PENDING)
306 DidWrite(buffer, net::CompletionCallback(), result); 307 DidWrite(buffer, net::CompletionCallback(), result);
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 411
411 base::FilePath output_file_path; 412 base::FilePath output_file_path;
412 GetContentCallback get_content_callback; 413 GetContentCallback get_content_callback;
413 GetOutputFilePath(&output_file_path, &get_content_callback); 414 GetOutputFilePath(&output_file_path, &get_content_callback);
414 if (!get_content_callback.is_null()) 415 if (!get_content_callback.is_null())
415 get_content_callback = CreateRelayCallback(get_content_callback); 416 get_content_callback = CreateRelayCallback(get_content_callback);
416 response_writer_ = new ResponseWriter(blocking_task_runner(), 417 response_writer_ = new ResponseWriter(blocking_task_runner(),
417 output_file_path, 418 output_file_path,
418 get_content_callback); 419 get_content_callback);
419 url_fetcher_->SaveResponseWithWriter( 420 url_fetcher_->SaveResponseWithWriter(
420 scoped_ptr<net::URLFetcherResponseWriter>(response_writer_)); 421 std::unique_ptr<net::URLFetcherResponseWriter>(response_writer_));
421 422
422 // Add request headers. 423 // Add request headers.
423 // Note that SetExtraRequestHeaders clears the current headers and sets it 424 // Note that SetExtraRequestHeaders clears the current headers and sets it
424 // to the passed-in headers, so calling it for each header will result in 425 // to the passed-in headers, so calling it for each header will result in
425 // only the last header being set in request headers. 426 // only the last header being set in request headers.
426 if (!custom_user_agent.empty()) 427 if (!custom_user_agent.empty())
427 url_fetcher_->AddExtraRequestHeader("User-Agent: " + custom_user_agent); 428 url_fetcher_->AddExtraRequestHeader("User-Agent: " + custom_user_agent);
428 url_fetcher_->AddExtraRequestHeader(kGDataVersionHeader); 429 url_fetcher_->AddExtraRequestHeader(kGDataVersionHeader);
429 url_fetcher_->AddExtraRequestHeader( 430 url_fetcher_->AddExtraRequestHeader(
430 base::StringPrintf(kAuthorizationHeaderFormat, access_token.data())); 431 base::StringPrintf(kAuthorizationHeaderFormat, access_token.data()));
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 // ranges exclusively (i.e., end_position_received should be one passed 697 // ranges exclusively (i.e., end_position_received should be one passed
697 // the last valid index). So "+ 1" is added. 698 // the last valid index). So "+ 1" is added.
698 start_position_received = ranges[0].first_byte_position(); 699 start_position_received = ranges[0].first_byte_position();
699 end_position_received = ranges[0].last_byte_position() + 1; 700 end_position_received = ranges[0].last_byte_position() + 1;
700 } 701 }
701 } 702 }
702 // The Range header has the received data range, so the start position 703 // The Range header has the received data range, so the start position
703 // should be always 0. 704 // should be always 0.
704 DCHECK_EQ(start_position_received, 0); 705 DCHECK_EQ(start_position_received, 0);
705 706
706 OnRangeRequestComplete(UploadRangeResponse(code, 707 OnRangeRequestComplete(UploadRangeResponse(code, start_position_received,
707 start_position_received,
708 end_position_received), 708 end_position_received),
709 scoped_ptr<base::Value>()); 709 std::unique_ptr<base::Value>());
710 710
711 OnProcessURLFetchResultsComplete(); 711 OnProcessURLFetchResultsComplete();
712 } else if (code == HTTP_CREATED || code == HTTP_SUCCESS) { 712 } else if (code == HTTP_CREATED || code == HTTP_SUCCESS) {
713 // The upload is successfully done. Parse the response which should be 713 // The upload is successfully done. Parse the response which should be
714 // the entry's metadata. 714 // the entry's metadata.
715 ParseJsonOnBlockingPool(blocking_task_runner(), 715 ParseJsonOnBlockingPool(blocking_task_runner(),
716 response_writer()->data(), 716 response_writer()->data(),
717 base::Bind(&UploadRangeRequestBase::OnDataParsed, 717 base::Bind(&UploadRangeRequestBase::OnDataParsed,
718 weak_ptr_factory_.GetWeakPtr(), 718 weak_ptr_factory_.GetWeakPtr(),
719 code)); 719 code));
720 } else { 720 } else {
721 // Failed to upload. Run callbacks to notify the error. 721 // Failed to upload. Run callbacks to notify the error.
722 OnRangeRequestComplete( 722 OnRangeRequestComplete(UploadRangeResponse(code, -1, -1),
723 UploadRangeResponse(code, -1, -1), scoped_ptr<base::Value>()); 723 std::unique_ptr<base::Value>());
724 OnProcessURLFetchResultsComplete(); 724 OnProcessURLFetchResultsComplete();
725 } 725 }
726 } 726 }
727 727
728 void UploadRangeRequestBase::OnDataParsed(DriveApiErrorCode code, 728 void UploadRangeRequestBase::OnDataParsed(DriveApiErrorCode code,
729 scoped_ptr<base::Value> value) { 729 std::unique_ptr<base::Value> value) {
730 DCHECK(CalledOnValidThread()); 730 DCHECK(CalledOnValidThread());
731 DCHECK(code == HTTP_CREATED || code == HTTP_SUCCESS); 731 DCHECK(code == HTTP_CREATED || code == HTTP_SUCCESS);
732 732
733 OnRangeRequestComplete(UploadRangeResponse(code, -1, -1), std::move(value)); 733 OnRangeRequestComplete(UploadRangeResponse(code, -1, -1), std::move(value));
734 OnProcessURLFetchResultsComplete(); 734 OnProcessURLFetchResultsComplete();
735 } 735 }
736 736
737 void UploadRangeRequestBase::RunCallbackOnPrematureFailure( 737 void UploadRangeRequestBase::RunCallbackOnPrematureFailure(
738 DriveApiErrorCode code) { 738 DriveApiErrorCode code) {
739 OnRangeRequestComplete( 739 OnRangeRequestComplete(UploadRangeResponse(code, 0, 0),
740 UploadRangeResponse(code, 0, 0), scoped_ptr<base::Value>()); 740 std::unique_ptr<base::Value>());
741 } 741 }
742 742
743 //========================== ResumeUploadRequestBase ========================= 743 //========================== ResumeUploadRequestBase =========================
744 744
745 ResumeUploadRequestBase::ResumeUploadRequestBase( 745 ResumeUploadRequestBase::ResumeUploadRequestBase(
746 RequestSender* sender, 746 RequestSender* sender,
747 const GURL& upload_location, 747 const GURL& upload_location,
748 int64_t start_position, 748 int64_t start_position,
749 int64_t end_position, 749 int64_t end_position,
750 int64_t content_length, 750 int64_t content_length,
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
916 base::Bind(&MultipartUploadRequestBase::OnDataParsed, 916 base::Bind(&MultipartUploadRequestBase::OnDataParsed,
917 weak_ptr_factory_.GetWeakPtr(), code, 917 weak_ptr_factory_.GetWeakPtr(), code,
918 notify_complete_callback)); 918 notify_complete_callback));
919 } else { 919 } else {
920 NotifyError(MapJsonError(code, body)); 920 NotifyError(MapJsonError(code, body));
921 notify_complete_callback.Run(); 921 notify_complete_callback.Run();
922 } 922 }
923 } 923 }
924 924
925 void MultipartUploadRequestBase::NotifyError(DriveApiErrorCode code) { 925 void MultipartUploadRequestBase::NotifyError(DriveApiErrorCode code) {
926 callback_.Run(code, scoped_ptr<FileResource>()); 926 callback_.Run(code, std::unique_ptr<FileResource>());
927 } 927 }
928 928
929 void MultipartUploadRequestBase::NotifyUploadProgress( 929 void MultipartUploadRequestBase::NotifyUploadProgress(
930 const net::URLFetcher* source, 930 const net::URLFetcher* source,
931 int64_t current, 931 int64_t current,
932 int64_t total) { 932 int64_t total) {
933 if (!progress_callback_.is_null()) 933 if (!progress_callback_.is_null())
934 progress_callback_.Run(current, total); 934 progress_callback_.Run(current, total);
935 } 935 }
936 936
937 void MultipartUploadRequestBase::OnDataParsed( 937 void MultipartUploadRequestBase::OnDataParsed(
938 DriveApiErrorCode code, 938 DriveApiErrorCode code,
939 const base::Closure& notify_complete_callback, 939 const base::Closure& notify_complete_callback,
940 scoped_ptr<base::Value> value) { 940 std::unique_ptr<base::Value> value) {
941 DCHECK(thread_checker_.CalledOnValidThread()); 941 DCHECK(thread_checker_.CalledOnValidThread());
942 if (value) 942 if (value)
943 callback_.Run(code, google_apis::FileResource::CreateFrom(*value)); 943 callback_.Run(code, google_apis::FileResource::CreateFrom(*value));
944 else 944 else
945 NotifyError(DRIVE_PARSE_ERROR); 945 NotifyError(DRIVE_PARSE_ERROR);
946 notify_complete_callback.Run(); 946 notify_complete_callback.Run();
947 } 947 }
948 948
949 //============================ DownloadFileRequestBase ========================= 949 //============================ DownloadFileRequestBase =========================
950 950
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1002 download_action_callback_.Run(code, temp_file); 1002 download_action_callback_.Run(code, temp_file);
1003 OnProcessURLFetchResultsComplete(); 1003 OnProcessURLFetchResultsComplete();
1004 } 1004 }
1005 1005
1006 void DownloadFileRequestBase::RunCallbackOnPrematureFailure( 1006 void DownloadFileRequestBase::RunCallbackOnPrematureFailure(
1007 DriveApiErrorCode code) { 1007 DriveApiErrorCode code) {
1008 download_action_callback_.Run(code, base::FilePath()); 1008 download_action_callback_.Run(code, base::FilePath());
1009 } 1009 }
1010 1010
1011 } // namespace google_apis 1011 } // namespace google_apis
OLDNEW
« no previous file with comments | « google_apis/drive/base_requests.h ('k') | google_apis/drive/base_requests_server_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698