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

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

Issue 2872083003: Added translation policy API. (Closed)
Patch Set: added page host translation policies 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 size_t TranslateUIDelegate::GetLanguageIndex(const std::string& language_code) {
193 for (size_t i = 0; i < languages_.size(); ++i) {
194 if (languages_[i].first.compare(language_code) == 0) {
Hiroshi Ichikawa 2017/05/10 08:36:55 How about simplifying this to languages_[i] == lan
jzw1 2017/05/11 03:03:17 Wouldn't I need to do langauges_[i].first == langu
Hiroshi Ichikawa 2017/05/11 04:14:15 Oops sorry, that's what I tried to mean.
195 return i;
196 }
197 }
198 return kNoIndex;
199 }
200
192 base::string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const { 201 base::string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const {
193 if (index == kNoIndex) 202 if (index == kNoIndex)
194 return base::string16(); 203 return base::string16();
195 DCHECK_LT(index, GetNumberOfLanguages()); 204 DCHECK_LT(index, GetNumberOfLanguages());
196 return languages_[index].second; 205 return languages_[index].second;
197 } 206 }
198 207
199 std::string TranslateUIDelegate::GetOriginalLanguageCode() const { 208 std::string TranslateUIDelegate::GetOriginalLanguageCode() const {
200 return (GetOriginalLanguageIndex() == kNoIndex) 209 return (GetOriginalLanguageIndex() == kNoIndex)
201 ? translate::kUnknownLanguageCode 210 ? translate::kUnknownLanguageCode
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 } 266 }
258 267
259 if (explicitly_closed) { 268 if (explicitly_closed) {
260 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); 269 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true);
261 } else { 270 } else {
262 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); 271 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true);
263 } 272 }
264 } 273 }
265 274
266 bool TranslateUIDelegate::IsLanguageBlocked() { 275 bool TranslateUIDelegate::IsLanguageBlocked() {
267 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); 276 return IsLanguageBlocked(GetOriginalLanguageCode());
277 }
278
279 bool TranslateUIDelegate::IsLanguageBlocked(const std::string& language_code) {
280 return prefs_->IsBlockedLanguage(language_code);
268 } 281 }
269 282
270 void TranslateUIDelegate::SetLanguageBlocked(bool value) { 283 void TranslateUIDelegate::SetLanguageBlocked(bool value) {
284 SetLanguageBlocked(value, GetOriginalLanguageCode());
285 }
286
287 void TranslateUIDelegate::SetLanguageBlocked(bool value,
288 const std::string& language_code) {
271 if (value) { 289 if (value) {
272 prefs_->BlockLanguage(GetOriginalLanguageCode()); 290 prefs_->BlockLanguage(language_code);
273 if (translate_manager_) { 291 if (translate_manager_) {
274 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 292 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
275 // Translation has been blocked for this language. Capture that in the 293 // Translation has been blocked for this language. Capture that in the
276 // metrics. Note that we don't capture a language being unblocked... which 294 // 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. 295 // is not the same as accepting a given translation for this language.
278 translate_manager_->RecordTranslateEvent( 296 translate_manager_->RecordTranslateEvent(
279 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_LANGUAGE); 297 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_LANGUAGE);
280 } 298 }
281 } else { 299 } else {
282 prefs_->UnblockLanguage(GetOriginalLanguageCode()); 300 prefs_->UnblockLanguage(language_code);
283 } 301 }
284 302
285 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value); 303 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value);
286 } 304 }
287 305
288 bool TranslateUIDelegate::IsSiteBlacklisted() { 306 bool TranslateUIDelegate::IsSiteBlacklisted() {
289 std::string host = GetPageHost(); 307 return IsSiteBlacklisted(GetPageHost());
290 return !host.empty() && prefs_->IsSiteBlacklisted(host); 308 }
309
310 bool TranslateUIDelegate::IsSiteBlacklisted(const std::string& page_host) {
311 return !page_host.empty() && prefs_->IsSiteBlacklisted(page_host);
291 } 312 }
292 313
293 void TranslateUIDelegate::SetSiteBlacklist(bool value) { 314 void TranslateUIDelegate::SetSiteBlacklist(bool value) {
294 std::string host = GetPageHost(); 315 SetSiteBlacklist(value, GetPageHost());
295 if (host.empty()) 316 }
317
318 void TranslateUIDelegate::SetSiteBlacklist(bool value,
319 const std::string& page_host) {
320 if (page_host.empty())
296 return; 321 return;
297 322
298 if (value) { 323 if (value) {
299 prefs_->BlacklistSite(host); 324 prefs_->BlacklistSite(page_host);
300 if (translate_manager_) { 325 if (translate_manager_) {
301 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 326 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
302 // Translation has been blocked for this site. Capture that in the metrics 327 // 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 328 // Note that we don't capture a language being unblocked... which is not
304 // the same as accepting a given translation for this site. 329 // the same as accepting a given translation for this site.
305 translate_manager_->RecordTranslateEvent( 330 translate_manager_->RecordTranslateEvent(
306 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_SITE); 331 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_SITE);
307 } 332 }
308 } else { 333 } else {
309 prefs_->RemoveSiteFromBlacklist(host); 334 prefs_->RemoveSiteFromBlacklist(page_host);
310 } 335 }
311 336
312 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value); 337 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value);
313 } 338 }
314 339
315 bool TranslateUIDelegate::ShouldAlwaysTranslate() { 340 bool TranslateUIDelegate::ShouldAlwaysTranslate() {
316 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), 341 return ShouldAlwaysTranslate(GetOriginalLanguageCode(),
317 GetTargetLanguageCode()); 342 GetTargetLanguageCode());
343 }
344
345 bool TranslateUIDelegate::ShouldAlwaysTranslate(
346 const std::string& from_language,
347 const std::string& to_language) {
348 return prefs_->IsLanguagePairWhitelisted(from_language, to_language);
349 }
350
351 std::string TranslateUIDelegate::GetAlwaysTranslateToLanguage(
352 const std::string& from_language) {
353 std::string auto_target_lang;
354 if (prefs_->ShouldAutoTranslate(from_language, &auto_target_lang)) {
355 return auto_target_lang;
356 } else {
357 return std::string();
358 }
318 } 359 }
319 360
320 bool TranslateUIDelegate::ShouldAlwaysTranslateBeCheckedByDefault() { 361 bool TranslateUIDelegate::ShouldAlwaysTranslateBeCheckedByDefault() {
321 if (ShouldAlwaysTranslate()) 362 if (ShouldAlwaysTranslate())
322 return true; 363 return true;
323 364
324 std::map<std::string, std::string> params; 365 std::map<std::string, std::string> params;
325 if (!variations::GetVariationParams(translate::kTranslateUI2016Q2TrialName, 366 if (!variations::GetVariationParams(translate::kTranslateUI2016Q2TrialName,
326 &params)) 367 &params))
327 return false; 368 return false;
328 int threshold = 0; 369 int threshold = 0;
329 base::StringToInt(params[translate::kAlwaysTranslateOfferThreshold], 370 base::StringToInt(params[translate::kAlwaysTranslateOfferThreshold],
330 &threshold); 371 &threshold);
331 if (threshold <= 0) 372 if (threshold <= 0)
332 return false; 373 return false;
333 374
334 // After N clicks on Translate for the same language. 375 // After N clicks on Translate for the same language.
335 // We check for == N instead of >= N because if the user translates with the 376 // 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. 377 // "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 378 // 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, 379 // "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. 380 // we should show as it as unchecked so we only check == N instead of >= N.
340 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) == 381 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) ==
341 threshold; 382 threshold;
342 } 383 }
343 384
344 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { 385 void TranslateUIDelegate::SetAlwaysTranslate(bool value) {
345 const std::string& original_lang = GetOriginalLanguageCode(); 386 const std::string& original_lang = GetOriginalLanguageCode();
346 const std::string& target_lang = GetTargetLanguageCode(); 387 const std::string& target_lang = GetTargetLanguageCode();
388 SetAlwaysTranslate(value, original_lang, target_lang);
389 }
390
391 void TranslateUIDelegate::SetAlwaysTranslate(bool value,
392 const std::string& from_language,
393 const std::string& to_language) {
347 if (value) { 394 if (value) {
348 prefs_->WhitelistLanguagePair(original_lang, target_lang); 395 prefs_->WhitelistLanguagePair(from_language, to_language);
349 // A default translation mapping has been accepted for this language. 396 // 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 397 // 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 398 // unmapped... which is not the same as accepting some other translation
352 // for this language. 399 // for this language.
353 if (translate_manager_) { 400 if (translate_manager_) {
354 translate_manager_->RecordTranslateEvent( 401 translate_manager_->RecordTranslateEvent(
355 metrics::TranslateEventProto::USER_ALWAYS_TRANSLATE_LANGUAGE); 402 metrics::TranslateEventProto::USER_ALWAYS_TRANSLATE_LANGUAGE);
356 } 403 }
357 } else { 404 } else {
358 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); 405 prefs_->RemoveLanguagePairFromWhitelist(from_language, to_language);
359 } 406 }
360 407
361 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value); 408 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value);
362 } 409 }
363 410
364 std::string TranslateUIDelegate::GetPageHost() { 411 std::string TranslateUIDelegate::GetPageHost() {
365 if (!translate_driver_->HasCurrentPage()) 412 if (!translate_driver_->HasCurrentPage())
366 return std::string(); 413 return std::string();
367 return translate_driver_->GetLastCommittedURL().HostNoBrackets(); 414 return translate_driver_->GetLastCommittedURL().HostNoBrackets();
368 } 415 }
369 416
370 } // namespace translate 417 } // namespace translate
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698