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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 #include "content/public/browser/render_view_host.h" | 50 #include "content/public/browser/render_view_host.h" |
51 #include "content/public/browser/web_contents.h" | 51 #include "content/public/browser/web_contents.h" |
52 #include "google_apis/google_api_keys.h" | 52 #include "google_apis/google_api_keys.h" |
53 #include "grit/browser_resources.h" | 53 #include "grit/browser_resources.h" |
54 #include "net/base/escape.h" | 54 #include "net/base/escape.h" |
55 #include "net/base/load_flags.h" | 55 #include "net/base/load_flags.h" |
56 #include "net/base/url_util.h" | 56 #include "net/base/url_util.h" |
57 #include "net/http/http_status_code.h" | 57 #include "net/http/http_status_code.h" |
58 #include "net/url_request/url_fetcher.h" | 58 #include "net/url_request/url_fetcher.h" |
59 #include "net/url_request/url_request_status.h" | 59 #include "net/url_request/url_request_status.h" |
| 60 #include "ui/base/l10n/l10n_util.h" |
60 #include "ui/base/resource/resource_bundle.h" | 61 #include "ui/base/resource/resource_bundle.h" |
61 | 62 |
62 #ifdef FILE_MANAGER_EXTENSION | 63 #ifdef FILE_MANAGER_EXTENSION |
63 #include "chrome/browser/chromeos/extensions/file_manager/file_manager_util.h" | 64 #include "chrome/browser/chromeos/extensions/file_manager/file_manager_util.h" |
64 #include "extensions/common/constants.h" | 65 #include "extensions/common/constants.h" |
65 #endif | 66 #endif |
66 | 67 |
67 using content::NavigationController; | 68 using content::NavigationController; |
68 using content::NavigationEntry; | 69 using content::NavigationEntry; |
69 using content::WebContents; | 70 using content::WebContents; |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 return chrome_locale; | 311 return chrome_locale; |
311 return chrome_locale.substr(0, hypen_index); | 312 return chrome_locale.substr(0, hypen_index); |
312 } | 313 } |
313 | 314 |
314 // static | 315 // static |
315 bool TranslateManager::IsSupportedLanguage(const std::string& page_language) { | 316 bool TranslateManager::IsSupportedLanguage(const std::string& page_language) { |
316 InitSupportedLanguages(); | 317 InitSupportedLanguages(); |
317 return supported_languages_.Pointer()->count(page_language) != 0; | 318 return supported_languages_.Pointer()->count(page_language) != 0; |
318 } | 319 } |
319 | 320 |
| 321 // static |
| 322 bool TranslateManager::IsAvailableLanguage(const std::string& language) { |
| 323 const std::string& locale = g_browser_process->GetApplicationLocale(); |
| 324 return l10n_util::IsLocaleNameTranslated(language, locale);; |
| 325 } |
| 326 |
320 void TranslateManager::Observe(int type, | 327 void TranslateManager::Observe(int type, |
321 const content::NotificationSource& source, | 328 const content::NotificationSource& source, |
322 const content::NotificationDetails& details) { | 329 const content::NotificationDetails& details) { |
323 switch (type) { | 330 switch (type) { |
324 case content::NOTIFICATION_NAV_ENTRY_COMMITTED: { | 331 case content::NOTIFICATION_NAV_ENTRY_COMMITTED: { |
325 NavigationController* controller = | 332 NavigationController* controller = |
326 content::Source<NavigationController>(source).ptr(); | 333 content::Source<NavigationController>(source).ptr(); |
327 content::LoadCommittedDetails* load_details = | 334 content::LoadCommittedDetails* load_details = |
328 content::Details<content::LoadCommittedDetails>(details).ptr(); | 335 content::Details<content::LoadCommittedDetails>(details).ptr(); |
329 NavigationEntry* entry = controller->GetActiveEntry(); | 336 NavigationEntry* entry = controller->GetActiveEntry(); |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 TranslateManagerMetrics::ReportInitiationStatus( | 593 TranslateManagerMetrics::ReportInitiationStatus( |
587 TranslateManagerMetrics::INITIATION_STATUS_ACCEPT_LANGUAGES); | 594 TranslateManagerMetrics::INITIATION_STATUS_ACCEPT_LANGUAGES); |
588 return; | 595 return; |
589 } | 596 } |
590 | 597 |
591 // Nothing to do if either the language Chrome is in or the language of the | 598 // Nothing to do if either the language Chrome is in or the language of the |
592 // page is not supported by the translation server. | 599 // page is not supported by the translation server. |
593 if (target_lang.empty() || !IsSupportedLanguage(language_code)) { | 600 if (target_lang.empty() || !IsSupportedLanguage(language_code)) { |
594 TranslateManagerMetrics::ReportInitiationStatus( | 601 TranslateManagerMetrics::ReportInitiationStatus( |
595 TranslateManagerMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); | 602 TranslateManagerMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); |
| 603 TranslateManagerMetrics::ReportUnsupportedLanguageAtInitiation( |
| 604 language_code); |
| 605 |
596 return; | 606 return; |
597 } | 607 } |
598 | 608 |
599 // Don't translate any user black-listed URLs or user selected language | 609 // Don't translate any user black-listed URLs or user selected language |
600 // combination. | 610 // combination. |
601 if (!TranslatePrefs::CanTranslate(prefs, language_code, page_url)) { | 611 if (!TranslatePrefs::CanTranslate(prefs, language_code, page_url)) { |
602 TranslateManagerMetrics::ReportInitiationStatus( | 612 TranslateManagerMetrics::ReportInitiationStatus( |
603 TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); | 613 TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); |
604 return; | 614 return; |
605 } | 615 } |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
784 return; | 794 return; |
785 | 795 |
786 translate_tab_helper->language_state().set_translation_pending(true); | 796 translate_tab_helper->language_state().set_translation_pending(true); |
787 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_TranslatePage( | 797 web_contents->GetRenderViewHost()->Send(new ChromeViewMsg_TranslatePage( |
788 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID(), | 798 web_contents->GetRenderViewHost()->GetRoutingID(), entry->GetPageID(), |
789 translate_script, source_lang, target_lang)); | 799 translate_script, source_lang, target_lang)); |
790 } | 800 } |
791 | 801 |
792 void TranslateManager::PageTranslated(WebContents* web_contents, | 802 void TranslateManager::PageTranslated(WebContents* web_contents, |
793 PageTranslatedDetails* details) { | 803 PageTranslatedDetails* details) { |
794 if ((details->error_type == TranslateErrors::NONE) && | 804 if (details->error_type == TranslateErrors::NONE) { |
795 details->source_language != chrome::kUnknownLanguageCode && | 805 const std::string& language = details->source_language; |
796 !IsSupportedLanguage(details->source_language)) { | 806 if (!IsAvailableLanguage(language)) { |
797 // TODO(toyoshim): http://crbug.com/242142 We should check if | 807 TranslateManagerMetrics::ReportUnavailableLanguage(language); |
798 // l10n_util::GetDisplayNameForLocale() support |source_language| here. | 808 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; |
799 // Also, following metrics should be modified to have language code. | 809 } |
800 TranslateManagerMetrics::ReportUnsupportedLanguage(); | |
801 details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; | |
802 } | 810 } |
803 | 811 |
804 Profile* profile = | 812 Profile* profile = |
805 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 813 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
806 PrefService* prefs = profile->GetPrefs(); | 814 PrefService* prefs = profile->GetPrefs(); |
807 TranslateInfoBarDelegate::Create( | 815 TranslateInfoBarDelegate::Create( |
808 InfoBarService::FromWebContents(web_contents), true, | 816 InfoBarService::FromWebContents(web_contents), true, |
809 (details->error_type == TranslateErrors::NONE) ? | 817 (details->error_type == TranslateErrors::NONE) ? |
810 TranslateInfoBarDelegate::AFTER_TRANSLATE : | 818 TranslateInfoBarDelegate::AFTER_TRANSLATE : |
811 TranslateInfoBarDelegate::TRANSLATION_ERROR, | 819 TranslateInfoBarDelegate::TRANSLATION_ERROR, |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
995 // reason so we are more aggressive showing the shortcuts for never translate. | 1003 // reason so we are more aggressive showing the shortcuts for never translate. |
996 #if defined(OS_ANDROID) | 1004 #if defined(OS_ANDROID) |
997 config.never_translate_min_count = 1; | 1005 config.never_translate_min_count = 1; |
998 #else | 1006 #else |
999 config.never_translate_min_count = 3; | 1007 config.never_translate_min_count = 3; |
1000 #endif // defined(OS_ANDROID) | 1008 #endif // defined(OS_ANDROID) |
1001 | 1009 |
1002 config.always_translate_min_count = 3; | 1010 config.always_translate_min_count = 3; |
1003 return config; | 1011 return config; |
1004 } | 1012 } |
OLD | NEW |