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

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

Issue 2872083003: Added translation policy API. (Closed)
Patch Set: addressed michael and eugene 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 size_t TranslateUIDelegate::GetLanguageIndex(const std::string& language_code) {
193 auto result = std::find_if(languages_.begin(), languages_.end(),
Eugene But (OOO till 7-30) 2017/05/12 14:39:19 auto it = languages_.find(language_code); return (
jzw1 2017/05/15 02:43:28 Will .find be able to do it? Think I need to keep
Hiroshi Ichikawa 2017/05/15 03:25:34 +1 to John. Note that it's a comparison against x.
Eugene But (OOO till 7-30) 2017/05/15 14:36:14 map::iterator::fist is a key in std::map. map::fin
Hiroshi Ichikawa 2017/05/16 04:30:55 |languages_| is a vector, not a map. So you cannot
Eugene But (OOO till 7-30) 2017/05/16 15:28:38 Sorry, if it's a vector, then |std::find(languages
194 [&language_code](const LanguageNamePair& x) {
195 return x.first == language_code;
196 });
197 if (result != languages_.end()) {
198 return result - languages_.begin();
199 } else {
200 return kNoIndex;
201 }
202 }
203
192 base::string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const { 204 base::string16 TranslateUIDelegate::GetLanguageNameAt(size_t index) const {
193 if (index == kNoIndex) 205 if (index == kNoIndex)
194 return base::string16(); 206 return base::string16();
195 DCHECK_LT(index, GetNumberOfLanguages()); 207 DCHECK_LT(index, GetNumberOfLanguages());
196 return languages_[index].second; 208 return languages_[index].second;
197 } 209 }
198 210
199 std::string TranslateUIDelegate::GetOriginalLanguageCode() const { 211 std::string TranslateUIDelegate::GetOriginalLanguageCode() const {
200 return (GetOriginalLanguageIndex() == kNoIndex) 212 return (GetOriginalLanguageIndex() == kNoIndex)
201 ? translate::kUnknownLanguageCode 213 ? translate::kUnknownLanguageCode
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 } 269 }
258 270
259 if (explicitly_closed) { 271 if (explicitly_closed) {
260 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true); 272 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslate, true);
261 } else { 273 } else {
262 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true); 274 UMA_HISTOGRAM_BOOLEAN(kDeclineTranslateDismissUI, true);
263 } 275 }
264 } 276 }
265 277
266 bool TranslateUIDelegate::IsLanguageBlocked() { 278 bool TranslateUIDelegate::IsLanguageBlocked() {
267 return prefs_->IsBlockedLanguage(GetOriginalLanguageCode()); 279 return IsLanguageBlocked(GetOriginalLanguageCode());
280 }
281
282 bool TranslateUIDelegate::IsLanguageBlocked(const std::string& language_code) {
283 return prefs_->IsBlockedLanguage(language_code);
268 } 284 }
269 285
270 void TranslateUIDelegate::SetLanguageBlocked(bool value) { 286 void TranslateUIDelegate::SetLanguageBlocked(bool value) {
287 SetLanguageBlocked(value, GetOriginalLanguageCode());
288 }
289
290 void TranslateUIDelegate::SetLanguageBlocked(bool value,
291 const std::string& language_code) {
271 if (value) { 292 if (value) {
272 prefs_->BlockLanguage(GetOriginalLanguageCode()); 293 prefs_->BlockLanguage(language_code);
273 if (translate_manager_) { 294 if (translate_manager_) {
274 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 295 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
275 // Translation has been blocked for this language. Capture that in the 296 // Translation has been blocked for this language. Capture that in the
276 // metrics. Note that we don't capture a language being unblocked... which 297 // 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. 298 // is not the same as accepting a given translation for this language.
278 translate_manager_->RecordTranslateEvent( 299 translate_manager_->RecordTranslateEvent(
279 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_LANGUAGE); 300 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_LANGUAGE);
280 } 301 }
281 } else { 302 } else {
282 prefs_->UnblockLanguage(GetOriginalLanguageCode()); 303 prefs_->UnblockLanguage(language_code);
283 } 304 }
284 305
285 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value); 306 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateLang, value);
286 } 307 }
287 308
288 bool TranslateUIDelegate::IsSiteBlacklisted() { 309 bool TranslateUIDelegate::IsSiteBlacklisted() {
289 std::string host = GetPageHost(); 310 return IsSiteBlacklisted(GetPageHost());
290 return !host.empty() && prefs_->IsSiteBlacklisted(host); 311 }
312
313 bool TranslateUIDelegate::IsSiteBlacklisted(const std::string& page_host) {
314 return !page_host.empty() && prefs_->IsSiteBlacklisted(page_host);
291 } 315 }
292 316
293 void TranslateUIDelegate::SetSiteBlacklist(bool value) { 317 void TranslateUIDelegate::SetSiteBlacklist(bool value) {
294 std::string host = GetPageHost(); 318 SetSiteBlacklist(value, GetPageHost());
295 if (host.empty()) 319 }
320
321 void TranslateUIDelegate::SetSiteBlacklist(bool value,
322 const std::string& page_host) {
323 if (page_host.empty())
Eugene But (OOO till 7-30) 2017/05/12 14:39:19 Comments says that empty host is not allowed, but
michaeldo 2017/05/12 15:29:09 To retain original behavior, you can move this ear
jzw1 2017/05/15 02:43:28 Should I just DCHECK(!page_host.empty())?
michaeldo 2017/05/15 17:09:30 yes, that is fine here.
296 return; 324 return;
297 325
298 if (value) { 326 if (value) {
299 prefs_->BlacklistSite(host); 327 prefs_->BlacklistSite(page_host);
300 if (translate_manager_) { 328 if (translate_manager_) {
301 translate_manager_->GetLanguageState().SetTranslateEnabled(false); 329 translate_manager_->GetLanguageState().SetTranslateEnabled(false);
302 // Translation has been blocked for this site. Capture that in the metrics 330 // 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 331 // Note that we don't capture a language being unblocked... which is not
304 // the same as accepting a given translation for this site. 332 // the same as accepting a given translation for this site.
305 translate_manager_->RecordTranslateEvent( 333 translate_manager_->RecordTranslateEvent(
306 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_SITE); 334 metrics::TranslateEventProto::USER_NEVER_TRANSLATE_SITE);
307 } 335 }
308 } else { 336 } else {
309 prefs_->RemoveSiteFromBlacklist(host); 337 prefs_->RemoveSiteFromBlacklist(page_host);
310 } 338 }
311 339
312 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value); 340 UMA_HISTOGRAM_BOOLEAN(kNeverTranslateSite, value);
313 } 341 }
314 342
315 bool TranslateUIDelegate::ShouldAlwaysTranslate() { 343 bool TranslateUIDelegate::ShouldAlwaysTranslate() {
316 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(), 344 return prefs_->IsLanguagePairWhitelisted(GetOriginalLanguageCode(),
317 GetTargetLanguageCode()); 345 GetTargetLanguageCode());
318 } 346 }
319 347
348 std::string TranslateUIDelegate::GetAlwaysTranslateToLanguage(
349 const std::string& from_language) {
350 std::string auto_target_lang;
351 if (prefs_->ShouldAutoTranslate(from_language, &auto_target_lang)) {
352 return auto_target_lang;
353 } else {
Eugene But (OOO till 7-30) 2017/05/12 14:39:19 Per Style Guide: no else after return please
jzw1 2017/05/15 02:43:28 Done.
354 return std::string();
355 }
356 }
357
320 bool TranslateUIDelegate::ShouldAlwaysTranslateBeCheckedByDefault() { 358 bool TranslateUIDelegate::ShouldAlwaysTranslateBeCheckedByDefault() {
321 if (ShouldAlwaysTranslate()) 359 if (ShouldAlwaysTranslate())
322 return true; 360 return true;
323 361
324 std::map<std::string, std::string> params; 362 std::map<std::string, std::string> params;
325 if (!variations::GetVariationParams(translate::kTranslateUI2016Q2TrialName, 363 if (!variations::GetVariationParams(translate::kTranslateUI2016Q2TrialName,
326 &params)) 364 &params))
327 return false; 365 return false;
328 int threshold = 0; 366 int threshold = 0;
329 base::StringToInt(params[translate::kAlwaysTranslateOfferThreshold], 367 base::StringToInt(params[translate::kAlwaysTranslateOfferThreshold],
330 &threshold); 368 &threshold);
331 if (threshold <= 0) 369 if (threshold <= 0)
332 return false; 370 return false;
333 371
334 // After N clicks on Translate for the same language. 372 // After N clicks on Translate for the same language.
335 // We check for == N instead of >= N because if the user translates with the 373 // 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. 374 // "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 375 // 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, 376 // "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. 377 // we should show as it as unchecked so we only check == N instead of >= N.
340 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) == 378 return prefs_->GetTranslationAcceptedCount(GetOriginalLanguageCode()) ==
341 threshold; 379 threshold;
342 } 380 }
343 381
344 void TranslateUIDelegate::SetAlwaysTranslate(bool value) { 382 void TranslateUIDelegate::SetAlwaysTranslate(bool value) {
345 const std::string& original_lang = GetOriginalLanguageCode(); 383 const std::string& original_lang = GetOriginalLanguageCode();
346 const std::string& target_lang = GetTargetLanguageCode(); 384 const std::string& target_lang = GetTargetLanguageCode();
385 SetAlwaysTranslate(value, original_lang, target_lang);
386 }
387
388 void TranslateUIDelegate::SetAlwaysTranslate(bool value,
389 const std::string& from_language,
390 const std::string& to_language) {
347 if (value) { 391 if (value) {
348 prefs_->WhitelistLanguagePair(original_lang, target_lang); 392 prefs_->WhitelistLanguagePair(from_language, to_language);
349 // A default translation mapping has been accepted for this language. 393 // 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 394 // 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 395 // unmapped... which is not the same as accepting some other translation
352 // for this language. 396 // for this language.
353 if (translate_manager_) { 397 if (translate_manager_) {
354 translate_manager_->RecordTranslateEvent( 398 translate_manager_->RecordTranslateEvent(
355 metrics::TranslateEventProto::USER_ALWAYS_TRANSLATE_LANGUAGE); 399 metrics::TranslateEventProto::USER_ALWAYS_TRANSLATE_LANGUAGE);
356 } 400 }
357 } else { 401 } else {
358 prefs_->RemoveLanguagePairFromWhitelist(original_lang, target_lang); 402 prefs_->RemoveLanguagePairFromWhitelist(from_language, to_language);
359 } 403 }
360 404
361 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value); 405 UMA_HISTOGRAM_BOOLEAN(kAlwaysTranslateLang, value);
362 } 406 }
363 407
364 std::string TranslateUIDelegate::GetPageHost() { 408 std::string TranslateUIDelegate::GetPageHost() {
365 if (!translate_driver_->HasCurrentPage()) 409 if (!translate_driver_->HasCurrentPage())
366 return std::string(); 410 return std::string();
367 return translate_driver_->GetLastCommittedURL().HostNoBrackets(); 411 return translate_driver_->GetLastCommittedURL().HostNoBrackets();
368 } 412 }
369 413
370 } // namespace translate 414 } // namespace translate
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698