OLD | NEW |
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/memory/singleton.h" | 9 #include "base/memory/singleton.h" |
10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 return; | 426 return; |
427 } | 427 } |
428 | 428 |
429 TranslateBrowserMetrics::ReportInitiationStatus( | 429 TranslateBrowserMetrics::ReportInitiationStatus( |
430 TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); | 430 TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); |
431 | 431 |
432 if (IsEnabledTranslateNewUX()) { | 432 if (IsEnabledTranslateNewUX()) { |
433 language_state.SetTranslateEnabled(true); | 433 language_state.SetTranslateEnabled(true); |
434 if (language_state.HasLanguageChanged()) { | 434 if (language_state.HasLanguageChanged()) { |
435 ShowBubble(web_contents, | 435 ShowBubble(web_contents, |
436 TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE); | 436 TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE, |
| 437 TranslateErrors::NONE); |
437 } | 438 } |
438 } else { | 439 } else { |
439 // Prompts the user if he/she wants the page translated. | 440 // Prompts the user if he/she wants the page translated. |
440 TranslateInfoBarDelegate::Create( | 441 TranslateInfoBarDelegate::Create( |
441 false, InfoBarService::FromWebContents(web_contents), | 442 false, InfoBarService::FromWebContents(web_contents), |
442 TranslateInfoBarDelegate::BEFORE_TRANSLATE, language_code, target_lang, | 443 TranslateInfoBarDelegate::BEFORE_TRANSLATE, language_code, target_lang, |
443 TranslateErrors::NONE, profile->GetPrefs(), ShortcutConfig()); | 444 TranslateErrors::NONE, profile->GetPrefs(), ShortcutConfig()); |
444 } | 445 } |
445 } | 446 } |
446 | 447 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
487 | 488 |
488 // Translation can be kicked by context menu against unsupported languages. | 489 // Translation can be kicked by context menu against unsupported languages. |
489 // Unsupported language strings should be replaced with | 490 // Unsupported language strings should be replaced with |
490 // kUnknownLanguageCode in order to send a translation request with enabling | 491 // kUnknownLanguageCode in order to send a translation request with enabling |
491 // server side auto language detection. | 492 // server side auto language detection. |
492 std::string source_lang(original_source_lang); | 493 std::string source_lang(original_source_lang); |
493 if (!IsSupportedLanguage(source_lang)) | 494 if (!IsSupportedLanguage(source_lang)) |
494 source_lang = std::string(translate::kUnknownLanguageCode); | 495 source_lang = std::string(translate::kUnknownLanguageCode); |
495 | 496 |
496 if (IsEnabledTranslateNewUX()) { | 497 if (IsEnabledTranslateNewUX()) { |
497 ShowBubble(web_contents, TranslateBubbleModel::VIEW_STATE_TRANSLATING); | 498 ShowBubble(web_contents, TranslateBubbleModel::VIEW_STATE_TRANSLATING, |
| 499 TranslateErrors::NONE); |
498 } else { | 500 } else { |
499 Profile* profile = | 501 Profile* profile = |
500 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 502 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
501 TranslateInfoBarDelegate::Create( | 503 TranslateInfoBarDelegate::Create( |
502 true, InfoBarService::FromWebContents(web_contents), | 504 true, InfoBarService::FromWebContents(web_contents), |
503 TranslateInfoBarDelegate::TRANSLATING, source_lang, target_lang, | 505 TranslateInfoBarDelegate::TRANSLATING, source_lang, target_lang, |
504 TranslateErrors::NONE, profile->GetPrefs(), ShortcutConfig()); | 506 TranslateErrors::NONE, profile->GetPrefs(), ShortcutConfig()); |
505 } | 507 } |
506 | 508 |
507 DCHECK(script_.get() != NULL); | 509 DCHECK(script_.get() != NULL); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 details->source_language != translate::kUnknownLanguageCode && | 614 details->source_language != translate::kUnknownLanguageCode && |
613 !IsSupportedLanguage(details->source_language)) { | 615 !IsSupportedLanguage(details->source_language)) { |
614 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; | 616 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; |
615 } | 617 } |
616 | 618 |
617 if (IsEnabledTranslateNewUX()) { | 619 if (IsEnabledTranslateNewUX()) { |
618 TranslateBubbleModel::ViewState view_state = | 620 TranslateBubbleModel::ViewState view_state = |
619 (details->error_type == TranslateErrors::NONE) ? | 621 (details->error_type == TranslateErrors::NONE) ? |
620 TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE : | 622 TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE : |
621 TranslateBubbleModel::VIEW_STATE_ERROR; | 623 TranslateBubbleModel::VIEW_STATE_ERROR; |
622 ShowBubble(web_contents, view_state); | 624 ShowBubble(web_contents, view_state, details->error_type); |
623 } else { | 625 } else { |
624 PrefService* prefs = Profile::FromBrowserContext( | 626 PrefService* prefs = Profile::FromBrowserContext( |
625 web_contents->GetBrowserContext())->GetPrefs(); | 627 web_contents->GetBrowserContext())->GetPrefs(); |
626 TranslateInfoBarDelegate::Create( | 628 TranslateInfoBarDelegate::Create( |
627 true, InfoBarService::FromWebContents(web_contents), | 629 true, InfoBarService::FromWebContents(web_contents), |
628 (details->error_type == TranslateErrors::NONE) ? | 630 (details->error_type == TranslateErrors::NONE) ? |
629 TranslateInfoBarDelegate::AFTER_TRANSLATE : | 631 TranslateInfoBarDelegate::AFTER_TRANSLATE : |
630 TranslateInfoBarDelegate::TRANSLATION_ERROR, | 632 TranslateInfoBarDelegate::TRANSLATION_ERROR, |
631 details->source_language, details->target_language, details->error_type, | 633 details->source_language, details->target_language, details->error_type, |
632 prefs, ShortcutConfig()); | 634 prefs, ShortcutConfig()); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 continue; | 684 continue; |
683 } | 685 } |
684 | 686 |
685 if (success) { | 687 if (success) { |
686 // Translate the page. | 688 // Translate the page. |
687 const std::string& translate_script = script_->data(); | 689 const std::string& translate_script = script_->data(); |
688 DoTranslatePage(web_contents, translate_script, | 690 DoTranslatePage(web_contents, translate_script, |
689 request.source_lang, request.target_lang); | 691 request.source_lang, request.target_lang); |
690 } else { | 692 } else { |
691 if (IsEnabledTranslateNewUX()) { | 693 if (IsEnabledTranslateNewUX()) { |
692 ShowBubble(web_contents, TranslateBubbleModel::VIEW_STATE_ERROR); | 694 ShowBubble(web_contents, TranslateBubbleModel::VIEW_STATE_ERROR, |
| 695 TranslateErrors::NETWORK); |
693 } else { | 696 } else { |
694 Profile* profile = | 697 Profile* profile = |
695 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 698 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
696 TranslateInfoBarDelegate::Create( | 699 TranslateInfoBarDelegate::Create( |
697 true, InfoBarService::FromWebContents(web_contents), | 700 true, InfoBarService::FromWebContents(web_contents), |
698 TranslateInfoBarDelegate::TRANSLATION_ERROR, request.source_lang, | 701 TranslateInfoBarDelegate::TRANSLATION_ERROR, request.source_lang, |
699 request.target_lang, TranslateErrors::NETWORK, profile->GetPrefs(), | 702 request.target_lang, TranslateErrors::NETWORK, profile->GetPrefs(), |
700 ShortcutConfig()); | 703 ShortcutConfig()); |
701 } | 704 } |
702 | 705 |
703 if (!web_contents->GetBrowserContext()->IsOffTheRecord()) { | 706 if (!web_contents->GetBrowserContext()->IsOffTheRecord()) { |
704 TranslateErrorDetails error_details; | 707 TranslateErrorDetails error_details; |
705 error_details.time = base::Time::Now(); | 708 error_details.time = base::Time::Now(); |
706 error_details.url = entry->GetURL(); | 709 error_details.url = entry->GetURL(); |
707 error_details.error = TranslateErrors::NETWORK; | 710 error_details.error = TranslateErrors::NETWORK; |
708 NotifyTranslateError(error_details); | 711 NotifyTranslateError(error_details); |
709 } | 712 } |
710 } | 713 } |
711 } | 714 } |
712 pending_requests_.clear(); | 715 pending_requests_.clear(); |
713 } | 716 } |
714 | 717 |
715 void TranslateManager::ShowBubble(WebContents* web_contents, | 718 void TranslateManager::ShowBubble(WebContents* web_contents, |
716 TranslateBubbleModel::ViewState view_state) { | 719 TranslateBubbleModel::ViewState view_state, |
| 720 TranslateErrors::Type error_type) { |
717 // The bubble is implemented only on the desktop platforms. | 721 // The bubble is implemented only on the desktop platforms. |
718 #if !defined(OS_ANDROID) && !defined(OS_IOS) | 722 #if !defined(OS_ANDROID) && !defined(OS_IOS) |
719 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); | 723 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); |
720 | 724 |
721 // |browser| might be NULL when testing. In this case, Show(...) should be | 725 // |browser| might be NULL when testing. In this case, Show(...) should be |
722 // called because the implementation for testing is used. | 726 // called because the implementation for testing is used. |
723 if (!browser) { | 727 if (!browser) { |
724 TranslateBubbleFactory::Show(NULL, web_contents, view_state); | 728 TranslateBubbleFactory::Show(NULL, web_contents, view_state, error_type); |
725 return; | 729 return; |
726 } | 730 } |
727 | 731 |
728 if (web_contents != browser->tab_strip_model()->GetActiveWebContents()) | 732 if (web_contents != browser->tab_strip_model()->GetActiveWebContents()) |
729 return; | 733 return; |
730 | 734 |
731 BrowserWindow* window = browser->window(); | 735 BrowserWindow* window = browser->window(); |
732 if (window && !window->IsActive()) | 736 if (window && !window->IsActive()) |
733 return; | 737 return; |
734 | 738 |
735 TranslateBubbleFactory::Show(window, web_contents, view_state); | 739 TranslateBubbleFactory::Show(window, web_contents, view_state, error_type); |
736 #else | 740 #else |
737 NOTREACHED(); | 741 NOTREACHED(); |
738 #endif | 742 #endif |
739 } | 743 } |
740 | 744 |
741 // static | 745 // static |
742 std::string TranslateManager::GetTargetLanguage(PrefService* prefs) { | 746 std::string TranslateManager::GetTargetLanguage(PrefService* prefs) { |
743 std::string ui_lang = | 747 std::string ui_lang = |
744 TranslatePrefs::ConvertLangCodeForTranslation( | 748 TranslatePrefs::ConvertLangCodeForTranslation( |
745 GetLanguageCode(g_browser_process->GetApplicationLocale())); | 749 GetLanguageCode(g_browser_process->GetApplicationLocale())); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
789 // so we are more aggressive about showing the shortcut to never translate. | 793 // so we are more aggressive about showing the shortcut to never translate. |
790 #if defined(OS_ANDROID) | 794 #if defined(OS_ANDROID) |
791 config.never_translate_min_count = 1; | 795 config.never_translate_min_count = 1; |
792 #else | 796 #else |
793 config.never_translate_min_count = 3; | 797 config.never_translate_min_count = 3; |
794 #endif // defined(OS_ANDROID) | 798 #endif // defined(OS_ANDROID) |
795 | 799 |
796 config.always_translate_min_count = 3; | 800 config.always_translate_min_count = 3; |
797 return config; | 801 return config; |
798 } | 802 } |
OLD | NEW |