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

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

Issue 1923143003: Implement the 2016Q2 Translate UI designe spec out in (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: minor changes in comments Created 4 years, 7 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/translate/core/browser/translate_ui_delegate.h" 5 #include "components/translate/core/browser/translate_ui_delegate.h"
6 6
7 #include "base/i18n/string_compare.h" 7 #include "base/i18n/string_compare.h"
8 #include "base/metrics/histogram_macros.h" 8 #include "base/metrics/histogram_macros.h"
9 #include "components/translate/core/browser/language_state.h" 9 #include "components/translate/core/browser/language_state.h"
10 #include "components/translate/core/browser/translate_client.h" 10 #include "components/translate/core/browser/translate_client.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 std::vector<std::string> language_codes; 64 std::vector<std::string> language_codes;
65 TranslateDownloadManager::GetSupportedLanguages(&language_codes); 65 TranslateDownloadManager::GetSupportedLanguages(&language_codes);
66 66
67 // Preparing for the alphabetical order in the locale. 67 // Preparing for the alphabetical order in the locale.
68 std::string locale = 68 std::string locale =
69 TranslateDownloadManager::GetInstance()->application_locale(); 69 TranslateDownloadManager::GetInstance()->application_locale();
70 std::unique_ptr<icu::Collator> collator = CreateCollator(locale); 70 std::unique_ptr<icu::Collator> collator = CreateCollator(locale);
71 71
72 languages_.reserve(language_codes.size()); 72 languages_.reserve(language_codes.size());
73 for (std::vector<std::string>::const_iterator iter = language_codes.begin(); 73 for (std::vector<std::string>::const_iterator iter = language_codes.begin();
74 iter != language_codes.end(); 74 iter != language_codes.end(); ++iter) {
75 ++iter) {
76 std::string language_code = *iter; 75 std::string language_code = *iter;
77 76
78 base::string16 language_name = 77 base::string16 language_name =
79 l10n_util::GetDisplayNameForLocale(language_code, locale, true); 78 l10n_util::GetDisplayNameForLocale(language_code, locale, true);
80 // Insert the language in languages_ in alphabetical order. 79 // Insert the language in languages_ in alphabetical order.
81 std::vector<LanguageNamePair>::iterator iter2; 80 std::vector<LanguageNamePair>::iterator iter2;
82 if (collator) { 81 if (collator) {
83 for (iter2 = languages_.begin(); iter2 != languages_.end(); ++iter2) { 82 for (iter2 = languages_.begin(); iter2 != languages_.end(); ++iter2) {
84 int result = base::i18n::CompareString16WithCollator(*collator, 83 int result = base::i18n::CompareString16WithCollator(
85 language_name, 84 *collator, language_name, iter2->second);
86 iter2->second);
87 if (result == UCOL_LESS) 85 if (result == UCOL_LESS)
88 break; 86 break;
89 } 87 }
90 } else { 88 } else {
91 // |locale| may not be supported by ICU collator (crbug/54833). In this 89 // |locale| may not be supported by ICU collator (crbug/54833). In this
92 // case, let's order the languages in UTF-8. 90 // case, let's order the languages in UTF-8.
93 for (iter2 = languages_.begin(); iter2 != languages_.end(); ++iter2) { 91 for (iter2 = languages_.begin(); iter2 != languages_.end(); ++iter2) {
94 if (language_name.compare(iter2->second) < 0) 92 if (language_name.compare(iter2->second) < 0)
95 break; 93 break;
96 } 94 }
97 } 95 }
98 languages_.insert(iter2, LanguageNamePair(language_code, language_name)); 96 languages_.insert(iter2, LanguageNamePair(language_code, language_name));
99 } 97 }
100 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin(); 98 for (std::vector<LanguageNamePair>::const_iterator iter = languages_.begin();
101 iter != languages_.end(); 99 iter != languages_.end(); ++iter) {
102 ++iter) {
103 std::string language_code = iter->first; 100 std::string language_code = iter->first;
104 if (language_code == original_language) { 101 if (language_code == original_language) {
105 original_language_index_ = iter - languages_.begin(); 102 original_language_index_ = iter - languages_.begin();
106 initial_original_language_index_ = original_language_index_; 103 initial_original_language_index_ = original_language_index_;
107 } 104 }
108 if (language_code == target_language) 105 if (language_code == target_language)
109 target_language_index_ = iter - languages_.begin(); 106 target_language_index_ = iter - languages_.begin();
110 } 107 }
111 108
112 prefs_ = translate_manager_->translate_client()->GetTranslatePrefs(); 109 prefs_ = translate_manager_->translate_client()->GetTranslatePrefs();
113 } 110 }
114 111
115 TranslateUIDelegate::~TranslateUIDelegate() {} 112 TranslateUIDelegate::~TranslateUIDelegate() {}
116 113
117 void TranslateUIDelegate::OnErrorShown(TranslateErrors::Type error_type) { 114 void TranslateUIDelegate::OnErrorShown(TranslateErrors::Type error_type) {
118 DCHECK_LE(TranslateErrors::NONE, error_type); 115 DCHECK_LE(TranslateErrors::NONE, error_type);
119 DCHECK_LT(error_type, TranslateErrors::TRANSLATE_ERROR_MAX); 116 DCHECK_LT(error_type, TranslateErrors::TRANSLATE_ERROR_MAX);
120 117
121 if (error_type == TranslateErrors::NONE) 118 if (error_type == TranslateErrors::NONE)
122 return; 119 return;
123 120
124 UMA_HISTOGRAM_ENUMERATION( 121 UMA_HISTOGRAM_ENUMERATION(kShowErrorUI, error_type,
125 kShowErrorUI, error_type, TranslateErrors::TRANSLATE_ERROR_MAX); 122 TranslateErrors::TRANSLATE_ERROR_MAX);
126 } 123 }
127 124
128 const LanguageState& TranslateUIDelegate::GetLanguageState() { 125 const LanguageState& TranslateUIDelegate::GetLanguageState() {
129 return translate_manager_->GetLanguageState(); 126 return translate_manager_->GetLanguageState();
130 } 127 }
131 128
132 size_t TranslateUIDelegate::GetNumberOfLanguages() const { 129 size_t TranslateUIDelegate::GetNumberOfLanguages() const {
133 return languages_.size(); 130 return languages_.size();
134 } 131 }
135 132
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 } 181 }
185 182
186 base::string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const { 183 base::string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const {
187 if (index == kNoIndex) 184 if (index == kNoIndex)
188 return base::string16(); 185 return base::string16();
189 DCHECK_LT(index, GetNumberOfLanguages()); 186 DCHECK_LT(index, GetNumberOfLanguages());
190 return languages_[index].second; 187 return languages_[index].second;
191 } 188 }
192 189
193 std::string TranslateUIDelegate::GetOriginalLanguageCode() const { 190 std::string TranslateUIDelegate::GetOriginalLanguageCode() const {
194 return (GetOriginalLanguageIndex() == kNoIndex) ? 191 return (GetOriginalLanguageIndex() == kNoIndex)
195 translate::kUnknownLanguageCode : 192 ? translate::kUnknownLanguageCode
196 GetLanguageCodeAt(GetOriginalLanguageIndex()); 193 : GetLanguageCodeAt(GetOriginalLanguageIndex());
197 } 194 }
198 195
199 std::string TranslateUIDelegate::GetTargetLanguageCode() const { 196 std::string TranslateUIDelegate::GetTargetLanguageCode() const {
200 return (GetTargetLanguageIndex() == kNoIndex) 197 return (GetTargetLanguageIndex() == kNoIndex)
201 ? translate::kUnknownLanguageCode 198 ? translate::kUnknownLanguageCode
202 : GetLanguageCodeAt(GetTargetLanguageIndex()); 199 : GetLanguageCodeAt(GetTargetLanguageIndex());
203 } 200 }
204 201
205 void TranslateUIDelegate::Translate() { 202 void TranslateUIDelegate::Translate() {
206 if (!translate_driver_->IsOffTheRecord()) { 203 if (!translate_driver_->IsOffTheRecord()) {
207 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode()); 204 prefs_->ResetTranslationDeniedCount(GetOriginalLanguageCode());
205 prefs_->ResetTranslationIgnoredCount(GetOriginalLanguageCode());
208 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode()); 206 prefs_->IncrementTranslationAcceptedCount(GetOriginalLanguageCode());
209 } 207 }
210 208
211 if (translate_manager_) { 209 if (translate_manager_) {
212 translate_manager_->TranslatePage( 210 translate_manager_->TranslatePage(GetOriginalLanguageCode(),
213 GetOriginalLanguageCode(), GetTargetLanguageCode(), false); 211 GetTargetLanguageCode(), false);
214 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true); 212 UMA_HISTOGRAM_BOOLEAN(kPerformTranslate, true);
215 } 213 }
216 } 214 }
217 215
218 void TranslateUIDelegate::RevertTranslation() { 216 void TranslateUIDelegate::RevertTranslation() {
219 if (translate_manager_) { 217 if (translate_manager_) {
220 translate_manager_->RevertTranslation(); 218 translate_manager_->RevertTranslation();
221 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true); 219 UMA_HISTOGRAM_BOOLEAN(kRevertTranslation, true);
222 } 220 }
223 } 221 }
224 222
225 void TranslateUIDelegate::TranslationDeclined(bool explicitly_closed) { 223 void TranslateUIDelegate::TranslationDeclined(bool explicitly_closed) {
226 if (explicitly_closed && !translate_driver_->IsOffTheRecord()) { 224 if (!translate_driver_->IsOffTheRecord()) {
227 const std::string& language = GetOriginalLanguageCode(); 225 const std::string& language = GetOriginalLanguageCode();
228 prefs_->ResetTranslationAcceptedCount(language); 226 if (explicitly_closed) {
229 prefs_->IncrementTranslationDeniedCount(language); 227 prefs_->ResetTranslationAcceptedCount(language);
230 prefs_->UpdateLastDeniedTime(language); 228 prefs_->IncrementTranslationDeniedCount(language);
229 prefs_->UpdateLastDeniedTime(language);
230 } else {
231 prefs_->IncrementTranslationIgnoredCount(language);
232 }
231 } 233 }
232 234
233 // Remember that the user declined the translation so as to prevent showing a 235 // Remember that the user declined the translation so as to prevent showing a
234 // translate UI for that page again. (TranslateManager initiates translations 236 // translate UI for that page again. (TranslateManager initiates translations
235 // when getting a LANGUAGE_DETERMINED from the page, which happens when a load 237 // when getting a LANGUAGE_DETERMINED from the page, which happens when a load
236 // stops. That could happen multiple times, including after the user already 238 // stops. That could happen multiple times, including after the user already
237 // declined the translation.) 239 // declined the translation.)
238 if (explicitly_closed && translate_manager_) { 240 if (explicitly_closed && translate_manager_) {
239 translate_manager_->GetLanguageState().set_translation_declined(true); 241 translate_manager_->GetLanguageState().set_translation_declined(true);
240 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); 242 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true);
241 } 243 }
242 244
243 if (!explicitly_closed) { 245 if (!explicitly_closed) {
244 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); 246 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true);
245 } 247 }
246 } 248 }
247 249
248 bool TranslateUIDelegate::IsLanguageBlocked() { 250 bool TranslateUIDelegate::IsLanguageBlocked() {
249 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); 251 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode());
250 } 252 }
251 253
252 void TranslateUIDelegate::SetLanguageBlocked(bool value) { 254 void TranslateUIDelegate::SetLanguageBlocked(bool value) {
253 if (value) { 255 if (value) {
254 prefs_->BlockLanguage(GetOriginalLanguageCode()); 256 prefs_->BlockLanguage(GetOriginalLanguageCode());
255 if (translate_manager_) { 257 // In the new UI, we will keep showing the translate omnibar icon
258 // even if the language is blocked so in case the user just wants to
259 // translate that page the user can invoke the translate bubble from
260 // the omnibar icon.
261 if (!base::FeatureList::IsEnabled(kTranslateUI2016Q2) &&
262 translate_manager_) {
256 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 263 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
257 } 264 }
258 } else { 265 } else {
259 prefs_->UnblockLanguage(GetOriginalLanguageCode()); 266 prefs_->UnblockLanguage(GetOriginalLanguageCode());
260 } 267 }
261 268
262 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, true); 269 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, true);
263 } 270 }
264 271
265 bool TranslateUIDelegate::IsSiteBlacklisted() { 272 bool TranslateUIDelegate::IsSiteBlacklisted() {
266 std::string host = GetPageHost(); 273 std::string host = GetPageHost();
267 return !host.empty() && prefs_->IsSiteBlacklisted(host); 274 return !host.empty() && prefs_->IsSiteBlacklisted(host);
268 } 275 }
269 276
270 void TranslateUIDelegate::SetSiteBlacklist(bool value) { 277 void TranslateUIDelegate::SetSiteBlacklist(bool value) {
271 std::string host = GetPageHost(); 278 std::string host = GetPageHost();
272 if (host.empty()) 279 if (host.empty())
273 return; 280 return;
274 281
275 if (value) { 282 if (value) {
276 prefs_->BlacklistSite(host); 283 prefs_->BlacklistSite(host);
277 if (translate_manager_) { 284 // In the new UI, we will keep showing the translate omnibar icon
285 // even if the site is blocked so in case the user just wants to
286 // translate that page the user can invoke the translate bubble from
287 // the omnibar icon.
288 if (!base::FeatureList::IsEnabled(kTranslateUI2016Q2) &&
289 translate_manager_) {
278 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 290 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
279 } 291 }
280 } else { 292 } else {
281 prefs_->RemoveSiteFromBlacklist(host); 293 prefs_->RemoveSiteFromBlacklist(host);
282 } 294 }
283 295
284 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, true); 296 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, true);
285 } 297 }
286 298
287 bool TranslateUIDelegate::ShouldAlwaysTranslate() { 299 bool TranslateUIDelegate::ShouldAlwaysTranslate() {
288 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), 300 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(),
289 GetTargetLanguageCode()); 301 GetTargetLanguageCode());
290 } 302 }
291 303
304 bool TranslateUIDelegate::ShouldAlwaysTranslateBeCheckedByDefault() {
305 // After 2 clicks on Translate for the same language.
306 // We check for == 2 instead of >= 2 because if the user translates with the
307 // "Always do this?" on, then the next time the bubble won't show up.
308 // The only chance the bubble will show up is after the user manually unchecks
309 // "Always do this?". In that case, since it is after user explictly unchecks,
310 // we should show as it as unchecked so we only check == 2 instead of >= 2.
311 return ShouldAlwaysTranslate() ||
312 prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) == 2;
313 }
314
292 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { 315 void TranslateUIDelegate::SetAlwaysTranslate(bool value) {
293 const std::string& original_lang = GetOriginalLanguageCode(); 316 const std::string& original_lang = GetOriginalLanguageCode();
294 const std::string& target_lang = GetTargetLanguageCode(); 317 const std::string& target_lang = GetTargetLanguageCode();
295 if (value) 318 if (value)
296 prefs_->WhitelistLanguagePair(original_lang, target_lang); 319 prefs_->WhitelistLanguagePair(original_lang, target_lang);
297 else 320 else
298 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); 321 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang);
299 322
300 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, true); 323 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, true);
301 } 324 }
302 325
303 std::string TranslateUIDelegate::GetPageHost() { 326 std::string TranslateUIDelegate::GetPageHost() {
304 if (!translate_driver_->HasCurrentPage()) 327 if (!translate_driver_->HasCurrentPage())
305 return std::string(); 328 return std::string();
306 return translate_driver_->GetLastCommittedURL().HostNoBrackets(); 329 return translate_driver_->GetLastCommittedURL().HostNoBrackets();
307 } 330 }
308 331
309 } // namespace translate 332 } // namespace translate
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698