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

Side by Side Diff: chrome/browser/translate/translate_language_list.cc

Issue 15470004: Translate: display alpha language name with (alpha) suffix (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update resource description 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/translate/translate_language_list.h" 5 #include "chrome/browser/translate/translate_language_list.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 104
105 // Retry parameter for fetching supporting language list. 105 // Retry parameter for fetching supporting language list.
106 const int kMaxRetryLanguageListFetch = 5; 106 const int kMaxRetryLanguageListFetch = 5;
107 107
108 } // namespace 108 } // namespace
109 109
110 // This must be kept in sync with the &cb= value in the kLanguageListFetchURL. 110 // This must be kept in sync with the &cb= value in the kLanguageListFetchURL.
111 const char TranslateLanguageList::kLanguageListCallbackName[] = "sl("; 111 const char TranslateLanguageList::kLanguageListCallbackName[] = "sl(";
112 const char TranslateLanguageList::kTargetLanguagesKey[] = "tl"; 112 const char TranslateLanguageList::kTargetLanguagesKey[] = "tl";
113 113
114 TranslateLanguageList::TranslateLanguageList() { 114 TranslateLanguageList::TranslateLanguageList() : requesting_alpha_(false) {
115 // We default to our hard coded list of languages in 115 // We default to our hard coded list of languages in
116 // |kDefaultSupportedLanguages|. This list will be overriden by a server 116 // |kDefaultSupportedLanguages|. This list will be overriden by a server
117 // providing supported langauges list. 117 // providing supported langauges list.
118 for (size_t i = 0; i < arraysize(kDefaultSupportedLanguages); ++i) 118 for (size_t i = 0; i < arraysize(kDefaultSupportedLanguages); ++i)
119 supported_languages_.insert(kDefaultSupportedLanguages[i]); 119 supported_languages_.insert(kDefaultSupportedLanguages[i]);
120 } 120 }
121 121
122 TranslateLanguageList::~TranslateLanguageList() {} 122 TranslateLanguageList::~TranslateLanguageList() {}
123 123
124 void TranslateLanguageList::OnURLFetchComplete(const net::URLFetcher* source) { 124 void TranslateLanguageList::OnURLFetchComplete(const net::URLFetcher* source) {
125 DCHECK(url_fetcher_.get() == source); 125 DCHECK(url_fetcher_.get() == source);
126 scoped_ptr<const net::URLFetcher> delete_ptr(url_fetcher_.release()); 126 scoped_ptr<const net::URLFetcher> delete_ptr(url_fetcher_.release());
127 127
128 if (source->GetStatus().status() == net::URLRequestStatus::SUCCESS && 128 if (source->GetStatus().status() == net::URLRequestStatus::SUCCESS &&
129 source->GetResponseCode() == net::HTTP_OK) { 129 source->GetResponseCode() == net::HTTP_OK) {
130 std::string data; 130 std::string data;
131 source->GetResponseAsString(&data); 131 source->GetResponseAsString(&data);
132 SetSupportedLanguages(data); 132 SetSupportedLanguages(data);
133 if (requesting_alpha_)
134 return;
135 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.
136 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.
133 } else { 137 } else {
134 // TODO(toyoshim): Try again. http://crbug.com/244202 . 138 // TODO(toyoshim): Try again. http://crbug.com/244202 .
139 // Also In CrOS, FetchLanguageList is not called at launching Chrome. It
140 // will solve this problem that check if FetchLanguageList is already
141 // called, and call it if needed in InitSupportedLanguage().
135 VLOG(9) << "Failed to Fetch languages from: " << kLanguageListFetchURL; 142 VLOG(9) << "Failed to Fetch languages from: " << kLanguageListFetchURL;
136 } 143 }
137 } 144 }
138 145
139 void TranslateLanguageList::GetSupportedLanguages( 146 void TranslateLanguageList::GetSupportedLanguages(
140 std::vector<std::string>* languages) { 147 std::vector<std::string>* languages) {
141 DCHECK(languages && languages->empty()); 148 DCHECK(languages && languages->empty());
142 std::set<std::string>::const_iterator iter = supported_languages_.begin(); 149 std::set<std::string>::const_iterator iter = supported_languages_.begin();
143 for (; iter != supported_languages_.end(); ++iter) 150 for (; iter != supported_languages_.end(); ++iter)
144 languages->push_back(*iter); 151 languages->push_back(*iter);
145 } 152 }
146 153
147 std::string TranslateLanguageList::GetLanguageCode( 154 std::string TranslateLanguageList::GetLanguageCode(
148 const std::string& chrome_locale) { 155 const std::string& chrome_locale) {
149 // Only remove the country code for country specific languages we don't 156 // Only remove the country code for country specific languages we don't
150 // support specifically yet. 157 // support specifically yet.
151 if (IsSupportedLanguage(chrome_locale)) 158 if (IsSupportedLanguage(chrome_locale))
152 return chrome_locale; 159 return chrome_locale;
153 160
154 size_t hypen_index = chrome_locale.find('-'); 161 size_t hypen_index = chrome_locale.find('-');
155 if (hypen_index == std::string::npos) 162 if (hypen_index == std::string::npos)
156 return chrome_locale; 163 return chrome_locale;
157 return chrome_locale.substr(0, hypen_index); 164 return chrome_locale.substr(0, hypen_index);
158 } 165 }
159 166
160 bool TranslateLanguageList::IsSupportedLanguage( 167 bool TranslateLanguageList::IsSupportedLanguage(const std::string& language) {
161 const std::string& page_language) { 168 return supported_languages_.count(language) != 0;
162 return supported_languages_.count(page_language) != 0; 169 }
170
171 bool TranslateLanguageList::IsAlphaLanguage(const std::string& language) {
172 return supported_alpha_languages_.count(language) != 0;
163 } 173 }
164 174
165 void TranslateLanguageList::RequestLanguageList() { 175 void TranslateLanguageList::RequestLanguageList() {
166 if (url_fetcher_.get()) 176 FetchLanguageList(false);
167 return;
168
169 GURL language_list_fetch_url = GURL(kLanguageListFetchURL);
170 language_list_fetch_url =
171 TranslateURLUtil::AddHostLocaleToUrl(language_list_fetch_url);
172 language_list_fetch_url =
173 TranslateURLUtil::AddApiKeyToUrl(language_list_fetch_url);
174
175 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
176 if (command_line.HasSwitch(switches::kEnableTranslateAlphaLanguages)) {
177 language_list_fetch_url = net::AppendQueryParameter(
178 language_list_fetch_url,
179 kAlphaLanguageQueryName,
180 kAlphaLanguageQueryValue);
181 }
182
183 VLOG(9) << "Fetch supporting language list from: "
184 << language_list_fetch_url.spec().c_str();
185
186 url_fetcher_.reset(net::URLFetcher::Create(1,
187 language_list_fetch_url,
188 net::URLFetcher::GET,
189 this));
190 url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
191 net::LOAD_DO_NOT_SAVE_COOKIES);
192 url_fetcher_->SetRequestContext(g_browser_process->system_request_context());
193 url_fetcher_->SetMaxRetriesOn5xx(kMaxRetryLanguageListFetch);
194 url_fetcher_->Start();
195 } 177 }
196 178
197 void TranslateLanguageList::SetSupportedLanguages( 179 void TranslateLanguageList::SetSupportedLanguages(
198 const std::string& language_list) { 180 const std::string& language_list) {
199 // The format is: 181 // The format is:
200 // sl({"sl": {"XX": "LanguageName", ...}, "tl": {"XX": "LanguageName", ...}}) 182 // sl({"sl": {"XX": "LanguageName", ...}, "tl": {"XX": "LanguageName", ...}})
201 // Where "sl(" is set in kLanguageListCallbackName 183 // Where "sl(" is set in kLanguageListCallbackName
202 // and "tl" is kTargetLanguagesKey 184 // and "tl" is kTargetLanguagesKey
203 if (!StartsWithASCII(language_list, 185 if (!StartsWithASCII(language_list,
204 TranslateLanguageList::kLanguageListCallbackName, 186 TranslateLanguageList::kLanguageListCallbackName,
(...skipping 19 matching lines...) Expand all
224 // and the other for target languages, we want to use the target languages. 206 // and the other for target languages, we want to use the target languages.
225 DictionaryValue* language_dict = 207 DictionaryValue* language_dict =
226 static_cast<DictionaryValue*>(json_value.get()); 208 static_cast<DictionaryValue*>(json_value.get());
227 DictionaryValue* target_languages = NULL; 209 DictionaryValue* target_languages = NULL;
228 if (!language_dict->GetDictionary(TranslateLanguageList::kTargetLanguagesKey, 210 if (!language_dict->GetDictionary(TranslateLanguageList::kTargetLanguagesKey,
229 &target_languages) || 211 &target_languages) ||
230 target_languages == NULL) { 212 target_languages == NULL) {
231 NOTREACHED(); 213 NOTREACHED();
232 return; 214 return;
233 } 215 }
234 // Now we can clear our current state... 216
235 supported_languages_.clear(); 217 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.
236 // ... and replace it with the values we just fetched from the server. 218 // Now we can clear language list.
237 for (DictionaryValue::Iterator iter(*target_languages); 219 supported_languages_.clear();
238 !iter.IsAtEnd(); 220 // ... and replace it with the values we just fetched from the server.
239 iter.Advance()) { 221 for (DictionaryValue::Iterator iter(*target_languages);
240 supported_languages_.insert(iter.key()); 222 !iter.IsAtEnd();
223 iter.Advance()) {
224 supported_languages_.insert(iter.key());
225 }
226 } else {
227 // Now we can clear alpha language list.
228 supported_alpha_languages_.clear();
229 // ... and add languages they are not in the supporting list to alpha
230 // language list.
231 for (DictionaryValue::Iterator iter(*target_languages);
232 !iter.IsAtEnd();
233 iter.Advance()) {
234 if (IsSupportedLanguage(iter.key()))
235 continue;
236 // TODO(toyoshim): Check if UI libraries support adding locale.
237 supported_alpha_languages_.insert(iter.key());
238 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
239 }
241 } 240 }
242 } 241 }
242
243 void TranslateLanguageList::FetchLanguageList(bool alpha) {
244 if (url_fetcher_.get())
245 return;
246
247 GURL language_list_fetch_url = GURL(kLanguageListFetchURL);
248 language_list_fetch_url =
249 TranslateURLUtil::AddHostLocaleToUrl(language_list_fetch_url);
250 language_list_fetch_url =
251 TranslateURLUtil::AddApiKeyToUrl(language_list_fetch_url);
252
253 if (alpha) {
254 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
255 if (!command_line.HasSwitch(switches::kEnableTranslateAlphaLanguages))
256 return;
257
258 language_list_fetch_url = net::AppendQueryParameter(
259 language_list_fetch_url,
260 kAlphaLanguageQueryName,
261 kAlphaLanguageQueryValue);
262
263 requesting_alpha_ = true;
264 }
265
266 VLOG(9) << "Fetch supporting language list from: "
267 << language_list_fetch_url.spec().c_str();
268
269 url_fetcher_.reset(net::URLFetcher::Create(1,
270 language_list_fetch_url,
271 net::URLFetcher::GET,
272 this));
273 url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
274 net::LOAD_DO_NOT_SAVE_COOKIES);
275 url_fetcher_->SetRequestContext(g_browser_process->system_request_context());
276 url_fetcher_->SetMaxRetriesOn5xx(kMaxRetryLanguageListFetch);
277 url_fetcher_->Start();
278 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698