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/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include "chrome/browser/tab_contents/tab_util.h" | 24 #include "chrome/browser/tab_contents/tab_util.h" |
25 #include "chrome/browser/translate/page_translated_details.h" | 25 #include "chrome/browser/translate/page_translated_details.h" |
26 #include "chrome/browser/translate/translate_infobar_delegate.h" | 26 #include "chrome/browser/translate/translate_infobar_delegate.h" |
27 #include "chrome/browser/translate/translate_manager_metrics.h" | 27 #include "chrome/browser/translate/translate_manager_metrics.h" |
28 #include "chrome/browser/translate/translate_prefs.h" | 28 #include "chrome/browser/translate/translate_prefs.h" |
29 #include "chrome/browser/translate/translate_tab_helper.h" | 29 #include "chrome/browser/translate/translate_tab_helper.h" |
30 #include "chrome/browser/ui/browser.h" | 30 #include "chrome/browser/ui/browser.h" |
31 #include "chrome/browser/ui/browser_finder.h" | 31 #include "chrome/browser/ui/browser_finder.h" |
32 #include "chrome/browser/ui/browser_tabstrip.h" | 32 #include "chrome/browser/ui/browser_tabstrip.h" |
33 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 33 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 34 #include "chrome/common/chrome_constants.h" |
34 #include "chrome/common/chrome_notification_types.h" | 35 #include "chrome/common/chrome_notification_types.h" |
35 #include "chrome/common/chrome_switches.h" | 36 #include "chrome/common/chrome_switches.h" |
36 #include "chrome/common/language_detection_details.h" | 37 #include "chrome/common/language_detection_details.h" |
37 #include "chrome/common/pref_names.h" | 38 #include "chrome/common/pref_names.h" |
38 #include "chrome/common/render_messages.h" | 39 #include "chrome/common/render_messages.h" |
39 #include "chrome/common/translate_errors.h" | 40 #include "chrome/common/translate_errors.h" |
40 #include "chrome/common/url_constants.h" | 41 #include "chrome/common/url_constants.h" |
41 #include "content/public/browser/navigation_controller.h" | 42 #include "content/public/browser/navigation_controller.h" |
42 #include "content/public/browser/navigation_details.h" | 43 #include "content/public/browser/navigation_details.h" |
43 #include "content/public/browser/navigation_entry.h" | 44 #include "content/public/browser/navigation_entry.h" |
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
671 weak_method_factory_.GetWeakPtr(), process_id, | 672 weak_method_factory_.GetWeakPtr(), process_id, |
672 render_id, page_lang, ++attempt), | 673 render_id, page_lang, ++attempt), |
673 base::TimeDelta::FromMilliseconds(backoff)); | 674 base::TimeDelta::FromMilliseconds(backoff)); |
674 return; | 675 return; |
675 } | 676 } |
676 | 677 |
677 InitiateTranslation(web_contents, GetLanguageCode(page_lang)); | 678 InitiateTranslation(web_contents, GetLanguageCode(page_lang)); |
678 } | 679 } |
679 | 680 |
680 void TranslateManager::TranslatePage(WebContents* web_contents, | 681 void TranslateManager::TranslatePage(WebContents* web_contents, |
681 const std::string& source_lang, | 682 const std::string& original_source_lang, |
682 const std::string& target_lang) { | 683 const std::string& target_lang) { |
683 NavigationEntry* entry = web_contents->GetController().GetActiveEntry(); | 684 NavigationEntry* entry = web_contents->GetController().GetActiveEntry(); |
684 if (!entry) { | 685 if (!entry) { |
685 NOTREACHED(); | 686 NOTREACHED(); |
686 return; | 687 return; |
687 } | 688 } |
688 | 689 |
689 Profile* profile = | 690 Profile* profile = |
690 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 691 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
691 | 692 |
| 693 std::string source_lang(original_source_lang); |
| 694 |
| 695 // Translation can be kicked by context menu against unsupported languages. |
| 696 // Unsupported language strings should be replaced with |
| 697 // kUnknownLanguageCode in order to send a translation request with enabling |
| 698 // server side auto language detection. |
| 699 if (!IsSupportedLanguage(source_lang)) |
| 700 source_lang = std::string(chrome::kUnknownLanguageCode); |
| 701 |
692 TranslateInfoBarDelegate::Create( | 702 TranslateInfoBarDelegate::Create( |
693 InfoBarService::FromWebContents(web_contents), true, | 703 InfoBarService::FromWebContents(web_contents), true, |
694 TranslateInfoBarDelegate::TRANSLATING, TranslateErrors::NONE, | 704 TranslateInfoBarDelegate::TRANSLATING, TranslateErrors::NONE, |
695 profile->GetPrefs(), ShortcutConfig(), source_lang, target_lang); | 705 profile->GetPrefs(), ShortcutConfig(), source_lang, target_lang); |
696 | 706 |
697 if (!translate_script_.empty()) { | 707 if (!translate_script_.empty()) { |
698 DoTranslatePage(web_contents, translate_script_, source_lang, target_lang); | 708 DoTranslatePage(web_contents, translate_script_, source_lang, target_lang); |
699 return; | 709 return; |
700 } | 710 } |
701 | 711 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
775 | 785 |
776 translate_tab_helper->language_state().set_translation_pending(true); | 786 translate_tab_helper->language_state().set_translation_pending(true); |
777 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_TranslatePage( | 787 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_TranslatePage( |
778 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID(), | 788 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID(), |
779 translate_script, source_lang, target_lang)); | 789 translate_script, source_lang, target_lang)); |
780 } | 790 } |
781 | 791 |
782 void TranslateManager::PageTranslated(WebContents* web_contents, | 792 void TranslateManager::PageTranslated(WebContents* web_contents, |
783 PageTranslatedDetails* details) { | 793 PageTranslatedDetails* details) { |
784 if ((details->error_type == TranslateErrors::NONE) && | 794 if ((details->error_type == TranslateErrors::NONE) && |
| 795 details->source_language != chrome::kUnknownLanguageCode && |
785 !IsSupportedLanguage(details->source_language)) { | 796 !IsSupportedLanguage(details->source_language)) { |
786 // TODO(jcivelli): http://crbug.com/9390 We should change the "after | 797 // TODO(toyoshim): http://crbug.com/242142 We should check if |
787 // translate" infobar to support unknown as the original | 798 // l10n_util::GetDisplayNameForLocale() support |source_language| here. |
788 // language. | 799 // Also, following metrics should be modified to have language code. |
789 TranslateManagerMetrics::ReportUnsupportedLanguage(); | 800 TranslateManagerMetrics::ReportUnsupportedLanguage(); |
790 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; | 801 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; |
791 } | 802 } |
792 | 803 |
793 Profile* profile = | 804 Profile* profile = |
794 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 805 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
795 PrefService* prefs = profile->GetPrefs(); | 806 PrefService* prefs = profile->GetPrefs(); |
796 TranslateInfoBarDelegate::Create( | 807 TranslateInfoBarDelegate::Create( |
797 InfoBarService::FromWebContents(web_contents), true, | 808 InfoBarService::FromWebContents(web_contents), true, |
798 (details->error_type == TranslateErrors::NONE) ? | 809 (details->error_type == TranslateErrors::NONE) ? |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
984 // reason so we are more aggressive showing the shortcuts for never translate. | 995 // reason so we are more aggressive showing the shortcuts for never translate. |
985 #if defined(OS_ANDROID) | 996 #if defined(OS_ANDROID) |
986 config.never_translate_min_count = 1; | 997 config.never_translate_min_count = 1; |
987 #else | 998 #else |
988 config.never_translate_min_count = 3; | 999 config.never_translate_min_count = 3; |
989 #endif // defined(OS_ANDROID) | 1000 #endif // defined(OS_ANDROID) |
990 | 1001 |
991 config.always_translate_min_count = 3; | 1002 config.always_translate_min_count = 3; |
992 return config; | 1003 return config; |
993 } | 1004 } |
OLD | NEW |