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

Side by Side Diff: chrome/browser/translate/translate_manager.cc

Issue 15987004: Translate: Filter and record languages whose names Chrome doesn't show (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Made Translate.ServerReportedUnsupportedLanguage deprecated Created 7 years, 6 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_manager.h" 5 #include "chrome/browser/translate/translate_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/memory/singleton.h" 10 #include "base/memory/singleton.h"
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "base/metrics/histogram.h" 12 #include "base/metrics/histogram.h"
13 #include "base/prefs/pref_service.h" 13 #include "base/prefs/pref_service.h"
14 #include "base/string_util.h" 14 #include "base/string_util.h"
15 #include "base/stringprintf.h" 15 #include "base/stringprintf.h"
16 #include "base/strings/string_split.h" 16 #include "base/strings/string_split.h"
17 #include "base/time.h" 17 #include "base/time.h"
18 #include "base/values.h" 18 #include "base/values.h"
19 #include "chrome/browser/browser_process.h" 19 #include "chrome/browser/browser_process.h"
20 #include "chrome/browser/infobars/infobar_service.h" 20 #include "chrome/browser/infobars/infobar_service.h"
21 #include "chrome/browser/profiles/profile.h" 21 #include "chrome/browser/profiles/profile.h"
22 #include "chrome/browser/tab_contents/language_state.h" 22 #include "chrome/browser/tab_contents/language_state.h"
23 #include "chrome/browser/tab_contents/tab_util.h" 23 #include "chrome/browser/tab_contents/tab_util.h"
24 #include "chrome/browser/translate/page_translated_details.h" 24 #include "chrome/browser/translate/page_translated_details.h"
25 #include "chrome/browser/translate/translate_browser_metrics.h"
25 #include "chrome/browser/translate/translate_error_details.h" 26 #include "chrome/browser/translate/translate_error_details.h"
26 #include "chrome/browser/translate/translate_infobar_delegate.h" 27 #include "chrome/browser/translate/translate_infobar_delegate.h"
27 #include "chrome/browser/translate/translate_language_list.h" 28 #include "chrome/browser/translate/translate_language_list.h"
28 #include "chrome/browser/translate/translate_manager_metrics.h"
29 #include "chrome/browser/translate/translate_prefs.h" 29 #include "chrome/browser/translate/translate_prefs.h"
30 #include "chrome/browser/translate/translate_tab_helper.h" 30 #include "chrome/browser/translate/translate_tab_helper.h"
31 #include "chrome/browser/translate/translate_url_util.h" 31 #include "chrome/browser/translate/translate_url_util.h"
32 #include "chrome/browser/ui/browser.h" 32 #include "chrome/browser/ui/browser.h"
33 #include "chrome/browser/ui/browser_finder.h" 33 #include "chrome/browser/ui/browser_finder.h"
34 #include "chrome/browser/ui/browser_tabstrip.h" 34 #include "chrome/browser/ui/browser_tabstrip.h"
35 #include "chrome/browser/ui/tabs/tab_strip_model.h" 35 #include "chrome/browser/ui/tabs/tab_strip_model.h"
36 #include "chrome/common/chrome_constants.h" 36 #include "chrome/common/chrome_constants.h"
37 #include "chrome/common/chrome_notification_types.h" 37 #include "chrome/common/chrome_notification_types.h"
38 #include "chrome/common/chrome_switches.h" 38 #include "chrome/common/chrome_switches.h"
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 content::NotificationService::AllSources()); 383 content::NotificationService::AllSources());
384 language_list_.reset(new TranslateLanguageList); 384 language_list_.reset(new TranslateLanguageList);
385 } 385 }
386 386
387 void TranslateManager::InitiateTranslation(WebContents* web_contents, 387 void TranslateManager::InitiateTranslation(WebContents* web_contents,
388 const std::string& page_lang) { 388 const std::string& page_lang) {
389 Profile* profile = 389 Profile* profile =
390 Profile::FromBrowserContext(web_contents->GetBrowserContext()); 390 Profile::FromBrowserContext(web_contents->GetBrowserContext());
391 PrefService* prefs = profile->GetOriginalProfile()->GetPrefs(); 391 PrefService* prefs = profile->GetOriginalProfile()->GetPrefs();
392 if (!prefs->GetBoolean(prefs::kEnableTranslate)) { 392 if (!prefs->GetBoolean(prefs::kEnableTranslate)) {
393 TranslateManagerMetrics::ReportInitiationStatus( 393 TranslateBrowserMetrics::ReportInitiationStatus(
394 TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); 394 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS);
395 return; 395 return;
396 } 396 }
397 397
398 // Allow disabling of translate from the command line to assist with 398 // Allow disabling of translate from the command line to assist with
399 // automated browser testing. 399 // automated browser testing.
400 if (CommandLine::ForCurrentProcess()->HasSwitch( 400 if (CommandLine::ForCurrentProcess()->HasSwitch(
401 switches::kDisableTranslate)) { 401 switches::kDisableTranslate)) {
402 TranslateManagerMetrics::ReportInitiationStatus( 402 TranslateBrowserMetrics::ReportInitiationStatus(
403 TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH); 403 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH);
404 return; 404 return;
405 } 405 }
406 406
407 // Don't translate any Chrome specific page, e.g., New Tab Page, Download, 407 // Don't translate any Chrome specific page, e.g., New Tab Page, Download,
408 // History, and so on. 408 // History, and so on.
409 GURL page_url = web_contents->GetURL(); 409 GURL page_url = web_contents->GetURL();
410 if (!IsTranslatableURL(page_url)) { 410 if (!IsTranslatableURL(page_url)) {
411 TranslateManagerMetrics::ReportInitiationStatus( 411 TranslateBrowserMetrics::ReportInitiationStatus(
412 TranslateManagerMetrics::INITIATION_STATUS_URL_IS_NOT_SUPPORTED); 412 TranslateBrowserMetrics::INITIATION_STATUS_URL_IS_NOT_SUPPORTED);
413 return; 413 return;
414 } 414 }
415 415
416 // Don't translate similar languages (ex: en-US to en). 416 // Don't translate similar languages (ex: en-US to en).
417 std::string target_lang = GetTargetLanguage(prefs); 417 std::string target_lang = GetTargetLanguage(prefs);
418 std::string language_code = GetLanguageCode(page_lang); 418 std::string language_code = GetLanguageCode(page_lang);
419 if (language_code == target_lang) { 419 if (language_code == target_lang) {
420 TranslateManagerMetrics::ReportInitiationStatus( 420 TranslateBrowserMetrics::ReportInitiationStatus(
421 TranslateManagerMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); 421 TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES);
422 return; 422 return;
423 } 423 }
424 424
425 // Don't translate any language the user configured as accepted languages. 425 // Don't translate any language the user configured as accepted languages.
426 if (IsAcceptLanguage(web_contents, language_code)) { 426 if (IsAcceptLanguage(web_contents, language_code)) {
427 TranslateManagerMetrics::ReportInitiationStatus( 427 TranslateBrowserMetrics::ReportInitiationStatus(
428 TranslateManagerMetrics::INITIATION_STATUS_ACCEPT_LANGUAGES); 428 TranslateBrowserMetrics::INITIATION_STATUS_ACCEPT_LANGUAGES);
429 return; 429 return;
430 } 430 }
431 431
432 // Nothing to do if either the language Chrome is in or the language of the 432 // Nothing to do if either the language Chrome is in or the language of the
433 // page is not supported by the translation server. 433 // page is not supported by the translation server.
434 if (target_lang.empty() || !IsSupportedLanguage(language_code)) { 434 if (target_lang.empty() || !IsSupportedLanguage(language_code)) {
435 TranslateManagerMetrics::ReportInitiationStatus( 435 TranslateBrowserMetrics::ReportInitiationStatus(
436 TranslateManagerMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); 436 TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED);
437 TranslateManagerMetrics::ReportUnsupportedLanguageAtInitiation( 437 TranslateBrowserMetrics::ReportUnsupportedLanguageAtInitiation(
438 language_code); 438 language_code);
439 439
440 return; 440 return;
441 } 441 }
442 442
443 // Don't translate any user black-listed URLs or user selected language 443 // Don't translate any user black-listed URLs or user selected language
444 // combination. 444 // combination.
445 if (!TranslatePrefs::CanTranslate(prefs, language_code, page_url)) { 445 if (!TranslatePrefs::CanTranslate(prefs, language_code, page_url)) {
446 TranslateManagerMetrics::ReportInitiationStatus( 446 TranslateBrowserMetrics::ReportInitiationStatus(
447 TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); 447 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG);
448 return; 448 return;
449 } 449 }
450 450
451 // If the user has previously selected "always translate" for this language we 451 // If the user has previously selected "always translate" for this language we
452 // automatically translate. Note that in incognito mode we disable that 452 // automatically translate. Note that in incognito mode we disable that
453 // feature; the user will get an infobar, so they can control whether the 453 // feature; the user will get an infobar, so they can control whether the
454 // page's text is sent to the translate server. 454 // page's text is sent to the translate server.
455 std::string auto_target_lang; 455 std::string auto_target_lang;
456 if (!web_contents->GetBrowserContext()->IsOffTheRecord() && 456 if (!web_contents->GetBrowserContext()->IsOffTheRecord() &&
457 TranslatePrefs::ShouldAutoTranslate(prefs, language_code, 457 TranslatePrefs::ShouldAutoTranslate(prefs, language_code,
458 &auto_target_lang)) { 458 &auto_target_lang)) {
459 // We need to confirm that the saved target language is still supported. 459 // We need to confirm that the saved target language is still supported.
460 // Also, GetLanguageCode will take care of removing country code if any. 460 // Also, GetLanguageCode will take care of removing country code if any.
461 auto_target_lang = GetLanguageCode(auto_target_lang); 461 auto_target_lang = GetLanguageCode(auto_target_lang);
462 if (IsSupportedLanguage(auto_target_lang)) { 462 if (IsSupportedLanguage(auto_target_lang)) {
463 TranslateManagerMetrics::ReportInitiationStatus( 463 TranslateBrowserMetrics::ReportInitiationStatus(
464 TranslateManagerMetrics::INITIATION_STATUS_AUTO_BY_CONFIG); 464 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG);
465 TranslatePage(web_contents, language_code, auto_target_lang); 465 TranslatePage(web_contents, language_code, auto_target_lang);
466 return; 466 return;
467 } 467 }
468 } 468 }
469 469
470 TranslateTabHelper* translate_tab_helper = 470 TranslateTabHelper* translate_tab_helper =
471 TranslateTabHelper::FromWebContents(web_contents); 471 TranslateTabHelper::FromWebContents(web_contents);
472 if (!translate_tab_helper) 472 if (!translate_tab_helper)
473 return; 473 return;
474 474
475 std::string auto_translate_to = 475 std::string auto_translate_to =
476 translate_tab_helper->language_state().AutoTranslateTo(); 476 translate_tab_helper->language_state().AutoTranslateTo();
477 if (!auto_translate_to.empty()) { 477 if (!auto_translate_to.empty()) {
478 // This page was navigated through a click from a translated page. 478 // This page was navigated through a click from a translated page.
479 TranslateManagerMetrics::ReportInitiationStatus( 479 TranslateBrowserMetrics::ReportInitiationStatus(
480 TranslateManagerMetrics::INITIATION_STATUS_AUTO_BY_LINK); 480 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK);
481 TranslatePage(web_contents, language_code, auto_translate_to); 481 TranslatePage(web_contents, language_code, auto_translate_to);
482 return; 482 return;
483 } 483 }
484 484
485 // Prompts the user if he/she wants the page translated. 485 // Prompts the user if he/she wants the page translated.
486 TranslateManagerMetrics::ReportInitiationStatus( 486 TranslateBrowserMetrics::ReportInitiationStatus(
487 TranslateManagerMetrics::INITIATION_STATUS_SHOW_INFOBAR); 487 TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR);
488 TranslateInfoBarDelegate::Create( 488 TranslateInfoBarDelegate::Create(
489 InfoBarService::FromWebContents(web_contents), false, 489 InfoBarService::FromWebContents(web_contents), false,
490 TranslateInfoBarDelegate::BEFORE_TRANSLATE, TranslateErrors::NONE, 490 TranslateInfoBarDelegate::BEFORE_TRANSLATE, TranslateErrors::NONE,
491 profile->GetPrefs(), ShortcutConfig(), 491 profile->GetPrefs(), ShortcutConfig(),
492 language_code, target_lang); 492 language_code, target_lang);
493 } 493 }
494 494
495 void TranslateManager::InitiateTranslationPosted( 495 void TranslateManager::InitiateTranslationPosted(
496 int process_id, int render_id, const std::string& page_lang, int attempt) { 496 int process_id, int render_id, const std::string& page_lang, int attempt) {
497 // The tab might have been closed. 497 // The tab might have been closed.
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_RevertTranslation( 575 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_RevertTranslation(
576 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID())); 576 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID()));
577 577
578 TranslateTabHelper* translate_tab_helper = 578 TranslateTabHelper* translate_tab_helper =
579 TranslateTabHelper::FromWebContents(web_contents); 579 TranslateTabHelper::FromWebContents(web_contents);
580 translate_tab_helper->language_state().set_current_language( 580 translate_tab_helper->language_state().set_current_language(
581 translate_tab_helper->language_state().original_language()); 581 translate_tab_helper->language_state().original_language());
582 } 582 }
583 583
584 void TranslateManager::ReportLanguageDetectionError(WebContents* web_contents) { 584 void TranslateManager::ReportLanguageDetectionError(WebContents* web_contents) {
585 TranslateManagerMetrics::ReportLanguageDetectionError(); 585 TranslateBrowserMetrics::ReportLanguageDetectionError();
586 // We'll open the URL in a new tab so that the user can tell us more. 586 // We'll open the URL in a new tab so that the user can tell us more.
587 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); 587 Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
588 if (!browser) { 588 if (!browser) {
589 NOTREACHED(); 589 NOTREACHED();
590 return; 590 return;
591 } 591 }
592 592
593 GURL report_error_url = GURL(kReportLanguageDetectionErrorURL); 593 GURL report_error_url = GURL(kReportLanguageDetectionErrorURL);
594 594
595 GURL page_url = web_contents->GetController().GetActiveEntry()->GetURL(); 595 GURL page_url = web_contents->GetController().GetActiveEntry()->GetURL();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_TranslatePage( 631 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_TranslatePage(
632 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID(), 632 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID(),
633 translate_script, source_lang, target_lang)); 633 translate_script, source_lang, target_lang));
634 } 634 }
635 635
636 void TranslateManager::PageTranslated(WebContents* web_contents, 636 void TranslateManager::PageTranslated(WebContents* web_contents,
637 PageTranslatedDetails* details) { 637 PageTranslatedDetails* details) {
638 if ((details->error_type == TranslateErrors::NONE) && 638 if ((details->error_type == TranslateErrors::NONE) &&
639 details->source_language != chrome::kUnknownLanguageCode && 639 details->source_language != chrome::kUnknownLanguageCode &&
640 !IsSupportedLanguage(details->source_language)) { 640 !IsSupportedLanguage(details->source_language)) {
641 // TODO(toyoshim): http://crbug.com/242142 We should check if
642 // l10n_util::GetDisplayNameForLocale() support |source_language| here.
643 // Also, following metrics should be modified to have language code.
644 TranslateManagerMetrics::ReportUnsupportedLanguage();
645 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; 641 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE;
646 } 642 }
647 643
648 Profile* profile = 644 Profile* profile =
649 Profile::FromBrowserContext(web_contents->GetBrowserContext()); 645 Profile::FromBrowserContext(web_contents->GetBrowserContext());
650 PrefService* prefs = profile->GetPrefs(); 646 PrefService* prefs = profile->GetPrefs();
651 TranslateInfoBarDelegate::Create( 647 TranslateInfoBarDelegate::Create(
652 InfoBarService::FromWebContents(web_contents), true, 648 InfoBarService::FromWebContents(web_contents), true,
653 (details->error_type == TranslateErrors::NONE) ? 649 (details->error_type == TranslateErrors::NONE) ?
654 TranslateInfoBarDelegate::AFTER_TRANSLATE : 650 TranslateInfoBarDelegate::AFTER_TRANSLATE :
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
826 // reason so we are more aggressive showing the shortcuts for never translate. 822 // reason so we are more aggressive showing the shortcuts for never translate.
827 #if defined(OS_ANDROID) 823 #if defined(OS_ANDROID)
828 config.never_translate_min_count = 1; 824 config.never_translate_min_count = 1;
829 #else 825 #else
830 config.never_translate_min_count = 3; 826 config.never_translate_min_count = 3;
831 #endif // defined(OS_ANDROID) 827 #endif // defined(OS_ANDROID)
832 828
833 config.always_translate_min_count = 3; 829 config.always_translate_min_count = 3;
834 return config; 830 return config;
835 } 831 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698