| Index: chrome/browser/translate/translate_url_fetcher.cc
|
| diff --git a/chrome/browser/translate/translate_url_fetcher.cc b/chrome/browser/translate/translate_url_fetcher.cc
|
| index 4635eec6426ff4d8e624ccbb39c7937770275085..16ee14f0b27a85518ccda07a1dabc8fd217cfed0 100644
|
| --- a/chrome/browser/translate/translate_url_fetcher.cc
|
| +++ b/chrome/browser/translate/translate_url_fetcher.cc
|
| @@ -13,13 +13,15 @@
|
| namespace {
|
|
|
| // Retry parameter for fetching.
|
| -const int kMaxRetry = 5;
|
| +const int kMaxRetryOn5xx = 5;
|
| +const int kMaxRetry = 16;
|
|
|
| } // namespace
|
|
|
| TranslateURLFetcher::TranslateURLFetcher(int id)
|
| : id_(id),
|
| - state_(IDLE) {
|
| + state_(IDLE),
|
| + retry_count_(0) {
|
| }
|
|
|
| TranslateURLFetcher::~TranslateURLFetcher() {
|
| @@ -28,13 +30,17 @@ TranslateURLFetcher::~TranslateURLFetcher() {
|
| bool TranslateURLFetcher::Request(
|
| const GURL& url,
|
| const TranslateURLFetcher::Callback& callback) {
|
| - // This function is not supporsed to be called before previous operaion is not
|
| + // This function is not supposed to be called before previous operaion is not
|
| // finished.
|
| if (state_ == REQUESTING) {
|
| NOTREACHED();
|
| return false;
|
| }
|
|
|
| + if (retry_count_ >= kMaxRetry)
|
| + return false;
|
| + retry_count_++;
|
| +
|
| state_ = REQUESTING;
|
| url_ = url;
|
| callback_ = callback;
|
| @@ -47,7 +53,10 @@ bool TranslateURLFetcher::Request(
|
| fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
|
| net::LOAD_DO_NOT_SAVE_COOKIES);
|
| fetcher_->SetRequestContext(g_browser_process->system_request_context());
|
| - fetcher_->SetMaxRetriesOn5xx(kMaxRetry);
|
| + // Set retry parameter for HTTP status code 5xx. This doesn't work against
|
| + // 106 (net::ERR_INTERNET_DISCONNECTED) and so on.
|
| + // TranslateLanguageList handles network status, and implements retry.
|
| + fetcher_->SetMaxRetriesOn5xx(kMaxRetryOn5xx);
|
| fetcher_->Start();
|
|
|
| return true;
|
| @@ -65,6 +74,7 @@ void TranslateURLFetcher::OnURLFetchComplete(const net::URLFetcher* source) {
|
| state_ = FAILED;
|
| }
|
|
|
| + // Transfer URLFetcher's ownership before invoking a callback.
|
| scoped_ptr<const net::URLFetcher> delete_ptr(fetcher_.release());
|
| callback_.Run(id_, state_ == COMPLETED, data);
|
| }
|
|
|