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

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

Issue 2872083003: Added translation policy API. (Closed)
Patch Set: addressed some final comments Created 3 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 "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "components/metrics/proto/translate_event.pb.h" 10 #include "components/metrics/proto/translate_event.pb.h"
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 return; 182 return;
183 } 183 }
184 } 184 }
185 } 185 }
186 186
187 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const { 187 std::string TranslateUIDelegate::GetLanguageCodeAt(size_t index) const {
188 DCHECK_LT(index, GetNumberOfLanguages()); 188 DCHECK_LT(index, GetNumberOfLanguages());
189 return languages_[index].first; 189 return languages_[index].first;
190 } 190 }
191 191
192 base::string16 TranslateUIDelegate::GetLanguageNameForLanguageCode(
193 const std::string& language_code) {
194 auto it = std::find_if(languages_.begin(), languages_.end(),
195 [&language_code](const LanguageNamePair& x) {
196 return x.first == language_code;
197 });
198 size_t index = it != languages_.end() ? it - languages_.begin() : kNoIndex;
199 return GetLanguageNameAt(index);
200 }
201
192 base::string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const { 202 base::string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const {
193 if (index == kNoIndex) 203 if (index == kNoIndex)
194 return base::string16(); 204 return base::string16();
195 DCHECK_LT(index, GetNumberOfLanguages()); 205 DCHECK_LT(index, GetNumberOfLanguages());
196 return languages_[index].second; 206 return languages_[index].second;
197 } 207 }
198 208
199 std::string TranslateUIDelegate::GetOriginalLanguageCode() const { 209 std::string TranslateUIDelegate::GetOriginalLanguageCode() const {
200 return (GetOriginalLanguageIndex() == kNoIndex) 210 return (GetOriginalLanguageIndex() == kNoIndex)
201 ? translate::kUnknownLanguageCode 211 ? translate::kUnknownLanguageCode
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 } 267 }
258 268
259 if (explicitly_closed) { 269 if (explicitly_closed) {
260 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); 270 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true);
261 } else { 271 } else {
262 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); 272 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true);
263 } 273 }
264 } 274 }
265 275
266 bool TranslateUIDelegate::IsLanguageBlocked() { 276 bool TranslateUIDelegate::IsLanguageBlocked() {
267 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); 277 return IsLanguageBlocked(GetOriginalLanguageCode());
278 }
279
280 bool TranslateUIDelegate::IsLanguageBlocked(const std::string& language_code) {
281 return prefs_->IsBlockedLanguage(language_code);
268 } 282 }
269 283
270 void TranslateUIDelegate::SetLanguageBlocked(bool value) { 284 void TranslateUIDelegate::SetLanguageBlocked(bool value) {
285 SetLanguageBlocked(value, GetOriginalLanguageCode());
286 }
287
288 void TranslateUIDelegate::SetLanguageBlocked(bool value,
289 const std::string& language_code) {
271 if (value) { 290 if (value) {
272 prefs_->BlockLanguage(GetOriginalLanguageCode()); 291 prefs_->BlockLanguage(language_code);
273 if (translate_manager_) { 292 if (translate_manager_) {
274 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 293 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
275 // Translation has been blocked for this language. Capture that in the 294 // Translation has been blocked for this language. Capture that in the
276 // metrics. Note that we don't capture a language being unblocked... which 295 // metrics. Note that we don't capture a language being unblocked... which
277 // is not the same as accepting a given translation for this language. 296 // is not the same as accepting a given translation for this language.
278 translate_manager_->RecordTranslateEvent( 297 translate_manager_->RecordTranslateEvent(
279 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_LANGUAGE); 298 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_LANGUAGE);
280 } 299 }
281 } else { 300 } else {
282 prefs_->UnblockLanguage(GetOriginalLanguageCode()); 301 prefs_->UnblockLanguage(language_code);
283 } 302 }
284 303
285 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value); 304 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value);
286 } 305 }
287 306
288 bool TranslateUIDelegate::IsSiteBlacklisted() { 307 bool TranslateUIDelegate::IsSiteBlacklisted() {
289 std::string host = GetPageHost(); 308 return IsSiteBlacklisted(GetPageHost());
290 return !host.empty() && prefs_->IsSiteBlacklisted(host); 309 }
310
311 bool TranslateUIDelegate::IsSiteBlacklisted(const std::string& page_host) {
312 return !page_host.empty() && prefs_->IsSiteBlacklisted(page_host);
291 } 313 }
292 314
293 void TranslateUIDelegate::SetSiteBlacklist(bool value) { 315 void TranslateUIDelegate::SetSiteBlacklist(bool value) {
294 std::string host = GetPageHost(); 316 SetSiteBlacklist(value, GetPageHost());
295 if (host.empty()) 317 }
318
319 void TranslateUIDelegate::SetSiteBlacklist(bool value,
320 const std::string& page_host) {
321 if (page_host.empty()) {
296 return; 322 return;
323 }
297 324
298 if (value) { 325 if (value) {
299 prefs_->BlacklistSite(host); 326 prefs_->BlacklistSite(page_host);
300 if (translate_manager_) { 327 if (translate_manager_) {
301 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 328 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
302 // Translation has been blocked for this site. Capture that in the metrics 329 // Translation has been blocked for this site. Capture that in the metrics
303 // Note that we don't capture a language being unblocked... which is not 330 // Note that we don't capture a language being unblocked... which is not
304 // the same as accepting a given translation for this site. 331 // the same as accepting a given translation for this site.
305 translate_manager_->RecordTranslateEvent( 332 translate_manager_->RecordTranslateEvent(
306 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_SITE); 333 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_SITE);
307 } 334 }
308 } else { 335 } else {
309 prefs_->RemoveSiteFromBlacklist(host); 336 prefs_->RemoveSiteFromBlacklist(page_host);
310 } 337 }
311 338
312 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value); 339 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value);
313 } 340 }
314 341
315 bool TranslateUIDelegate::ShouldAlwaysTranslate() { 342 bool TranslateUIDelegate::ShouldAlwaysTranslate() {
316 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), 343 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(),
317 GetTargetLanguageCode()); 344 GetTargetLanguageCode());
318 } 345 }
319 346
347 std::string TranslateUIDelegate::GetAlwaysTranslateToLanguage(
348 const std::string& from_language) {
349 std::string auto_target_lang;
350 if (prefs_->ShouldAutoTranslate(from_language, &auto_target_lang)) {
351 return auto_target_lang;
352 }
353 return std::string();
354 }
355
320 bool TranslateUIDelegate::ShouldAlwaysTranslateBeCheckedByDefault() { 356 bool TranslateUIDelegate::ShouldAlwaysTranslateBeCheckedByDefault() {
321 if (ShouldAlwaysTranslate()) 357 if (ShouldAlwaysTranslate())
322 return true; 358 return true;
323 359
324 std::map<std::string, std::string> params; 360 std::map<std::string, std::string> params;
325 if (!variations::GetVariationParams(translate::kTranslateUI2016Q2TrialName, 361 if (!variations::GetVariationParams(translate::kTranslateUI2016Q2TrialName,
326 &params)) 362 &params))
327 return false; 363 return false;
328 int threshold = 0; 364 int threshold = 0;
329 base::StringToInt(params[translate::kAlwaysTranslateOfferThreshold], 365 base::StringToInt(params[translate::kAlwaysTranslateOfferThreshold],
330 &threshold); 366 &threshold);
331 if (threshold <= 0) 367 if (threshold <= 0)
332 return false; 368 return false;
333 369
334 // After N clicks on Translate for the same language. 370 // After N clicks on Translate for the same language.
335 // We check for == N instead of >= N because if the user translates with the 371 // We check for == N instead of >= N because if the user translates with the
336 // "Always do this?" on, then the next time the bubble won't show up. 372 // "Always do this?" on, then the next time the bubble won't show up.
337 // The only chance the bubble will show up is after the user manually unchecks 373 // The only chance the bubble will show up is after the user manually unchecks
338 // "Always do this?". In that case, since it is after user explictly unchecks, 374 // "Always do this?". In that case, since it is after user explictly unchecks,
339 // we should show as it as unchecked so we only check == N instead of >= N. 375 // we should show as it as unchecked so we only check == N instead of >= N.
340 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) == 376 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) ==
341 threshold; 377 threshold;
342 } 378 }
343 379
344 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { 380 void TranslateUIDelegate::SetAlwaysTranslate(bool value) {
345 const std::string& original_lang = GetOriginalLanguageCode(); 381 const std::string& original_lang = GetOriginalLanguageCode();
346 const std::string& target_lang = GetTargetLanguageCode(); 382 const std::string& target_lang = GetTargetLanguageCode();
383 SetAlwaysTranslate(value, original_lang, target_lang);
384 }
385
386 void TranslateUIDelegate::SetAlwaysTranslate(bool value,
387 const std::string& from_language,
388 const std::string& to_language) {
347 if (value) { 389 if (value) {
348 prefs_->WhitelistLanguagePair(original_lang, target_lang); 390 prefs_->WhitelistLanguagePair(from_language, to_language);
349 // A default translation mapping has been accepted for this language. 391 // A default translation mapping has been accepted for this language.
350 // Capture that in the metrics. Note that we don't capture a language being 392 // Capture that in the metrics. Note that we don't capture a language being
351 // unmapped... which is not the same as accepting some other translation 393 // unmapped... which is not the same as accepting some other translation
352 // for this language. 394 // for this language.
353 if (translate_manager_) { 395 if (translate_manager_) {
354 translate_manager_->RecordTranslateEvent( 396 translate_manager_->RecordTranslateEvent(
355 metrics::TranslateEventProto::USER_ALWAYS_TRANSLATE_LANGUAGE); 397 metrics::TranslateEventProto::USER_ALWAYS_TRANSLATE_LANGUAGE);
356 } 398 }
357 } else { 399 } else {
358 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); 400 prefs_->RemoveLanguagePairFromWhitelist(from_language, to_language);
359 } 401 }
360 402
361 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value); 403 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value);
362 } 404 }
363 405
364 std::string TranslateUIDelegate::GetPageHost() { 406 std::string TranslateUIDelegate::GetPageHost() {
365 if (!translate_driver_->HasCurrentPage()) 407 if (!translate_driver_->HasCurrentPage())
366 return std::string(); 408 return std::string();
367 return translate_driver_->GetLastCommittedURL().HostNoBrackets(); 409 return translate_driver_->GetLastCommittedURL().HostNoBrackets();
368 } 410 }
369 411
370 } // namespace translate 412 } // namespace translate
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698