OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 } |
OLD | NEW |