| Index: chrome/browser/translate/translate_language_list.cc
|
| diff --git a/chrome/browser/translate/translate_language_list.cc b/chrome/browser/translate/translate_language_list.cc
|
| index e1b0fa2be3af24e5d05fdfb7a2c13f9f1fbe8dac..a28fd7bed67a828bb5a67c63cedfcb38f1b56a26 100644
|
| --- a/chrome/browser/translate/translate_language_list.cc
|
| +++ b/chrome/browser/translate/translate_language_list.cc
|
| @@ -103,14 +103,14 @@ const char kLanguageListFetchURL[] =
|
| const char kAlphaLanguageQueryName[] = "alpha";
|
| const char kAlphaLanguageQueryValue[] = "1";
|
|
|
| -// Retry parameter for fetching supporting language list.
|
| -const int kMaxRetryLanguageListFetch = 5;
|
| -
|
| // Assign following IDs to URLFetchers so that tests can distinguish each
|
| // request in order to simiulate respectively.
|
| const int kFetcherIdForLanguageList = 1;
|
| const int kFetcherIdForAlphaLanguageList = 2;
|
|
|
| +// Represent if the language list updater is disabled.
|
| +bool update_is_disabled = false;
|
| +
|
| // Show a message in chrome:://translate-internals Event Logs.
|
| void NotifyEvent(int line, const std::string& message) {
|
| TranslateManager* manager = TranslateManager::GetInstance();
|
| @@ -213,6 +213,9 @@ TranslateLanguageList::TranslateLanguageList() {
|
| supported_languages_.insert(kDefaultSupportedLanguages[i]);
|
| UpdateSupportedLanguages();
|
|
|
| + if (update_is_disabled)
|
| + return;
|
| +
|
| language_list_fetcher_.reset(
|
| new TranslateURLFetcher(kFetcherIdForLanguageList));
|
| alpha_language_list_fetcher_.reset(
|
| @@ -228,6 +231,11 @@ void TranslateLanguageList::GetSupportedLanguages(
|
| std::set<std::string>::const_iterator iter = all_supported_languages_.begin();
|
| for (; iter != all_supported_languages_.end(); ++iter)
|
| languages->push_back(*iter);
|
| +
|
| + // Update language lists if they are not updated after Chrome was launched
|
| + // for later requests.
|
| + if (language_list_fetcher_.get() || alpha_language_list_fetcher_.get())
|
| + RequestLanguageList();
|
| }
|
|
|
| std::string TranslateLanguageList::GetLanguageCode(
|
| @@ -254,6 +262,12 @@ bool TranslateLanguageList::IsAlphaLanguage(const std::string& language) {
|
| }
|
|
|
| void TranslateLanguageList::RequestLanguageList() {
|
| + // If resource requests are not allowed, we'll get a callback when they are.
|
| + if (resource_request_allowed_notifier_.ResourceRequestsAllowed())
|
| + OnResourceRequestsAllowed();
|
| +}
|
| +
|
| +void TranslateLanguageList::OnResourceRequestsAllowed() {
|
| if (language_list_fetcher_.get() &&
|
| (language_list_fetcher_->state() == TranslateURLFetcher::IDLE ||
|
| language_list_fetcher_->state() == TranslateURLFetcher::FAILED)) {
|
| @@ -264,10 +278,12 @@ void TranslateLanguageList::RequestLanguageList() {
|
| url.spec().c_str());
|
| NotifyEvent(__LINE__, message);
|
|
|
| - language_list_fetcher_->Request(
|
| + bool result = language_list_fetcher_->Request(
|
| url,
|
| base::Bind(&TranslateLanguageList::OnLanguageListFetchComplete,
|
| base::Unretained(this)));
|
| + if (!result)
|
| + NotifyEvent(__LINE__, "Request is omitted due to retry limit");
|
| }
|
|
|
| if (alpha_language_list_fetcher_.get() &&
|
| @@ -280,18 +296,31 @@ void TranslateLanguageList::RequestLanguageList() {
|
| url.spec().c_str());
|
| NotifyEvent(__LINE__, message);
|
|
|
| - alpha_language_list_fetcher_->Request(
|
| + bool result = alpha_language_list_fetcher_->Request(
|
| url,
|
| base::Bind(&TranslateLanguageList::OnLanguageListFetchComplete,
|
| base::Unretained(this)));
|
| + if (!result)
|
| + NotifyEvent(__LINE__, "Request is omitted due to retry limit");
|
| }
|
| }
|
|
|
| +// static
|
| +void TranslateLanguageList::DisableUpdate() {
|
| + update_is_disabled = true;
|
| +}
|
| +
|
| void TranslateLanguageList::OnLanguageListFetchComplete(
|
| int id,
|
| bool success,
|
| const std::string& data) {
|
| if (!success) {
|
| + // Since it fails just now, omit to schedule resource requests if
|
| + // ResourceRequestAllowedNotifier think it's ready. Otherwise, a callback
|
| + // will be invoked later to request resources again.
|
| + // The TranslateURLFetcher has a limit for retried requests and aborts
|
| + // re-try not to invoke OnLanguageListFetchComplete anymore if it's asked to
|
| + // re-try too many times.
|
| GURL url = GetLanguageListFetchURL(id == kFetcherIdForAlphaLanguageList);
|
| std::string message = base::StringPrintf(
|
| "Failed to Fetch languages from: %s", url.spec().c_str());
|
|
|