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

Side by Side Diff: components/translate/core/browser/translate_prefs.cc

Issue 159883002: Move TranslatePrefs to the Translate component (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@acceptLanguages
Patch Set: Fix ChromeOS browsertests Created 6 years, 10 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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_prefs.h" 5 #include "components/translate/core/browser/translate_prefs.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/prefs/pref_service.h" 9 #include "base/prefs/pref_service.h"
10 #include "base/prefs/scoped_user_pref_update.h" 10 #include "base/prefs/scoped_user_pref_update.h"
11 #include "base/strings/string_split.h" 11 #include "base/strings/string_split.h"
12 #include "base/strings/string_util.h" 12 #include "base/strings/string_util.h"
13 #include "chrome/browser/browser_process.h"
14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/translate/translate_accept_languages_factory.h"
16 #include "chrome/browser/translate/translate_manager.h"
17 #include "chrome/common/pref_names.h"
18 #include "components/translate/core/browser/translate_accept_languages.h" 13 #include "components/translate/core/browser/translate_accept_languages.h"
19 #include "components/translate/core/browser/translate_download_manager.h" 14 #include "components/translate/core/browser/translate_download_manager.h"
20 #include "components/translate/core/common/translate_util.h" 15 #include "components/translate/core/common/translate_util.h"
21 #include "components/user_prefs/pref_registry_syncable.h" 16 #include "components/user_prefs/pref_registry_syncable.h"
22 17
23 const char TranslatePrefs::kPrefTranslateLanguageBlacklist[] = 18 const char TranslatePrefs::kPrefTranslateLanguageBlacklist[] =
24 "translate_language_blacklist"; 19 "translate_language_blacklist";
25 const char TranslatePrefs::kPrefTranslateSiteBlacklist[] = 20 const char TranslatePrefs::kPrefTranslateSiteBlacklist[] =
26 "translate_site_blacklist"; 21 "translate_site_blacklist";
27 const char TranslatePrefs::kPrefTranslateWhitelists[] = 22 const char TranslatePrefs::kPrefTranslateWhitelists[] =
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 const std::string& main_part = tokens[0]; 71 const std::string& main_part = tokens[0];
77 if (seen.find(main_part) == seen.end()) { 72 if (seen.find(main_part) == seen.end()) {
78 expanded_languages->push_back(main_part); 73 expanded_languages->push_back(main_part);
79 seen.insert(main_part); 74 seen.insert(main_part);
80 } 75 }
81 } 76 }
82 } 77 }
83 78
84 } // namespace 79 } // namespace
85 80
86 TranslatePrefs::TranslatePrefs(PrefService* user_prefs) 81 TranslatePrefs::TranslatePrefs(PrefService* user_prefs,
87 : prefs_(user_prefs) { 82 const char* accept_languages_pref,
83 const char* preferred_languages_pref)
84 : accept_languages_pref_(accept_languages_pref),
85 prefs_(user_prefs) {
86 #if defined(OS_CHROMEOS)
87 preferred_languages_pref_ = preferred_languages_pref;
88 #else
89 DCHECK(!preferred_languages_pref);
90 #endif
88 } 91 }
89 92
90 void TranslatePrefs::ResetToDefaults() { 93 void TranslatePrefs::ResetToDefaults() {
91 ClearBlockedLanguages(); 94 ClearBlockedLanguages();
92 ClearBlacklistedSites(); 95 ClearBlacklistedSites();
93 ClearWhitelistedLanguagePairs(); 96 ClearWhitelistedLanguagePairs();
94 97
95 std::vector<std::string> languages; 98 std::vector<std::string> languages;
96 GetLanguageList(&languages); 99 GetLanguageList(&languages);
97 for (std::vector<std::string>::const_iterator it = languages.begin(); 100 for (std::vector<std::string>::const_iterator it = languages.begin();
98 it != languages.end(); ++it) { 101 it != languages.end(); ++it) {
99 const std::string& language = *it; 102 const std::string& language = *it;
100 ResetTranslationAcceptedCount(language); 103 ResetTranslationAcceptedCount(language);
101 ResetTranslationDeniedCount(language); 104 ResetTranslationDeniedCount(language);
102 } 105 }
103 } 106 }
104 107
105 bool TranslatePrefs::IsBlockedLanguage( 108 bool TranslatePrefs::IsBlockedLanguage(
106 const std::string& original_language) const { 109 const std::string& original_language) const {
107 return IsValueBlacklisted(kPrefTranslateBlockedLanguages, 110 return IsValueBlacklisted(kPrefTranslateBlockedLanguages,
108 original_language); 111 original_language);
109 } 112 }
110 113
111 void TranslatePrefs::BlockLanguage( 114 void TranslatePrefs::BlockLanguage(const std::string& original_language) {
112 const std::string& original_language) {
113 BlacklistValue(kPrefTranslateBlockedLanguages, original_language); 115 BlacklistValue(kPrefTranslateBlockedLanguages, original_language);
114 116
115 // Add the language to the language list at chrome://settings/languages. 117 // Add the language to the language list at chrome://settings/languages.
116 std::string language = original_language; 118 std::string language = original_language;
117 translate::ToChromeLanguageSynonym(&language); 119 translate::ToChromeLanguageSynonym(&language);
118 120
119 std::vector<std::string> languages; 121 std::vector<std::string> languages;
120 GetLanguageList(&languages); 122 GetLanguageList(&languages);
121 123
122 if (std::find(languages.begin(), languages.end(), language) == 124 if (std::find(languages.begin(), languages.end(), language) ==
123 languages.end()) { 125 languages.end()) {
124 languages.push_back(language); 126 languages.push_back(language);
125 UpdateLanguageList(languages); 127 UpdateLanguageList(languages);
126 } 128 }
127 } 129 }
128 130
129 void TranslatePrefs::UnblockLanguage( 131 void TranslatePrefs::UnblockLanguage(const std::string& original_language) {
130 const std::string& original_language) { 132 RemoveValueFromBlacklist(kPrefTranslateBlockedLanguages, original_language);
131 RemoveValueFromBlacklist(kPrefTranslateBlockedLanguages,
132 original_language);
133 } 133 }
134 134
135 void TranslatePrefs::RemoveLanguageFromLegacyBlacklist( 135 void TranslatePrefs::RemoveLanguageFromLegacyBlacklist(
136 const std::string& original_language) { 136 const std::string& original_language) {
137 RemoveValueFromBlacklist(kPrefTranslateLanguageBlacklist, 137 RemoveValueFromBlacklist(kPrefTranslateLanguageBlacklist, original_language);
138 original_language);
139 } 138 }
140 139
141 bool TranslatePrefs::IsSiteBlacklisted(const std::string& site) const { 140 bool TranslatePrefs::IsSiteBlacklisted(const std::string& site) const {
142 return IsValueBlacklisted(kPrefTranslateSiteBlacklist, site); 141 return IsValueBlacklisted(kPrefTranslateSiteBlacklist, site);
143 } 142 }
144 143
145 void TranslatePrefs::BlacklistSite(const std::string& site) { 144 void TranslatePrefs::BlacklistSite(const std::string& site) {
146 BlacklistValue(kPrefTranslateSiteBlacklist, site); 145 BlacklistValue(kPrefTranslateSiteBlacklist, site);
147 } 146 }
148 147
149 void TranslatePrefs::RemoveSiteFromBlacklist(const std::string& site) { 148 void TranslatePrefs::RemoveSiteFromBlacklist(const std::string& site) {
150 RemoveValueFromBlacklist(kPrefTranslateSiteBlacklist, site); 149 RemoveValueFromBlacklist(kPrefTranslateSiteBlacklist, site);
151 } 150 }
152 151
153 bool TranslatePrefs::IsLanguagePairWhitelisted( 152 bool TranslatePrefs::IsLanguagePairWhitelisted(
154 const std::string& original_language, 153 const std::string& original_language,
155 const std::string& target_language) { 154 const std::string& target_language) {
156 const base::DictionaryValue* dict = 155 const base::DictionaryValue* dict =
157 prefs_->GetDictionary(kPrefTranslateWhitelists); 156 prefs_->GetDictionary(kPrefTranslateWhitelists);
158 if (dict && !dict->empty()) { 157 if (dict && !dict->empty()) {
159 std::string auto_target_lang; 158 std::string auto_target_lang;
160 if (dict->GetString(original_language, &auto_target_lang) && 159 if (dict->GetString(original_language, &auto_target_lang) &&
161 auto_target_lang == target_language) 160 auto_target_lang == target_language)
162 return true; 161 return true;
163 } 162 }
164 return false; 163 return false;
165 } 164 }
166 165
167 void TranslatePrefs::WhitelistLanguagePair( 166 void TranslatePrefs::WhitelistLanguagePair(const std::string& original_language,
168 const std::string& original_language, 167 const std::string& target_language) {
169 const std::string& target_language) {
170 DictionaryPrefUpdate update(prefs_, kPrefTranslateWhitelists); 168 DictionaryPrefUpdate update(prefs_, kPrefTranslateWhitelists);
171 base::DictionaryValue* dict = update.Get(); 169 base::DictionaryValue* dict = update.Get();
172 if (!dict) { 170 if (!dict) {
173 NOTREACHED() << "Unregistered translate whitelist pref"; 171 NOTREACHED() << "Unregistered translate whitelist pref";
174 return; 172 return;
175 } 173 }
176 dict->SetString(original_language, target_language); 174 dict->SetString(original_language, target_language);
177 } 175 }
178 176
179 void TranslatePrefs::RemoveLanguagePairFromWhitelist( 177 void TranslatePrefs::RemoveLanguagePairFromWhitelist(
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 const std::string& language) { 253 const std::string& language) {
256 DictionaryPrefUpdate update(prefs_, kPrefTranslateAcceptedCount); 254 DictionaryPrefUpdate update(prefs_, kPrefTranslateAcceptedCount);
257 update.Get()->SetInteger(language, 0); 255 update.Get()->SetInteger(language, 0);
258 } 256 }
259 257
260 void TranslatePrefs::GetLanguageList(std::vector<std::string>* languages) { 258 void TranslatePrefs::GetLanguageList(std::vector<std::string>* languages) {
261 DCHECK(languages); 259 DCHECK(languages);
262 DCHECK(languages->empty()); 260 DCHECK(languages->empty());
263 261
264 #if defined(OS_CHROMEOS) 262 #if defined(OS_CHROMEOS)
265 const char* key = prefs::kLanguagePreferredLanguages; 263 const char* key = preferred_languages_pref_.c_str();
266 #else 264 #else
267 const char* key = prefs::kAcceptLanguages; 265 const char* key = accept_languages_pref_.c_str();
268 #endif 266 #endif
269 267
270 std::string languages_str = prefs_->GetString(key); 268 std::string languages_str = prefs_->GetString(key);
271 base::SplitString(languages_str, ',', languages); 269 base::SplitString(languages_str, ',', languages);
272 } 270 }
273 271
274 void TranslatePrefs::UpdateLanguageList( 272 void TranslatePrefs::UpdateLanguageList(
275 const std::vector<std::string>& languages) { 273 const std::vector<std::string>& languages) {
276 #if defined(OS_CHROMEOS) 274 #if defined(OS_CHROMEOS)
277 std::string languages_str = JoinString(languages, ','); 275 std::string languages_str = JoinString(languages, ',');
278 prefs_->SetString(prefs::kLanguagePreferredLanguages, languages_str); 276 prefs_->SetString(preferred_languages_pref_.c_str(), languages_str);
279 #endif 277 #endif
280 278
281 // Save the same language list as accept languages preference as well, but we 279 // Save the same language list as accept languages preference as well, but we
282 // need to expand the language list, to make it more acceptable. For instance, 280 // need to expand the language list, to make it more acceptable. For instance,
283 // some web sites don't understand 'en-US' but 'en'. See crosbug.com/9884. 281 // some web sites don't understand 'en-US' but 'en'. See crosbug.com/9884.
284 std::vector<std::string> accept_languages; 282 std::vector<std::string> accept_languages;
285 ExpandLanguageCodes(languages, &accept_languages); 283 ExpandLanguageCodes(languages, &accept_languages);
286 std::string accept_languages_str = JoinString(accept_languages, ','); 284 std::string accept_languages_str = JoinString(accept_languages, ',');
287 prefs_->SetString(prefs::kAcceptLanguages, accept_languages_str); 285 prefs_->SetString(accept_languages_pref_.c_str(), accept_languages_str);
288 } 286 }
289 287
290 // static 288 bool TranslatePrefs::CanTranslateLanguage(
291 bool TranslatePrefs::CanTranslateLanguage(Profile* profile, 289 TranslateAcceptLanguages* accept_languages,
292 const std::string& language) { 290 const std::string& language) {
293 TranslatePrefs translate_prefs(profile->GetPrefs());
294 bool blocked = translate_prefs.IsBlockedLanguage(language);
295
296 TranslateAcceptLanguages* accept_languages =
297 TranslateAcceptLanguagesFactory::GetForBrowserContext(profile);
298 bool is_accept_language = accept_languages->IsAcceptLanguage(language);
299 bool can_be_accept_language = 291 bool can_be_accept_language =
300 TranslateAcceptLanguages::CanBeAcceptLanguage(language); 292 TranslateAcceptLanguages::CanBeAcceptLanguage(language);
293 bool is_accept_language = accept_languages->IsAcceptLanguage(language);
301 294
302 // Don't translate any user black-listed languages. Checking 295 // Don't translate any user black-listed languages. Checking
303 // |is_accept_language| is necessary because if the user eliminates the 296 // |is_accept_language| is necessary because if the user eliminates the
304 // language from the preference, it is natural to forget whether or not 297 // language from the preference, it is natural to forget whether or not
305 // the language should be translated. Checking |cannot_be_accept_language| 298 // the language should be translated. Checking |cannot_be_accept_language|
306 // is also necessary because some minor languages can't be selected in the 299 // is also necessary because some minor languages can't be selected in the
307 // language preference even though the language is available in Translate 300 // language preference even though the language is available in Translate
308 // server. 301 // server.
309 if (blocked && (is_accept_language || !can_be_accept_language)) 302 if (IsBlockedLanguage(language) &&
303 (is_accept_language || !can_be_accept_language))
310 return false; 304 return false;
311 305
312 return true; 306 return true;
313 } 307 }
314 308
315 // static 309 bool TranslatePrefs::ShouldAutoTranslate(const std::string& original_language,
316 bool TranslatePrefs::ShouldAutoTranslate(PrefService* user_prefs, 310 std::string* target_language) {
317 const std::string& original_language, std::string* target_language) { 311 const base::DictionaryValue* dict =
318 TranslatePrefs prefs(user_prefs); 312 prefs_->GetDictionary(kPrefTranslateWhitelists);
319 return prefs.IsLanguageWhitelisted(original_language, target_language); 313 if (dict && dict->GetString(original_language, target_language)) {
314 DCHECK(!target_language->empty());
315 return !target_language->empty();
316 }
317 return false;
320 } 318 }
321 319
322 // static 320 // static
323 void TranslatePrefs::RegisterProfilePrefs( 321 void TranslatePrefs::RegisterProfilePrefs(
324 user_prefs::PrefRegistrySyncable* registry) { 322 user_prefs::PrefRegistrySyncable* registry) {
325 registry->RegisterListPref(kPrefTranslateLanguageBlacklist, 323 registry->RegisterListPref(kPrefTranslateLanguageBlacklist,
326 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 324 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
327 registry->RegisterListPref(kPrefTranslateSiteBlacklist, 325 registry->RegisterListPref(kPrefTranslateSiteBlacklist,
328 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 326 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
329 registry->RegisterDictionaryPref( 327 registry->RegisterDictionaryPref(
330 kPrefTranslateWhitelists, 328 kPrefTranslateWhitelists,
331 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 329 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
332 registry->RegisterDictionaryPref( 330 registry->RegisterDictionaryPref(
333 kPrefTranslateDeniedCount, 331 kPrefTranslateDeniedCount,
334 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 332 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
335 registry->RegisterDictionaryPref( 333 registry->RegisterDictionaryPref(
336 kPrefTranslateAcceptedCount, 334 kPrefTranslateAcceptedCount,
337 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 335 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
338 registry->RegisterListPref(kPrefTranslateBlockedLanguages, 336 registry->RegisterListPref(kPrefTranslateBlockedLanguages,
339 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 337 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
340 } 338 }
341 339
342 // static 340 // static
343 void TranslatePrefs::MigrateUserPrefs(PrefService* user_prefs) { 341 void TranslatePrefs::MigrateUserPrefs(PrefService* user_prefs,
342 const char* accept_languages_pref) {
344 // Old format of kPrefTranslateWhitelists 343 // Old format of kPrefTranslateWhitelists
345 // - original language -> list of target langs to auto-translate 344 // - original language -> list of target langs to auto-translate
346 // - list of langs is in order of being enabled i.e. last in list is the 345 // - list of langs is in order of being enabled i.e. last in list is the
347 // most recent language that user enabled via 346 // most recent language that user enabled via
348 // Always translate |source_lang| to |target_lang|" 347 // Always translate |source_lang| to |target_lang|"
349 // - this results in a one-to-n relationship between source lang and target 348 // - this results in a one-to-n relationship between source lang and target
350 // langs. 349 // langs.
351 // New format: 350 // New format:
352 // - original language -> one target language to auto-translate 351 // - original language -> one target language to auto-translate
353 // - each time that the user enables the "Always translate..." option, that 352 // - each time that the user enables the "Always translate..." option, that
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 // used after launching the settings UI. 385 // used after launching the settings UI.
387 // After that, Set 'translate_languages_not_translate' to Accept languages to 386 // After that, Set 'translate_languages_not_translate' to Accept languages to
388 // enable settings for users. 387 // enable settings for users.
389 bool merged = user_prefs->HasPrefPath(kPrefTranslateBlockedLanguages); 388 bool merged = user_prefs->HasPrefPath(kPrefTranslateBlockedLanguages);
390 389
391 if (!merged) { 390 if (!merged) {
392 std::vector<std::string> blacklisted_languages; 391 std::vector<std::string> blacklisted_languages;
393 GetBlacklistedLanguages(user_prefs, &blacklisted_languages); 392 GetBlacklistedLanguages(user_prefs, &blacklisted_languages);
394 393
395 std::string accept_languages_str = 394 std::string accept_languages_str =
396 user_prefs->GetString(prefs::kAcceptLanguages); 395 user_prefs->GetString(accept_languages_pref);
397 std::vector<std::string> accept_languages; 396 std::vector<std::string> accept_languages;
398 base::SplitString(accept_languages_str, ',', &accept_languages); 397 base::SplitString(accept_languages_str, ',', &accept_languages);
399 398
400 std::vector<std::string> blocked_languages; 399 std::vector<std::string> blocked_languages;
401 CreateBlockedLanguages(&blocked_languages, 400 CreateBlockedLanguages(
402 blacklisted_languages, 401 &blocked_languages, blacklisted_languages, accept_languages);
403 accept_languages);
404 402
405 // Create the new preference kPrefTranslateBlockedLanguages. 403 // Create the new preference kPrefTranslateBlockedLanguages.
406 { 404 {
407 base::ListValue blocked_languages_list; 405 base::ListValue blocked_languages_list;
408 for (std::vector<std::string>::const_iterator it = 406 for (std::vector<std::string>::const_iterator it =
409 blocked_languages.begin(); 407 blocked_languages.begin();
410 it != blocked_languages.end(); ++it) { 408 it != blocked_languages.end(); ++it) {
411 blocked_languages_list.Append(new base::StringValue(*it)); 409 blocked_languages_list.Append(new base::StringValue(*it));
412 } 410 }
413 ListPrefUpdate update(user_prefs, kPrefTranslateBlockedLanguages); 411 ListPrefUpdate update(user_prefs, kPrefTranslateBlockedLanguages);
414 base::ListValue* list = update.Get(); 412 base::ListValue* list = update.Get();
415 DCHECK(list != NULL); 413 DCHECK(list != NULL);
416 list->Swap(&blocked_languages_list); 414 list->Swap(&blocked_languages_list);
417 } 415 }
418 416
419 // Update kAcceptLanguages 417 // Update kAcceptLanguages
420 for (std::vector<std::string>::const_iterator it = 418 for (std::vector<std::string>::const_iterator it =
421 blocked_languages.begin(); 419 blocked_languages.begin();
422 it != blocked_languages.end(); ++it) { 420 it != blocked_languages.end(); ++it) {
423 std::string lang = *it; 421 std::string lang = *it;
424 translate::ToChromeLanguageSynonym(&lang); 422 translate::ToChromeLanguageSynonym(&lang);
425 bool not_found = 423 bool not_found =
426 std::find(accept_languages.begin(), accept_languages.end(), lang) == 424 std::find(accept_languages.begin(), accept_languages.end(), lang) ==
427 accept_languages.end(); 425 accept_languages.end();
428 if (not_found) 426 if (not_found)
429 accept_languages.push_back(lang); 427 accept_languages.push_back(lang);
430 } 428 }
431 429
432 std::string new_accept_languages_str = JoinString(accept_languages, ","); 430 std::string new_accept_languages_str = JoinString(accept_languages, ",");
433 user_prefs->SetString(prefs::kAcceptLanguages, new_accept_languages_str); 431 user_prefs->SetString(accept_languages_pref, new_accept_languages_str);
434 } 432 }
435 } 433 }
436 434
437 // static 435 // static
438 void TranslatePrefs::CreateBlockedLanguages( 436 void TranslatePrefs::CreateBlockedLanguages(
439 std::vector<std::string>* blocked_languages, 437 std::vector<std::string>* blocked_languages,
440 const std::vector<std::string>& blacklisted_languages, 438 const std::vector<std::string>& blacklisted_languages,
441 const std::vector<std::string>& accept_languages) { 439 const std::vector<std::string>& accept_languages) {
442 DCHECK(blocked_languages); 440 DCHECK(blocked_languages);
443 DCHECK(blocked_languages->empty()); 441 DCHECK(blocked_languages->empty());
444 442
445 std::set<std::string> result; 443 std::set<std::string> result;
446 444
447 for (std::vector<std::string>::const_iterator it = 445 for (std::vector<std::string>::const_iterator it =
448 blacklisted_languages.begin(); 446 blacklisted_languages.begin();
449 it != blacklisted_languages.end(); ++it) { 447 it != blacklisted_languages.end(); ++it) {
450 result.insert(*it); 448 result.insert(*it);
451 } 449 }
452 450
453 const std::string& app_locale = g_browser_process->GetApplicationLocale(); 451 const std::string& app_locale =
452 TranslateDownloadManager::GetInstance()->application_locale();
454 std::string ui_lang = TranslateDownloadManager::GetLanguageCode(app_locale); 453 std::string ui_lang = TranslateDownloadManager::GetLanguageCode(app_locale);
455 bool is_ui_english = ui_lang == "en" || 454 bool is_ui_english = ui_lang == "en" ||
456 StartsWithASCII(ui_lang, "en-", false); 455 StartsWithASCII(ui_lang, "en-", false);
457 456
458 for (std::vector<std::string>::const_iterator it = accept_languages.begin(); 457 for (std::vector<std::string>::const_iterator it = accept_languages.begin();
459 it != accept_languages.end(); ++it) { 458 it != accept_languages.end(); ++it) {
460 std::string converted_lang = ConvertLangCodeForTranslation(*it); 459 std::string converted_lang = ConvertLangCodeForTranslation(*it);
461 460
462 // Regarding http://crbug.com/36182, even though English exists in Accept 461 // Regarding http://crbug.com/36182, even though English exists in Accept
463 // language list, English could be translated on non-English locale. 462 // language list, English could be translated on non-English locale.
464 if (converted_lang == "en" && !is_ui_english) 463 if (converted_lang == "en" && !is_ui_english)
465 continue; 464 continue;
466 465
467 result.insert(converted_lang); 466 result.insert(converted_lang);
468 } 467 }
469 468
470 blocked_languages->insert(blocked_languages->begin(), 469 blocked_languages->insert(
471 result.begin(), result.end()); 470 blocked_languages->begin(), result.begin(), result.end());
472 } 471 }
473 472
474 // static 473 // static
475 std::string TranslatePrefs::ConvertLangCodeForTranslation( 474 std::string TranslatePrefs::ConvertLangCodeForTranslation(
476 const std::string &lang) { 475 const std::string& lang) {
477 std::vector<std::string> tokens; 476 std::vector<std::string> tokens;
478 base::SplitString(lang, '-', &tokens); 477 base::SplitString(lang, '-', &tokens);
479 if (tokens.size() < 1) 478 if (tokens.size() < 1)
480 return lang; 479 return lang;
481 480
482 std::string main_part = tokens[0]; 481 std::string main_part = tokens[0];
483 482
484 // Translate doesn't support General Chinese and the sub code is necessary. 483 // Translate doesn't support General Chinese and the sub code is necessary.
485 if (main_part == "zh") 484 if (main_part == "zh")
486 return lang; 485 return lang;
487 486
488 translate::ToTranslateLanguageSynonym(&main_part); 487 translate::ToTranslateLanguageSynonym(&main_part);
489 return main_part; 488 return main_part;
490 } 489 }
491 490
492 bool TranslatePrefs::IsValueInList(const base::ListValue* list, 491 bool TranslatePrefs::IsValueInList(const base::ListValue* list,
493 const std::string& in_value) const { 492 const std::string& in_value) const {
494 for (size_t i = 0; i < list->GetSize(); ++i) { 493 for (size_t i = 0; i < list->GetSize(); ++i) {
495 std::string value; 494 std::string value;
496 if (list->GetString(i, &value) && value == in_value) 495 if (list->GetString(i, &value) && value == in_value)
497 return true; 496 return true;
498 } 497 }
499 return false; 498 return false;
500 } 499 }
501 500
502 bool TranslatePrefs::IsValueBlacklisted(const char* pref_id, 501 bool TranslatePrefs::IsValueBlacklisted(const char* pref_id,
503 const std::string& value) const { 502 const std::string& value) const {
504 const base::ListValue* blacklist = prefs_->GetList(pref_id); 503 const base::ListValue* blacklist = prefs_->GetList(pref_id);
505 return (blacklist && !blacklist->empty() && IsValueInList(blacklist, value)); 504 return (blacklist && !blacklist->empty() && IsValueInList(blacklist, value));
506 } 505 }
507 506
508 void TranslatePrefs::BlacklistValue(const char* pref_id, 507 void TranslatePrefs::BlacklistValue(const char* pref_id,
509 const std::string& value) { 508 const std::string& value) {
510 { 509 {
511 ListPrefUpdate update(prefs_, pref_id); 510 ListPrefUpdate update(prefs_, pref_id);
512 base::ListValue* blacklist = update.Get(); 511 base::ListValue* blacklist = update.Get();
513 if (!blacklist) { 512 if (!blacklist) {
514 NOTREACHED() << "Unregistered translate blacklist pref"; 513 NOTREACHED() << "Unregistered translate blacklist pref";
515 return; 514 return;
516 } 515 }
517 blacklist->Append(new base::StringValue(value)); 516 blacklist->Append(new base::StringValue(value));
518 } 517 }
519 } 518 }
520 519
521 void TranslatePrefs::RemoveValueFromBlacklist(const char* pref_id, 520 void TranslatePrefs::RemoveValueFromBlacklist(const char* pref_id,
522 const std::string& value) { 521 const std::string& value) {
523 ListPrefUpdate update(prefs_, pref_id); 522 ListPrefUpdate update(prefs_, pref_id);
524 base::ListValue* blacklist = update.Get(); 523 base::ListValue* blacklist = update.Get();
525 if (!blacklist) { 524 if (!blacklist) {
526 NOTREACHED() << "Unregistered translate blacklist pref"; 525 NOTREACHED() << "Unregistered translate blacklist pref";
527 return; 526 return;
528 } 527 }
529 base::StringValue string_value(value); 528 base::StringValue string_value(value);
530 blacklist->Remove(string_value, NULL); 529 blacklist->Remove(string_value, NULL);
531 } 530 }
532 531
533 bool TranslatePrefs::IsLanguageWhitelisted(
534 const std::string& original_language, std::string* target_language) const {
535 const base::DictionaryValue* dict =
536 prefs_->GetDictionary(kPrefTranslateWhitelists);
537 if (dict && dict->GetString(original_language, target_language)) {
538 DCHECK(!target_language->empty());
539 return !target_language->empty();
540 }
541 return false;
542 }
543
544 bool TranslatePrefs::IsListEmpty(const char* pref_id) const { 532 bool TranslatePrefs::IsListEmpty(const char* pref_id) const {
545 const base::ListValue* blacklist = prefs_->GetList(pref_id); 533 const base::ListValue* blacklist = prefs_->GetList(pref_id);
546 return (blacklist == NULL || blacklist->empty()); 534 return (blacklist == NULL || blacklist->empty());
547 } 535 }
548 536
549 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const { 537 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const {
550 const base::DictionaryValue* dict = prefs_->GetDictionary(pref_id); 538 const base::DictionaryValue* dict = prefs_->GetDictionary(pref_id);
551 return (dict == NULL || dict->empty()); 539 return (dict == NULL || dict->empty());
552 } 540 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698