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 99e3c6e650ae436119538dc2f83a72459232ca08..391204a8125a2c5295bde702fc6091ce763d6c9a 100644 |
--- a/chrome/browser/translate/translate_language_list.cc |
+++ b/chrome/browser/translate/translate_language_list.cc |
@@ -111,7 +111,7 @@ const int kMaxRetryLanguageListFetch = 5; |
const char TranslateLanguageList::kLanguageListCallbackName[] = "sl("; |
const char TranslateLanguageList::kTargetLanguagesKey[] = "tl"; |
-TranslateLanguageList::TranslateLanguageList() { |
+TranslateLanguageList::TranslateLanguageList() : requesting_alpha_(false) { |
// We default to our hard coded list of languages in |
// |kDefaultSupportedLanguages|. This list will be overriden by a server |
// providing supported langauges list. |
@@ -130,8 +130,15 @@ void TranslateLanguageList::OnURLFetchComplete(const net::URLFetcher* source) { |
std::string data; |
source->GetResponseAsString(&data); |
SetSupportedLanguages(data); |
+ if (requesting_alpha_) |
+ return; |
+ scoped_ptr<const net::URLFetcher> delete_ptr(url_fetcher_.release()); |
MAD
2013/05/29 14:09:32
I don't understand why you need this. url_fetcher_
Takashi Toyoshima
2013/05/30 06:25:31
Sorry, this looks mistakenly added on rebasing.
|
+ FetchLanguageList(true); |
MAD
2013/05/29 14:09:32
I don't like this chaining either... I would prefe
Takashi Toyoshima
2013/05/30 06:25:31
agreed.
|
} else { |
// TODO(toyoshim): Try again. http://crbug.com/244202 . |
+ // Also In CrOS, FetchLanguageList is not called at launching Chrome. It |
+ // will solve this problem that check if FetchLanguageList is already |
+ // called, and call it if needed in InitSupportedLanguage(). |
VLOG(9) << "Failed to Fetch languages from: " << kLanguageListFetchURL; |
} |
} |
@@ -157,41 +164,16 @@ std::string TranslateLanguageList::GetLanguageCode( |
return chrome_locale.substr(0, hypen_index); |
} |
-bool TranslateLanguageList::IsSupportedLanguage( |
- const std::string& page_language) { |
- return supported_languages_.count(page_language) != 0; |
+bool TranslateLanguageList::IsSupportedLanguage(const std::string& language) { |
+ return supported_languages_.count(language) != 0; |
} |
-void TranslateLanguageList::RequestLanguageList() { |
- if (url_fetcher_.get()) |
- return; |
- |
- GURL language_list_fetch_url = GURL(kLanguageListFetchURL); |
- language_list_fetch_url = |
- TranslateURLUtil::AddHostLocaleToUrl(language_list_fetch_url); |
- language_list_fetch_url = |
- TranslateURLUtil::AddApiKeyToUrl(language_list_fetch_url); |
- |
- const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
- if (command_line.HasSwitch(switches::kEnableTranslateAlphaLanguages)) { |
- language_list_fetch_url = net::AppendQueryParameter( |
- language_list_fetch_url, |
- kAlphaLanguageQueryName, |
- kAlphaLanguageQueryValue); |
- } |
- |
- VLOG(9) << "Fetch supporting language list from: " |
- << language_list_fetch_url.spec().c_str(); |
+bool TranslateLanguageList::IsAlphaLanguage(const std::string& language) { |
+ return supported_alpha_languages_.count(language) != 0; |
+} |
- url_fetcher_.reset(net::URLFetcher::Create(1, |
- language_list_fetch_url, |
- net::URLFetcher::GET, |
- this)); |
- url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES | |
- net::LOAD_DO_NOT_SAVE_COOKIES); |
- url_fetcher_->SetRequestContext(g_browser_process->system_request_context()); |
- url_fetcher_->SetMaxRetriesOn5xx(kMaxRetryLanguageListFetch); |
- url_fetcher_->Start(); |
+void TranslateLanguageList::RequestLanguageList() { |
+ FetchLanguageList(false); |
} |
void TranslateLanguageList::SetSupportedLanguages( |
@@ -231,12 +213,66 @@ void TranslateLanguageList::SetSupportedLanguages( |
NOTREACHED(); |
return; |
} |
- // Now we can clear our current state... |
- supported_languages_.clear(); |
- // ... and replace it with the values we just fetched from the server. |
- for (DictionaryValue::Iterator iter(*target_languages); |
- !iter.IsAtEnd(); |
- iter.Advance()) { |
- supported_languages_.insert(iter.key()); |
+ |
+ if (!requesting_alpha_) { |
MAD
2013/05/29 14:09:32
SetSupportedLanguages should receive an argument a
Takashi Toyoshima
2013/05/30 06:25:31
Done.
|
+ // Now we can clear language list. |
+ supported_languages_.clear(); |
+ // ... and replace it with the values we just fetched from the server. |
+ for (DictionaryValue::Iterator iter(*target_languages); |
+ !iter.IsAtEnd(); |
+ iter.Advance()) { |
+ supported_languages_.insert(iter.key()); |
+ } |
+ } else { |
+ // Now we can clear alpha language list. |
+ supported_alpha_languages_.clear(); |
+ // ... and add languages they are not in the supporting list to alpha |
+ // language list. |
+ for (DictionaryValue::Iterator iter(*target_languages); |
+ !iter.IsAtEnd(); |
+ iter.Advance()) { |
+ if (IsSupportedLanguage(iter.key())) |
+ continue; |
+ // TODO(toyoshim): Check if UI libraries support adding locale. |
+ supported_alpha_languages_.insert(iter.key()); |
+ supported_languages_.insert(iter.key()); |
MAD
2013/05/30 14:17:59
You used to add alpha languages to both lists, and
Takashi Toyoshima
2013/05/30 14:41:38
Original logic is expected that stable list is fet
|
+ } |
+ } |
+} |
+ |
+void TranslateLanguageList::FetchLanguageList(bool alpha) { |
+ if (url_fetcher_.get()) |
+ return; |
+ |
+ GURL language_list_fetch_url = GURL(kLanguageListFetchURL); |
+ language_list_fetch_url = |
+ TranslateURLUtil::AddHostLocaleToUrl(language_list_fetch_url); |
+ language_list_fetch_url = |
+ TranslateURLUtil::AddApiKeyToUrl(language_list_fetch_url); |
+ |
+ if (alpha) { |
+ const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
+ if (!command_line.HasSwitch(switches::kEnableTranslateAlphaLanguages)) |
+ return; |
+ |
+ language_list_fetch_url = net::AppendQueryParameter( |
+ language_list_fetch_url, |
+ kAlphaLanguageQueryName, |
+ kAlphaLanguageQueryValue); |
+ |
+ requesting_alpha_ = true; |
} |
+ |
+ VLOG(9) << "Fetch supporting language list from: " |
+ << language_list_fetch_url.spec().c_str(); |
+ |
+ url_fetcher_.reset(net::URLFetcher::Create(1, |
+ language_list_fetch_url, |
+ net::URLFetcher::GET, |
+ this)); |
+ url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES | |
+ net::LOAD_DO_NOT_SAVE_COOKIES); |
+ url_fetcher_->SetRequestContext(g_browser_process->system_request_context()); |
+ url_fetcher_->SetMaxRetriesOn5xx(kMaxRetryLanguageListFetch); |
+ url_fetcher_->Start(); |
} |