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

Side by Side Diff: chrome/browser/google_apis/base_requests.cc

Issue 17175017: Get rid of RequestRegistry (part 6): get rid of RequestRegistry. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 | Annotate | Revision Log
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 "chrome/browser/google_apis/base_requests.h" 5 #include "chrome/browser/google_apis/base_requests.h"
6 6
7 #include "base/json/json_reader.h" 7 #include "base/json/json_reader.h"
8 #include "base/strings/string_number_conversions.h" 8 #include "base/strings/string_number_conversions.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/task_runner_util.h" 10 #include "base/task_runner_util.h"
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 base::PostTaskAndReplyWithResult( 86 base::PostTaskAndReplyWithResult(
87 BrowserThread::GetBlockingPool(), 87 BrowserThread::GetBlockingPool(),
88 FROM_HERE, 88 FROM_HERE,
89 base::Bind(&ParseJsonOnBlockingPool, json), 89 base::Bind(&ParseJsonOnBlockingPool, json),
90 callback); 90 callback);
91 } 91 }
92 92
93 //============================ UrlFetchRequestBase =========================== 93 //============================ UrlFetchRequestBase ===========================
94 94
95 UrlFetchRequestBase::UrlFetchRequestBase( 95 UrlFetchRequestBase::UrlFetchRequestBase(
96 RequestSender* runner, 96 RequestSender* sender,
97 net::URLRequestContextGetter* url_request_context_getter) 97 net::URLRequestContextGetter* url_request_context_getter)
98 : RequestRegistry::Request(runner->request_registry()), 98 : url_request_context_getter_(url_request_context_getter),
99 url_request_context_getter_(url_request_context_getter),
100 re_authenticate_count_(0), 99 re_authenticate_count_(0),
101 started_(false), 100 sender_(sender),
102 save_temp_file_(false), 101 save_temp_file_(false),
103 weak_ptr_factory_(this) { 102 weak_ptr_factory_(this) {
104 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
105 } 104 }
106 105
107 UrlFetchRequestBase::~UrlFetchRequestBase() {} 106 UrlFetchRequestBase::~UrlFetchRequestBase() {}
108 107
109 void UrlFetchRequestBase::Start(const std::string& access_token, 108 void UrlFetchRequestBase::Start(const std::string& access_token,
110 const std::string& custom_user_agent, 109 const std::string& custom_user_agent,
111 const ReAuthenticateCallback& callback) { 110 const ReAuthenticateCallback& callback) {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 if (request_type == URLFetcher::POST || 183 if (request_type == URLFetcher::POST ||
185 request_type == URLFetcher::PUT || 184 request_type == URLFetcher::PUT ||
186 request_type == URLFetcher::PATCH) { 185 request_type == URLFetcher::PATCH) {
187 // Set empty upload content-type and upload content, so that 186 // Set empty upload content-type and upload content, so that
188 // the request will have no "Content-type: " header and no content. 187 // the request will have no "Content-type: " header and no content.
189 url_fetcher_->SetUploadData(std::string(), std::string()); 188 url_fetcher_->SetUploadData(std::string(), std::string());
190 } 189 }
191 } 190 }
192 } 191 }
193 192
194 // Register to request registry.
195 NotifyStart();
196
197 url_fetcher_->Start(); 193 url_fetcher_->Start();
198 started_ = true;
199 } 194 }
200 195
201 URLFetcher::RequestType UrlFetchRequestBase::GetRequestType() const { 196 URLFetcher::RequestType UrlFetchRequestBase::GetRequestType() const {
202 return URLFetcher::GET; 197 return URLFetcher::GET;
203 } 198 }
204 199
205 std::vector<std::string> UrlFetchRequestBase::GetExtraRequestHeaders() const { 200 std::vector<std::string> UrlFetchRequestBase::GetExtraRequestHeaders() const {
206 return std::vector<std::string>(); 201 return std::vector<std::string>();
207 } 202 }
208 203
209 bool UrlFetchRequestBase::GetContentData(std::string* upload_content_type, 204 bool UrlFetchRequestBase::GetContentData(std::string* upload_content_type,
210 std::string* upload_content) { 205 std::string* upload_content) {
211 return false; 206 return false;
212 } 207 }
213 208
214 bool UrlFetchRequestBase::GetContentFile(base::FilePath* local_file_path, 209 bool UrlFetchRequestBase::GetContentFile(base::FilePath* local_file_path,
215 int64* range_offset, 210 int64* range_offset,
216 int64* range_length, 211 int64* range_length,
217 std::string* upload_content_type) { 212 std::string* upload_content_type) {
218 return false; 213 return false;
219 } 214 }
220 215
221 void UrlFetchRequestBase::Cancel() { 216 void UrlFetchRequestBase::Cancel() {
222 url_fetcher_.reset(NULL); 217 url_fetcher_.reset(NULL);
223 RunCallbackOnPrematureFailure(GDATA_CANCELLED); 218 RunCallbackOnPrematureFailure(GDATA_CANCELLED);
224 NotifyFinish(); 219 sender_->RequestFinished(this);
225 } 220 }
226 221
227 // static 222 // static
228 GDataErrorCode UrlFetchRequestBase::GetErrorCode(const URLFetcher* source) { 223 GDataErrorCode UrlFetchRequestBase::GetErrorCode(const URLFetcher* source) {
229 GDataErrorCode code = static_cast<GDataErrorCode>(source->GetResponseCode()); 224 GDataErrorCode code = static_cast<GDataErrorCode>(source->GetResponseCode());
230 if (!source->GetStatus().is_success()) { 225 if (!source->GetStatus().is_success()) {
231 switch (source->GetStatus().error()) { 226 switch (source->GetStatus().error()) {
232 case net::ERR_NETWORK_CHANGED: 227 case net::ERR_NETWORK_CHANGED:
233 code = GDATA_NO_CONNECTION; 228 code = GDATA_NO_CONNECTION;
234 break; 229 break;
235 default: 230 default:
236 code = GDATA_OTHER_ERROR; 231 code = GDATA_OTHER_ERROR;
237 } 232 }
238 } 233 }
239 return code; 234 return code;
240 } 235 }
241 236
242 void UrlFetchRequestBase::OnProcessURLFetchResultsComplete(bool result) { 237 void UrlFetchRequestBase::OnProcessURLFetchResultsComplete(bool result) {
243 NotifyFinish(); 238 sender_->RequestFinished(this);
244 } 239 }
245 240
246 void UrlFetchRequestBase::OnURLFetchComplete(const URLFetcher* source) { 241 void UrlFetchRequestBase::OnURLFetchComplete(const URLFetcher* source) {
247 GDataErrorCode code = GetErrorCode(source); 242 GDataErrorCode code = GetErrorCode(source);
248 DVLOG(1) << "Response headers:\n" << GetResponseHeadersAsString(source); 243 DVLOG(1) << "Response headers:\n" << GetResponseHeadersAsString(source);
249 244
250 if (code == HTTP_UNAUTHORIZED) { 245 if (code == HTTP_UNAUTHORIZED) {
251 if (++re_authenticate_count_ <= kMaxReAuthenticateAttemptsPerRequest) { 246 if (++re_authenticate_count_ <= kMaxReAuthenticateAttemptsPerRequest) {
252 // Reset re_authenticate_callback_ so Start() can be called again. 247 // Reset re_authenticate_callback_ so Start() can be called again.
253 ReAuthenticateCallback callback = re_authenticate_callback_; 248 ReAuthenticateCallback callback = re_authenticate_callback_;
254 re_authenticate_callback_.Reset(); 249 re_authenticate_callback_.Reset();
255 callback.Run(this); 250 callback.Run(this);
256 return; 251 return;
257 } 252 }
258 253
259 OnAuthFailed(code); 254 OnAuthFailed(code);
260 return; 255 return;
261 } 256 }
262 257
263 // Overridden by each specialization 258 // Overridden by each specialization
264 ProcessURLFetchResults(source); 259 ProcessURLFetchResults(source);
265 } 260 }
266 261
267 void UrlFetchRequestBase::OnAuthFailed(GDataErrorCode code) { 262 void UrlFetchRequestBase::OnAuthFailed(GDataErrorCode code) {
268 RunCallbackOnPrematureFailure(code); 263 RunCallbackOnPrematureFailure(code);
269 264 sender_->RequestFinished(this);
270 // Check if this failed before we even started fetching. If so, register
271 // for start so we can properly unregister with finish.
272 if (!started_)
273 NotifyStart();
274
275 // Note: NotifyFinish() must be invoked at the end, after all other callbacks
276 // and notifications. Once NotifyFinish() is called, the current instance of
277 // request will be deleted from the RequestRegistry and become invalid.
278 NotifyFinish();
279 } 265 }
280 266
281 base::WeakPtr<AuthenticatedRequestInterface> 267 base::WeakPtr<AuthenticatedRequestInterface>
282 UrlFetchRequestBase::GetWeakPtr() { 268 UrlFetchRequestBase::GetWeakPtr() {
283 return weak_ptr_factory_.GetWeakPtr(); 269 return weak_ptr_factory_.GetWeakPtr();
284 } 270 }
285 271
286 //============================ EntryActionRequest ============================ 272 //============================ EntryActionRequest ============================
287 273
288 EntryActionRequest::EntryActionRequest( 274 EntryActionRequest::EntryActionRequest(
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 681
696 download_action_callback_.Run(code, temp_file); 682 download_action_callback_.Run(code, temp_file);
697 OnProcessURLFetchResultsComplete(code == HTTP_SUCCESS); 683 OnProcessURLFetchResultsComplete(code == HTTP_SUCCESS);
698 } 684 }
699 685
700 void DownloadFileRequest::RunCallbackOnPrematureFailure(GDataErrorCode code) { 686 void DownloadFileRequest::RunCallbackOnPrematureFailure(GDataErrorCode code) {
701 download_action_callback_.Run(code, base::FilePath()); 687 download_action_callback_.Run(code, base::FilePath());
702 } 688 }
703 689
704 } // namespace google_apis 690 } // namespace google_apis
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698