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

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 typo 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 (c) 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 #if defined(OS_CHROMEOS)
83 const char* preferred_languages_pref,
84 #endif
85 const char* accept_languages_pref)
86 : accept_languages_pref_(accept_languages_pref),
87 #if defined(OS_CHROMEOS)
88 preferred_languages_pref_(preferred_languages_pref),
89 #endif
90 prefs_(user_prefs) {
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(bool is_accept_language,
291 bool TranslatePrefs::CanTranslateLanguage(Profile* profile,
292 const std::string& language) { 289 const std::string& language) {
293 TranslatePrefs translate_prefs(profile->GetPrefs());
294 bool blocked = translate_prefs.IsBlockedLanguage(language);
295
296 TranslateAcceptLanguages* accept_languages =
blundell 2014/02/12 14:01:43 Bikeshedding: It seems to me that an alternative f
droger 2014/02/12 14:08:23 I'm a bit scared because this assumes that the Tra
droger 2014/02/12 14:38:47 With your suggestion, this method can also no long
297 TranslateAcceptLanguagesFactory::GetForBrowserContext(profile);
298 bool is_accept_language = accept_languages->IsAcceptLanguage(language);
299 bool can_be_accept_language = 290 bool can_be_accept_language =
300 TranslateAcceptLanguages::CanBeAcceptLanguage(language); 291 TranslateAcceptLanguages::CanBeAcceptLanguage(language);
301 292
302 // Don't translate any user black-listed languages. Checking 293 // Don't translate any user black-listed languages. Checking
303 // |is_accept_language| is necessary because if the user eliminates the 294 // |is_accept_language| is necessary because if the user eliminates the
304 // language from the preference, it is natural to forget whether or not 295 // language from the preference, it is natural to forget whether or not
305 // the language should be translated. Checking |cannot_be_accept_language| 296 // the language should be translated. Checking |cannot_be_accept_language|
306 // is also necessary because some minor languages can't be selected in the 297 // is also necessary because some minor languages can't be selected in the
307 // language preference even though the language is available in Translate 298 // language preference even though the language is available in Translate
308 // server. 299 // server.
309 if (blocked && (is_accept_language || !can_be_accept_language)) 300 if (IsBlockedLanguage(language) &&
301 (is_accept_language || !can_be_accept_language))
310 return false; 302 return false;
311 303
312 return true; 304 return true;
313 } 305 }
314 306
315 // static 307 bool TranslatePrefs::ShouldAutoTranslate(const std::string& original_language,
316 bool TranslatePrefs::ShouldAutoTranslate(PrefService* user_prefs, 308 std::string* target_language) {
317 const std::string& original_language, std::string* target_language) { 309 const base::DictionaryValue* dict =
318 TranslatePrefs prefs(user_prefs); 310 prefs_->GetDictionary(kPrefTranslateWhitelists);
319 return prefs.IsLanguageWhitelisted(original_language, target_language); 311 if (dict && dict->GetString(original_language, target_language)) {
312 DCHECK(!target_language->empty());
313 return !target_language->empty();
314 }
315 return false;
320 } 316 }
321 317
322 // static 318 // static
323 void TranslatePrefs::RegisterProfilePrefs( 319 void TranslatePrefs::RegisterProfilePrefs(
324 user_prefs::PrefRegistrySyncable* registry) { 320 user_prefs::PrefRegistrySyncable* registry) {
325 registry->RegisterListPref(kPrefTranslateLanguageBlacklist, 321 registry->RegisterListPref(kPrefTranslateLanguageBlacklist,
326 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 322 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
327 registry->RegisterListPref(kPrefTranslateSiteBlacklist, 323 registry->RegisterListPref(kPrefTranslateSiteBlacklist,
328 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 324 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
329 registry->RegisterDictionaryPref( 325 registry->RegisterDictionaryPref(
330 kPrefTranslateWhitelists, 326 kPrefTranslateWhitelists,
331 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 327 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
332 registry->RegisterDictionaryPref( 328 registry->RegisterDictionaryPref(
333 kPrefTranslateDeniedCount, 329 kPrefTranslateDeniedCount,
334 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 330 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
335 registry->RegisterDictionaryPref( 331 registry->RegisterDictionaryPref(
336 kPrefTranslateAcceptedCount, 332 kPrefTranslateAcceptedCount,
337 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 333 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
338 registry->RegisterListPref(kPrefTranslateBlockedLanguages, 334 registry->RegisterListPref(kPrefTranslateBlockedLanguages,
339 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 335 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
340 } 336 }
341 337
342 // static 338 // static
343 void TranslatePrefs::MigrateUserPrefs(PrefService* user_prefs) { 339 void TranslatePrefs::MigrateUserPrefs(PrefService* user_prefs,
340 const char* accept_languages_pref) {
344 // Old format of kPrefTranslateWhitelists 341 // Old format of kPrefTranslateWhitelists
345 // - original language -> list of target langs to auto-translate 342 // - 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 343 // - list of langs is in order of being enabled i.e. last in list is the
347 // most recent language that user enabled via 344 // most recent language that user enabled via
348 // Always translate |source_lang| to |target_lang|" 345 // Always translate |source_lang| to |target_lang|"
349 // - this results in a one-to-n relationship between source lang and target 346 // - this results in a one-to-n relationship between source lang and target
350 // langs. 347 // langs.
351 // New format: 348 // New format:
352 // - original language -> one target language to auto-translate 349 // - original language -> one target language to auto-translate
353 // - each time that the user enables the "Always translate..." option, that 350 // - 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. 383 // used after launching the settings UI.
387 // After that, Set 'translate_languages_not_translate' to Accept languages to 384 // After that, Set 'translate_languages_not_translate' to Accept languages to
388 // enable settings for users. 385 // enable settings for users.
389 bool merged = user_prefs->HasPrefPath(kPrefTranslateBlockedLanguages); 386 bool merged = user_prefs->HasPrefPath(kPrefTranslateBlockedLanguages);
390 387
391 if (!merged) { 388 if (!merged) {
392 std::vector<std::string> blacklisted_languages; 389 std::vector<std::string> blacklisted_languages;
393 GetBlacklistedLanguages(user_prefs, &blacklisted_languages); 390 GetBlacklistedLanguages(user_prefs, &blacklisted_languages);
394 391
395 std::string accept_languages_str = 392 std::string accept_languages_str =
396 user_prefs->GetString(prefs::kAcceptLanguages); 393 user_prefs->GetString(accept_languages_pref);
397 std::vector<std::string> accept_languages; 394 std::vector<std::string> accept_languages;
398 base::SplitString(accept_languages_str, ',', &accept_languages); 395 base::SplitString(accept_languages_str, ',', &accept_languages);
399 396
400 std::vector<std::string> blocked_languages; 397 std::vector<std::string> blocked_languages;
401 CreateBlockedLanguages(&blocked_languages, 398 CreateBlockedLanguages(
402 blacklisted_languages, 399 &blocked_languages, blacklisted_languages, accept_languages);
403 accept_languages);
404 400
405 // Create the new preference kPrefTranslateBlockedLanguages. 401 // Create the new preference kPrefTranslateBlockedLanguages.
406 { 402 {
407 base::ListValue blocked_languages_list; 403 base::ListValue blocked_languages_list;
408 for (std::vector<std::string>::const_iterator it = 404 for (std::vector<std::string>::const_iterator it =
409 blocked_languages.begin(); 405 blocked_languages.begin();
410 it != blocked_languages.end(); ++it) { 406 it != blocked_languages.end(); ++it) {
411 blocked_languages_list.Append(new base::StringValue(*it)); 407 blocked_languages_list.Append(new base::StringValue(*it));
412 } 408 }
413 ListPrefUpdate update(user_prefs, kPrefTranslateBlockedLanguages); 409 ListPrefUpdate update(user_prefs, kPrefTranslateBlockedLanguages);
414 base::ListValue* list = update.Get(); 410 base::ListValue* list = update.Get();
415 DCHECK(list != NULL); 411 DCHECK(list != NULL);
416 list->Swap(&blocked_languages_list); 412 list->Swap(&blocked_languages_list);
417 } 413 }
418 414
419 // Update kAcceptLanguages 415 // Update kAcceptLanguages
420 for (std::vector<std::string>::const_iterator it = 416 for (std::vector<std::string>::const_iterator it =
421 blocked_languages.begin(); 417 blocked_languages.begin();
422 it != blocked_languages.end(); ++it) { 418 it != blocked_languages.end(); ++it) {
423 std::string lang = *it; 419 std::string lang = *it;
424 translate::ToChromeLanguageSynonym(&lang); 420 translate::ToChromeLanguageSynonym(&lang);
425 bool not_found = 421 bool not_found =
426 std::find(accept_languages.begin(), accept_languages.end(), lang) == 422 std::find(accept_languages.begin(), accept_languages.end(), lang) ==
427 accept_languages.end(); 423 accept_languages.end();
428 if (not_found) 424 if (not_found)
429 accept_languages.push_back(lang); 425 accept_languages.push_back(lang);
430 } 426 }
431 427
432 std::string new_accept_languages_str = JoinString(accept_languages, ","); 428 std::string new_accept_languages_str = JoinString(accept_languages, ",");
433 user_prefs->SetString(prefs::kAcceptLanguages, new_accept_languages_str); 429 user_prefs->SetString(accept_languages_pref, new_accept_languages_str);
434 } 430 }
435 } 431 }
436 432
437 // static 433 // static
438 void TranslatePrefs::CreateBlockedLanguages( 434 void TranslatePrefs::CreateBlockedLanguages(
439 std::vector<std::string>* blocked_languages, 435 std::vector<std::string>* blocked_languages,
440 const std::vector<std::string>& blacklisted_languages, 436 const std::vector<std::string>& blacklisted_languages,
441 const std::vector<std::string>& accept_languages) { 437 const std::vector<std::string>& accept_languages) {
442 DCHECK(blocked_languages); 438 DCHECK(blocked_languages);
443 DCHECK(blocked_languages->empty()); 439 DCHECK(blocked_languages->empty());
444 440
445 std::set<std::string> result; 441 std::set<std::string> result;
446 442
447 for (std::vector<std::string>::const_iterator it = 443 for (std::vector<std::string>::const_iterator it =
448 blacklisted_languages.begin(); 444 blacklisted_languages.begin();
449 it != blacklisted_languages.end(); ++it) { 445 it != blacklisted_languages.end(); ++it) {
450 result.insert(*it); 446 result.insert(*it);
451 } 447 }
452 448
453 const std::string& app_locale = g_browser_process->GetApplicationLocale(); 449 const std::string& app_locale =
450 TranslateDownloadManager::GetInstance()->application_locale();
454 std::string ui_lang = TranslateDownloadManager::GetLanguageCode(app_locale); 451 std::string ui_lang = TranslateDownloadManager::GetLanguageCode(app_locale);
455 bool is_ui_english = ui_lang == "en" || 452 bool is_ui_english = ui_lang == "en" ||
456 StartsWithASCII(ui_lang, "en-", false); 453 StartsWithASCII(ui_lang, "en-", false);
457 454
458 for (std::vector<std::string>::const_iterator it = accept_languages.begin(); 455 for (std::vector<std::string>::const_iterator it = accept_languages.begin();
459 it != accept_languages.end(); ++it) { 456 it != accept_languages.end(); ++it) {
460 std::string converted_lang = ConvertLangCodeForTranslation(*it); 457 std::string converted_lang = ConvertLangCodeForTranslation(*it);
461 458
462 // Regarding http://crbug.com/36182, even though English exists in Accept 459 // Regarding http://crbug.com/36182, even though English exists in Accept
463 // language list, English could be translated on non-English locale. 460 // language list, English could be translated on non-English locale.
464 if (converted_lang == "en" && !is_ui_english) 461 if (converted_lang == "en" && !is_ui_english)
465 continue; 462 continue;
466 463
467 result.insert(converted_lang); 464 result.insert(converted_lang);
468 } 465 }
469 466
470 blocked_languages->insert(blocked_languages->begin(), 467 blocked_languages->insert(
471 result.begin(), result.end()); 468 blocked_languages->begin(), result.begin(), result.end());
472 } 469 }
473 470
474 // static 471 // static
475 std::string TranslatePrefs::ConvertLangCodeForTranslation( 472 std::string TranslatePrefs::ConvertLangCodeForTranslation(
476 const std::string &lang) { 473 const std::string& lang) {
477 std::vector<std::string> tokens; 474 std::vector<std::string> tokens;
478 base::SplitString(lang, '-', &tokens); 475 base::SplitString(lang, '-', &tokens);
479 if (tokens.size() < 1) 476 if (tokens.size() < 1)
480 return lang; 477 return lang;
481 478
482 std::string main_part = tokens[0]; 479 std::string main_part = tokens[0];
483 480
484 // Translate doesn't support General Chinese and the sub code is necessary. 481 // Translate doesn't support General Chinese and the sub code is necessary.
485 if (main_part == "zh") 482 if (main_part == "zh")
486 return lang; 483 return lang;
487 484
488 translate::ToTranslateLanguageSynonym(&main_part); 485 translate::ToTranslateLanguageSynonym(&main_part);
489 return main_part; 486 return main_part;
490 } 487 }
491 488
492 bool TranslatePrefs::IsValueInList(const base::ListValue* list, 489 bool TranslatePrefs::IsValueInList(const base::ListValue* list,
493 const std::string& in_value) const { 490 const std::string& in_value) const {
494 for (size_t i = 0; i < list->GetSize(); ++i) { 491 for (size_t i = 0; i < list->GetSize(); ++i) {
495 std::string value; 492 std::string value;
496 if (list->GetString(i, &value) && value == in_value) 493 if (list->GetString(i, &value) && value == in_value)
497 return true; 494 return true;
498 } 495 }
499 return false; 496 return false;
500 } 497 }
501 498
502 bool TranslatePrefs::IsValueBlacklisted(const char* pref_id, 499 bool TranslatePrefs::IsValueBlacklisted(const char* pref_id,
503 const std::string& value) const { 500 const std::string& value) const {
504 const base::ListValue* blacklist = prefs_->GetList(pref_id); 501 const base::ListValue* blacklist = prefs_->GetList(pref_id);
505 return (blacklist && !blacklist->empty() && IsValueInList(blacklist, value)); 502 return (blacklist && !blacklist->empty() && IsValueInList(blacklist, value));
506 } 503 }
507 504
508 void TranslatePrefs::BlacklistValue(const char* pref_id, 505 void TranslatePrefs::BlacklistValue(const char* pref_id,
509 const std::string& value) { 506 const std::string& value) {
510 { 507 {
511 ListPrefUpdate update(prefs_, pref_id); 508 ListPrefUpdate update(prefs_, pref_id);
512 base::ListValue* blacklist = update.Get(); 509 base::ListValue* blacklist = update.Get();
513 if (!blacklist) { 510 if (!blacklist) {
514 NOTREACHED() << "Unregistered translate blacklist pref"; 511 NOTREACHED() << "Unregistered translate blacklist pref";
515 return; 512 return;
516 } 513 }
517 blacklist->Append(new base::StringValue(value)); 514 blacklist->Append(new base::StringValue(value));
518 } 515 }
519 } 516 }
520 517
521 void TranslatePrefs::RemoveValueFromBlacklist(const char* pref_id, 518 void TranslatePrefs::RemoveValueFromBlacklist(const char* pref_id,
522 const std::string& value) { 519 const std::string& value) {
523 ListPrefUpdate update(prefs_, pref_id); 520 ListPrefUpdate update(prefs_, pref_id);
524 base::ListValue* blacklist = update.Get(); 521 base::ListValue* blacklist = update.Get();
525 if (!blacklist) { 522 if (!blacklist) {
526 NOTREACHED() << "Unregistered translate blacklist pref"; 523 NOTREACHED() << "Unregistered translate blacklist pref";
527 return; 524 return;
528 } 525 }
529 base::StringValue string_value(value); 526 base::StringValue string_value(value);
530 blacklist->Remove(string_value, NULL); 527 blacklist->Remove(string_value, NULL);
531 } 528 }
532 529
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 { 530 bool TranslatePrefs::IsListEmpty(const char* pref_id) const {
545 const base::ListValue* blacklist = prefs_->GetList(pref_id); 531 const base::ListValue* blacklist = prefs_->GetList(pref_id);
546 return (blacklist == NULL || blacklist->empty()); 532 return (blacklist == NULL || blacklist->empty());
547 } 533 }
548 534
549 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const { 535 bool TranslatePrefs::IsDictionaryEmpty(const char* pref_id) const {
550 const base::DictionaryValue* dict = prefs_->GetDictionary(pref_id); 536 const base::DictionaryValue* dict = prefs_->GetDictionary(pref_id);
551 return (dict == NULL || dict->empty()); 537 return (dict == NULL || dict->empty());
552 } 538 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698