| 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 |