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

Side by Side Diff: chrome/service/cloud_print/cloud_print_url_fetcher.cc

Issue 11464028: Introduce ERR_NETWORK_CHANGED and allow URLFetcher to automatically retry on that error. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed nits Created 8 years 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
« no previous file with comments | « chrome/browser/translate/translate_manager.cc ('k') | google_apis/gaia/gaia_oauth_client.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 "chrome/service/cloud_print/cloud_print_url_fetcher.h" 5 #include "chrome/service/cloud_print/cloud_print_url_fetcher.h"
6 6
7 #include "base/stringprintf.h" 7 #include "base/stringprintf.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 #include "chrome/common/cloud_print/cloud_print_constants.h" 9 #include "chrome/common/cloud_print/cloud_print_constants.h"
10 #include "chrome/common/cloud_print/cloud_print_helpers.h" 10 #include "chrome/common/cloud_print/cloud_print_helpers.h"
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 // Explicitly call ReceivedContentWasMalformed() to ensure the current 138 // Explicitly call ReceivedContentWasMalformed() to ensure the current
139 // request gets counted as a failure for calculation of the back-off 139 // request gets counted as a failure for calculation of the back-off
140 // period. If it was already a failure by status code, this call will 140 // period. If it was already a failure by status code, this call will
141 // be ignored. 141 // be ignored.
142 request_->ReceivedContentWasMalformed(); 142 request_->ReceivedContentWasMalformed();
143 143
144 // If we receive error code from the server "Media Type Not Supported", 144 // If we receive error code from the server "Media Type Not Supported",
145 // there is no reason to retry, request will never succeed. 145 // there is no reason to retry, request will never succeed.
146 // In that case we should call OnRequestGiveUp() right away. 146 // In that case we should call OnRequestGiveUp() right away.
147 if (source->GetResponseCode() == net::HTTP_UNSUPPORTED_MEDIA_TYPE) 147 if (source->GetResponseCode() == net::HTTP_UNSUPPORTED_MEDIA_TYPE)
148 num_retries_ = source->GetMaxRetries(); 148 num_retries_ = source->GetMaxRetriesOn5xx();
149 149
150 ++num_retries_; 150 ++num_retries_;
151 if ((-1 != source->GetMaxRetries()) && 151 if ((-1 != source->GetMaxRetriesOn5xx()) &&
152 (num_retries_ > source->GetMaxRetries())) { 152 (num_retries_ > source->GetMaxRetriesOn5xx())) {
153 // Retry limit reached. Give up. 153 // Retry limit reached. Give up.
154 delegate_->OnRequestGiveUp(); 154 delegate_->OnRequestGiveUp();
155 } else { 155 } else {
156 // Either no retry limit specified or retry limit has not yet been 156 // Either no retry limit specified or retry limit has not yet been
157 // reached. Try again. Set up the request headers again because the token 157 // reached. Try again. Set up the request headers again because the token
158 // may have changed. 158 // may have changed.
159 SetupRequestHeaders(); 159 SetupRequestHeaders();
160 request_->SetRequestContext(GetRequestContextGetter()); 160 request_->SetRequestContext(GetRequestContextGetter());
161 request_->Start(); 161 request_->Start();
162 } 162 }
163 } 163 }
164 } 164 }
165 165
166 void CloudPrintURLFetcher::StartRequestHelper( 166 void CloudPrintURLFetcher::StartRequestHelper(
167 const GURL& url, 167 const GURL& url,
168 net::URLFetcher::RequestType request_type, 168 net::URLFetcher::RequestType request_type,
169 Delegate* delegate, 169 Delegate* delegate,
170 int max_retries, 170 int max_retries,
171 const std::string& post_data_mime_type, 171 const std::string& post_data_mime_type,
172 const std::string& post_data, 172 const std::string& post_data,
173 const std::string& additional_headers) { 173 const std::string& additional_headers) {
174 DCHECK(delegate); 174 DCHECK(delegate);
175 // Persist the additional headers in case we need to retry the request. 175 // Persist the additional headers in case we need to retry the request.
176 additional_headers_ = additional_headers; 176 additional_headers_ = additional_headers;
177 request_.reset(net::URLFetcher::Create(url, request_type, this)); 177 request_.reset(net::URLFetcher::Create(url, request_type, this));
178 request_->SetRequestContext(GetRequestContextGetter()); 178 request_->SetRequestContext(GetRequestContextGetter());
179 // Since we implement our own retry logic, disable the retry in URLFetcher. 179 // Since we implement our own retry logic, disable the retry in URLFetcher.
180 request_->SetAutomaticallyRetryOn5xx(false); 180 request_->SetAutomaticallyRetryOn5xx(false);
181 request_->SetMaxRetries(max_retries); 181 request_->SetMaxRetriesOn5xx(max_retries);
182 delegate_ = delegate; 182 delegate_ = delegate;
183 SetupRequestHeaders(); 183 SetupRequestHeaders();
184 request_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES | 184 request_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
185 net::LOAD_DO_NOT_SAVE_COOKIES); 185 net::LOAD_DO_NOT_SAVE_COOKIES);
186 if (request_type == net::URLFetcher::POST) { 186 if (request_type == net::URLFetcher::POST) {
187 request_->SetUploadData(post_data_mime_type, post_data); 187 request_->SetUploadData(post_data_mime_type, post_data);
188 } 188 }
189 189
190 request_->Start(); 190 request_->Start();
191 } 191 }
(...skipping 16 matching lines...) Expand all
208 ServiceURLRequestContextGetter* getter = 208 ServiceURLRequestContextGetter* getter =
209 g_service_process->GetServiceURLRequestContextGetter(); 209 g_service_process->GetServiceURLRequestContextGetter();
210 // Now set up the user agent for cloudprint. 210 // Now set up the user agent for cloudprint.
211 std::string user_agent = getter->user_agent(); 211 std::string user_agent = getter->user_agent();
212 base::StringAppendF(&user_agent, " %s", kCloudPrintUserAgent); 212 base::StringAppendF(&user_agent, " %s", kCloudPrintUserAgent);
213 getter->set_user_agent(user_agent); 213 getter->set_user_agent(user_agent);
214 return getter; 214 return getter;
215 } 215 }
216 216
217 } // namespace cloud_print 217 } // namespace cloud_print
OLDNEW
« no previous file with comments | « chrome/browser/translate/translate_manager.cc ('k') | google_apis/gaia/gaia_oauth_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698