diff options
author | hajimehoshi@chromium.org <hajimehoshi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-14 08:39:38 +0000 |
---|---|---|
committer | hajimehoshi@chromium.org <hajimehoshi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-14 08:39:38 +0000 |
commit | 462e90901f8079a985ed3beda224bcee63ca6cf4 (patch) | |
tree | 11aa8bc8ace98888220c40f50e3cf0ba3dff7987 | |
parent | 692280dd64a5d85f38ae2138c44854af847f25a2 (diff) | |
download | chromium_src-462e90901f8079a985ed3beda224bcee63ca6cf4.zip chromium_src-462e90901f8079a985ed3beda224bcee63ca6cf4.tar.gz chromium_src-462e90901f8079a985ed3beda224bcee63ca6cf4.tar.bz2 |
Translate: Filter and record languages whose names Chrome doesn't show
1) Filter undisplayable languages (, whose names Chrome doesn't show)
2) Record undisplayable languages
3) Rename TranslateManagerMetrics to TranslateBrowserMetrics
4) Obsolete Translate.ServerReportedUnsupportedLanguage
The Tranlate server sends the language list, and this may include a language UI can't deal with for lack of the resource. This CL filters such languages and reports them by UMA 'Translate.UndisplayableLanguage'. This UMA can be substitute of 'Translate.ServerReportedUnsupportedLanguage'. 'Translate.ServerReportedUnsupportedLanguage' is no longer needed and I made it obsolete.
Originally, we intended to implement the other UMA 'Translate.UnavailableLanguage' https://chromiumcodereview.appspot.com/15311006/, but changed our direction.
Moreover, Translate.ServerReportedUnsupportedLanguage was supposed to be removed in that CL, but I kept it unchanged accidentally.
BUG=242142
TEST=unit_tests
Review URL: https://chromiumcodereview.appspot.com/15987004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@206371 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/translate/translate_browser_metrics.cc (renamed from chrome/browser/translate/translate_manager_metrics.cc) | 48 | ||||
-rw-r--r-- | chrome/browser/translate/translate_browser_metrics.h (renamed from chrome/browser/translate/translate_manager_metrics.h) | 23 | ||||
-rw-r--r-- | chrome/browser/translate/translate_browser_metrics_unittest.cc (renamed from chrome/browser/translate/translate_manager_metrics_unittest.cc) | 105 | ||||
-rw-r--r-- | chrome/browser/translate/translate_language_list.cc | 15 | ||||
-rw-r--r-- | chrome/browser/translate/translate_manager.cc | 53 | ||||
-rw-r--r-- | chrome/browser/translate/translate_manager_browsertest.cc | 12 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 4 | ||||
-rw-r--r-- | chrome/chrome_tests_unit.gypi | 2 | ||||
-rw-r--r-- | tools/metrics/histograms/histograms.xml | 12 | ||||
-rw-r--r-- | ui/base/l10n/l10n_util.cc | 31 | ||||
-rw-r--r-- | ui/base/l10n/l10n_util.h | 5 |
11 files changed, 171 insertions, 139 deletions
diff --git a/chrome/browser/translate/translate_manager_metrics.cc b/chrome/browser/translate/translate_browser_metrics.cc index 4b88bff..0a8e582 100644 --- a/chrome/browser/translate/translate_manager_metrics.cc +++ b/chrome/browser/translate/translate_browser_metrics.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/translate/translate_manager_metrics.h" +#include "chrome/browser/translate/translate_browser_metrics.h" #include <string> @@ -19,38 +19,38 @@ const char kTranslateInitiationStatus[] = "Translate.InitiationStatus"; const char kTranslateReportLanguageDetectionError[] = "Translate.ReportLanguageDetectionError"; -const char kTranslateServerReportedUnsupportedLanguage[] = - "Translate.ServerReportedUnsupportedLanguage"; -const char kTranslateUnsupportedLanguageAtInitiation[] = - "Translate.UnsupportedLanguageAtInitiation"; const char kTranslateLocalesOnDisabledByPrefs[] = "Translate.LocalesOnDisabledByPrefs"; +const char kTranslateUndisplayableLanguage[] = + "Translate.UndisplayableLanguage"; +const char kTranslateUnsupportedLanguageAtInitiation[] = + "Translate.UnsupportedLanguageAtInitiation"; struct MetricsEntry { - TranslateManagerMetrics::MetricsNameIndex index; + TranslateBrowserMetrics::MetricsNameIndex index; const char* const name; }; // This entry table should be updated when new UMA items are added. const MetricsEntry kMetricsEntries[] = { - { TranslateManagerMetrics::UMA_INITIATION_STATUS, + { TranslateBrowserMetrics::UMA_INITIATION_STATUS, kTranslateInitiationStatus }, - { TranslateManagerMetrics::UMA_LANGUAGE_DETECTION_ERROR, + { TranslateBrowserMetrics::UMA_LANGUAGE_DETECTION_ERROR, kTranslateReportLanguageDetectionError }, - { TranslateManagerMetrics::UMA_SERVER_REPORTED_UNSUPPORTED_LANGUAGE, - kTranslateServerReportedUnsupportedLanguage }, - { TranslateManagerMetrics::UMA_UNSUPPORTED_LANGUAGE_AT_INITIATION, - kTranslateUnsupportedLanguageAtInitiation }, - { TranslateManagerMetrics::UMA_LOCALES_ON_DISABLED_BY_PREFS, + { TranslateBrowserMetrics::UMA_LOCALES_ON_DISABLED_BY_PREFS, kTranslateLocalesOnDisabledByPrefs }, + { TranslateBrowserMetrics::UMA_UNDISPLAYABLE_LANGUAGE, + kTranslateUndisplayableLanguage }, + { TranslateBrowserMetrics::UMA_UNSUPPORTED_LANGUAGE_AT_INITIATION, + kTranslateUnsupportedLanguageAtInitiation }, }; -COMPILE_ASSERT(arraysize(kMetricsEntries) == TranslateManagerMetrics::UMA_MAX, +COMPILE_ASSERT(arraysize(kMetricsEntries) == TranslateBrowserMetrics::UMA_MAX, arraysize_of_kMetricsEntries_should_be_UMA_MAX); } // namespace -namespace TranslateManagerMetrics { +namespace TranslateBrowserMetrics { void ReportInitiationStatus(InitiationStatusType type) { UMA_HISTOGRAM_ENUMERATION(kTranslateInitiationStatus, @@ -62,8 +62,15 @@ void ReportLanguageDetectionError() { UMA_HISTOGRAM_BOOLEAN(kTranslateReportLanguageDetectionError, true); } -void ReportUnsupportedLanguage() { - UMA_HISTOGRAM_BOOLEAN(kTranslateServerReportedUnsupportedLanguage, true); +void ReportLocalesOnDisabledByPrefs(const std::string& locale) { + UMA_HISTOGRAM_SPARSE_SLOWLY(kTranslateLocalesOnDisabledByPrefs, + LanguageUsageMetrics::ToLanguageCode(locale)); +} + +void ReportUndisplayableLanguage(const std::string& language) { + int language_code = LanguageUsageMetrics::ToLanguageCode(language); + UMA_HISTOGRAM_SPARSE_SLOWLY(kTranslateUndisplayableLanguage, + language_code); } void ReportUnsupportedLanguageAtInitiation(const std::string& language) { @@ -72,11 +79,6 @@ void ReportUnsupportedLanguageAtInitiation(const std::string& language) { language_code); } -void ReportLocalesOnDisabledByPrefs(const std::string& locale) { - UMA_HISTOGRAM_SPARSE_SLOWLY(kTranslateLocalesOnDisabledByPrefs, - LanguageUsageMetrics::ToLanguageCode(locale)); -} - const char* GetMetricsName(MetricsNameIndex index) { for (size_t i = 0; i < arraysize(kMetricsEntries); ++i) { if (kMetricsEntries[i].index == index) @@ -86,4 +88,4 @@ const char* GetMetricsName(MetricsNameIndex index) { return NULL; } -} // namespace TranslateManagerMetrics +} // namespace TranslateBrowserMetrics diff --git a/chrome/browser/translate/translate_manager_metrics.h b/chrome/browser/translate/translate_browser_metrics.h index e0378bc..796dda0 100644 --- a/chrome/browser/translate/translate_manager_metrics.h +++ b/chrome/browser/translate/translate_browser_metrics.h @@ -2,21 +2,21 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_TRANSLATE_TRANSLATE_MANAGER_METRICS_H_ -#define CHROME_BROWSER_TRANSLATE_TRANSLATE_MANAGER_METRICS_H_ +#ifndef CHROME_BROWSER_TRANSLATE_TRANSLATE_BROWSER_METRICS_H_ +#define CHROME_BROWSER_TRANSLATE_TRANSLATE_BROWSER_METRICS_H_ #include <string> -namespace TranslateManagerMetrics { +namespace TranslateBrowserMetrics { // An indexing type to query each UMA entry name via GetMetricsName() function. // Note: |kMetricsEntries| should be updated when a new entry is added here. enum MetricsNameIndex { UMA_INITIATION_STATUS, UMA_LANGUAGE_DETECTION_ERROR, - UMA_SERVER_REPORTED_UNSUPPORTED_LANGUAGE, - UMA_UNSUPPORTED_LANGUAGE_AT_INITIATION, UMA_LOCALES_ON_DISABLED_BY_PREFS, + UMA_UNDISPLAYABLE_LANGUAGE, + UMA_UNSUPPORTED_LANGUAGE_AT_INITIATION, UMA_MAX, }; @@ -45,16 +45,17 @@ void ReportInitiationStatus(InitiationStatusType type); // Called when Chrome opens the URL so that the user sends an error feedback. void ReportLanguageDetectionError(); -// Called when it turns out that translating page is in unsupported language. -void ReportUnsupportedLanguage(); +void ReportLocalesOnDisabledByPrefs(const std::string& locale); + +// Called when Chrome Translate server sends the language list which includes +// a undisplayable language in the user's locale. +void ReportUndisplayableLanguage(const std::string& language); void ReportUnsupportedLanguageAtInitiation(const std::string& language); -void ReportLocalesOnDisabledByPrefs(const std::string& locale); - // Provides UMA entry names for unit tests. const char* GetMetricsName(MetricsNameIndex index); -} // namespace TranslateManagerMetrics +} // namespace TranslateBrowserMetrics -#endif // CHROME_BROWSER_TRANSLATE_TRANSLATE_MANAGER_METRICS_H_ +#endif // CHROME_BROWSER_TRANSLATE_TRANSLATE_BROWSER_METRICS_H_ diff --git a/chrome/browser/translate/translate_manager_metrics_unittest.cc b/chrome/browser/translate/translate_browser_metrics_unittest.cc index 3425e74..7d4d29b 100644 --- a/chrome/browser/translate/translate_manager_metrics_unittest.cc +++ b/chrome/browser/translate/translate_browser_metrics_unittest.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/translate/translate_manager_metrics.h" +#include "chrome/browser/translate/translate_browser_metrics.h" #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" @@ -41,25 +41,25 @@ class MetricsRecorder { Snapshot(); EXPECT_EQ(expected_disabled_by_prefs, GetCountWithoutSnapshot( - TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_PREFS)); + TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS)); EXPECT_EQ(expected_disabled_by_switch, GetCountWithoutSnapshot( - TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH)); + TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH)); EXPECT_EQ(expected_disabled_by_config, GetCountWithoutSnapshot( - TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG)); + TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG)); EXPECT_EQ(expected_language_is_not_supported, GetCountWithoutSnapshot( - TranslateManagerMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED)); + TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED)); EXPECT_EQ(expected_url_is_not_supported, GetCountWithoutSnapshot( - TranslateManagerMetrics::INITIATION_STATUS_URL_IS_NOT_SUPPORTED)); + TranslateBrowserMetrics::INITIATION_STATUS_URL_IS_NOT_SUPPORTED)); EXPECT_EQ(expected_similar_languages, GetCountWithoutSnapshot( - TranslateManagerMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES)); + TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES)); EXPECT_EQ(expected_accept_languages, GetCountWithoutSnapshot( - TranslateManagerMetrics::INITIATION_STATUS_ACCEPT_LANGUAGES)); + TranslateBrowserMetrics::INITIATION_STATUS_ACCEPT_LANGUAGES)); EXPECT_EQ(expected_auto_by_config, GetCountWithoutSnapshot( - TranslateManagerMetrics::INITIATION_STATUS_AUTO_BY_CONFIG)); + TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG)); EXPECT_EQ(expected_auto_by_link, GetCountWithoutSnapshot( - TranslateManagerMetrics::INITIATION_STATUS_AUTO_BY_LINK)); + TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK)); EXPECT_EQ(expected_show_infobar, GetCountWithoutSnapshot( - TranslateManagerMetrics::INITIATION_STATUS_SHOW_INFOBAR)); + TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR)); } HistogramBase::Count GetTotalCount() { @@ -103,76 +103,79 @@ class MetricsRecorder { } // namespace -TEST(TranslateManagerMetricsTest, ReportInitiationStatus) { - MetricsRecorder recorder(TranslateManagerMetrics::GetMetricsName( - TranslateManagerMetrics::UMA_INITIATION_STATUS)); +TEST(TranslateBrowserMetricsTest, ReportInitiationStatus) { + MetricsRecorder recorder(TranslateBrowserMetrics::GetMetricsName( + TranslateBrowserMetrics::UMA_INITIATION_STATUS)); recorder.CheckInitiationStatus(0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); recorder.CheckInitiationStatus(1, 0, 0, 0, 0, 0, 0, 0, 0, 0); - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH); recorder.CheckInitiationStatus(1, 1, 0, 0, 0, 0, 0, 0, 0, 0); - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); recorder.CheckInitiationStatus(1, 1, 1, 0, 0, 0, 0, 0, 0, 0); - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); recorder.CheckInitiationStatus(1, 1, 1, 1, 0, 0, 0, 0, 0, 0); - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_URL_IS_NOT_SUPPORTED); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_URL_IS_NOT_SUPPORTED); recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 0, 0, 0, 0, 0); - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 0, 0, 0, 0); - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_ACCEPT_LANGUAGES); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_ACCEPT_LANGUAGES); recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 0, 0, 0); - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_AUTO_BY_CONFIG); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG); recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 0, 0); - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_AUTO_BY_LINK); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK); recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 1, 0); - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_SHOW_INFOBAR); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); recorder.CheckInitiationStatus(1, 1, 1, 1, 1, 1, 1, 1, 1, 1); } -TEST(TranslateManagerMetricsTest, ReportLanguageDetectionError) { - MetricsRecorder recorder(TranslateManagerMetrics::GetMetricsName( - TranslateManagerMetrics::UMA_LANGUAGE_DETECTION_ERROR)); +TEST(TranslateBrowserMetricsTest, ReportLanguageDetectionError) { + MetricsRecorder recorder(TranslateBrowserMetrics::GetMetricsName( + TranslateBrowserMetrics::UMA_LANGUAGE_DETECTION_ERROR)); EXPECT_EQ(0, recorder.GetTotalCount()); - TranslateManagerMetrics::ReportLanguageDetectionError(); + TranslateBrowserMetrics::ReportLanguageDetectionError(); EXPECT_EQ(1, recorder.GetTotalCount()); } -TEST(TranslateManagerMetricsTest, ReportedUnsupportedLanguage) { - MetricsRecorder recorder(TranslateManagerMetrics::GetMetricsName( - TranslateManagerMetrics::UMA_SERVER_REPORTED_UNSUPPORTED_LANGUAGE)); + +TEST(TranslateBrowserMetricsTest, ReportedLocalesOnDisabledByPrefs) { + const int ENGLISH = 25966; + + MetricsRecorder recorder(TranslateBrowserMetrics::GetMetricsName( + TranslateBrowserMetrics::UMA_LOCALES_ON_DISABLED_BY_PREFS)); EXPECT_EQ(0, recorder.GetTotalCount()); - TranslateManagerMetrics::ReportUnsupportedLanguage(); - EXPECT_EQ(1, recorder.GetTotalCount()); + TranslateBrowserMetrics::ReportLocalesOnDisabledByPrefs("en"); + EXPECT_EQ(1, recorder.GetCount(ENGLISH)); } -TEST(TranslateManagerMetricsTest, ReportedUnsupportedLanguageAtInitiation) { +TEST(TranslateBrowserMetricsTest, ReportedUndisplayableLanguage) { const int ENGLISH = 25966; - MetricsRecorder recorder(TranslateManagerMetrics::GetMetricsName( - TranslateManagerMetrics::UMA_UNSUPPORTED_LANGUAGE_AT_INITIATION)); + MetricsRecorder recorder(TranslateBrowserMetrics::GetMetricsName( + TranslateBrowserMetrics::UMA_UNDISPLAYABLE_LANGUAGE)); EXPECT_EQ(0, recorder.GetTotalCount()); - TranslateManagerMetrics::ReportUnsupportedLanguageAtInitiation("en"); + TranslateBrowserMetrics::ReportUndisplayableLanguage("en"); EXPECT_EQ(1, recorder.GetCount(ENGLISH)); } -TEST(TranslateManagerMetricsTest, ReportedLocalesOnDisabledByPrefs) { +TEST(TranslateBrowserMetricsTest, ReportedUnsupportedLanguageAtInitiation) { const int ENGLISH = 25966; - MetricsRecorder recorder(TranslateManagerMetrics::GetMetricsName( - TranslateManagerMetrics::UMA_LOCALES_ON_DISABLED_BY_PREFS)); + MetricsRecorder recorder(TranslateBrowserMetrics::GetMetricsName( + TranslateBrowserMetrics::UMA_UNSUPPORTED_LANGUAGE_AT_INITIATION)); EXPECT_EQ(0, recorder.GetTotalCount()); - TranslateManagerMetrics::ReportLocalesOnDisabledByPrefs("en"); + TranslateBrowserMetrics::ReportUnsupportedLanguageAtInitiation("en"); EXPECT_EQ(1, recorder.GetCount(ENGLISH)); } diff --git a/chrome/browser/translate/translate_language_list.cc b/chrome/browser/translate/translate_language_list.cc index 74e2650b..bc3a590 100644 --- a/chrome/browser/translate/translate_language_list.cc +++ b/chrome/browser/translate/translate_language_list.cc @@ -14,6 +14,7 @@ #include "base/strings/stringprintf.h" #include "base/values.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/translate/translate_browser_metrics.h" #include "chrome/browser/translate/translate_event_details.h" #include "chrome/browser/translate/translate_manager.h" #include "chrome/browser/translate/translate_url_util.h" @@ -23,6 +24,7 @@ #include "net/http/http_status_code.h" #include "net/url_request/url_fetcher.h" #include "net/url_request/url_request_status.h" +#include "ui/base/l10n/l10n_util.h" namespace { @@ -162,6 +164,8 @@ void SetSupportedLanguages(const std::string& language_list, return; } + const std::string& locale = g_browser_process->GetApplicationLocale(); + // Now we can clear language list. set->clear(); std::string message; @@ -170,11 +174,16 @@ void SetSupportedLanguages(const std::string& language_list, !iter.IsAtEnd(); iter.Advance()) { // TODO(toyoshim): Check if UI libraries support adding locale. - set->insert(iter.key()); + const std::string& lang = iter.key(); + if (!l10n_util::IsLocaleNameTranslated(lang.c_str(), locale)) { + TranslateBrowserMetrics::ReportUndisplayableLanguage(lang); + continue; + } + set->insert(lang); if (message.empty()) - message += iter.key(); + message += lang; else - message += ", " + iter.key(); + message += ", " + lang; } NotifyEvent(__LINE__, message); } diff --git a/chrome/browser/translate/translate_manager.cc b/chrome/browser/translate/translate_manager.cc index 03852d2..70f51a2 100644 --- a/chrome/browser/translate/translate_manager.cc +++ b/chrome/browser/translate/translate_manager.cc @@ -23,11 +23,11 @@ #include "chrome/browser/tab_contents/tab_util.h" #include "chrome/browser/translate/page_translated_details.h" #include "chrome/browser/translate/translate_accept_languages.h" +#include "chrome/browser/translate/translate_browser_metrics.h" #include "chrome/browser/translate/translate_error_details.h" #include "chrome/browser/translate/translate_event_details.h" #include "chrome/browser/translate/translate_infobar_delegate.h" #include "chrome/browser/translate/translate_language_list.h" -#include "chrome/browser/translate/translate_manager_metrics.h" #include "chrome/browser/translate/translate_prefs.h" #include "chrome/browser/translate/translate_tab_helper.h" #include "chrome/browser/translate/translate_url_util.h" @@ -402,10 +402,10 @@ void TranslateManager::InitiateTranslation(WebContents* web_contents, Profile* original_profile = profile->GetOriginalProfile(); PrefService* prefs = original_profile->GetPrefs(); if (!prefs->GetBoolean(prefs::kEnableTranslate)) { - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); const std::string& locale = g_browser_process->GetApplicationLocale(); - TranslateManagerMetrics::ReportLocalesOnDisabledByPrefs(locale); + TranslateBrowserMetrics::ReportLocalesOnDisabledByPrefs(locale); return; } @@ -413,8 +413,8 @@ void TranslateManager::InitiateTranslation(WebContents* web_contents, // automated browser testing. if (CommandLine::ForCurrentProcess()->HasSwitch( switches::kDisableTranslate)) { - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_SWITCH); return; } @@ -422,8 +422,8 @@ void TranslateManager::InitiateTranslation(WebContents* web_contents, // History, and so on. GURL page_url = web_contents->GetURL(); if (!IsTranslatableURL(page_url)) { - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_URL_IS_NOT_SUPPORTED); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_URL_IS_NOT_SUPPORTED); return; } @@ -431,34 +431,33 @@ void TranslateManager::InitiateTranslation(WebContents* web_contents, std::string target_lang = GetTargetLanguage(prefs); std::string language_code = GetLanguageCode(page_lang); if (language_code == target_lang) { - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); return; } // Don't translate any language the user configured as accepted languages. if (accept_languages_->IsAcceptLanguage(original_profile, language_code)) { - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_ACCEPT_LANGUAGES); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_ACCEPT_LANGUAGES); return; } // Nothing to do if either the language Chrome is in or the language of the // page is not supported by the translation server. if (target_lang.empty() || !IsSupportedLanguage(language_code)) { - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); - TranslateManagerMetrics::ReportUnsupportedLanguageAtInitiation( + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); + TranslateBrowserMetrics::ReportUnsupportedLanguageAtInitiation( language_code); - return; } // Don't translate any user black-listed URLs or user selected language // combination. if (!TranslatePrefs::CanTranslate(prefs, language_code, page_url)) { - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); return; } @@ -474,8 +473,8 @@ void TranslateManager::InitiateTranslation(WebContents* web_contents, // Also, GetLanguageCode will take care of removing country code if any. auto_target_lang = GetLanguageCode(auto_target_lang); if (IsSupportedLanguage(auto_target_lang)) { - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_AUTO_BY_CONFIG); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG); TranslatePage(web_contents, language_code, auto_target_lang); return; } @@ -490,15 +489,15 @@ void TranslateManager::InitiateTranslation(WebContents* web_contents, translate_tab_helper->language_state().AutoTranslateTo(); if (!auto_translate_to.empty()) { // This page was navigated through a click from a translated page. - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_AUTO_BY_LINK); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK); TranslatePage(web_contents, language_code, auto_translate_to); return; } // Prompts the user if he/she wants the page translated. - TranslateManagerMetrics::ReportInitiationStatus( - TranslateManagerMetrics::INITIATION_STATUS_SHOW_INFOBAR); + TranslateBrowserMetrics::ReportInitiationStatus( + TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); TranslateInfoBarDelegate::Create( InfoBarService::FromWebContents(web_contents), false, TranslateInfoBarDelegate::BEFORE_TRANSLATE, TranslateErrors::NONE, @@ -596,7 +595,7 @@ void TranslateManager::RevertTranslation(WebContents* web_contents) { } void TranslateManager::ReportLanguageDetectionError(WebContents* web_contents) { - TranslateManagerMetrics::ReportLanguageDetectionError(); + TranslateBrowserMetrics::ReportLanguageDetectionError(); // We'll open the URL in a new tab so that the user can tell us more. Browser* browser = chrome::FindBrowserWithWebContents(web_contents); if (!browser) { @@ -652,10 +651,6 @@ void TranslateManager::PageTranslated(WebContents* web_contents, if ((details->error_type == TranslateErrors::NONE) && details->source_language != chrome::kUnknownLanguageCode && !IsSupportedLanguage(details->source_language)) { - // TODO(toyoshim): http://crbug.com/242142 We should check if - // l10n_util::GetDisplayNameForLocale() support |source_language| here. - // Also, following metrics should be modified to have language code. - TranslateManagerMetrics::ReportUnsupportedLanguage(); details->error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; } diff --git a/chrome/browser/translate/translate_manager_browsertest.cc b/chrome/browser/translate/translate_manager_browsertest.cc index cf7dd73..2cc798b 100644 --- a/chrome/browser/translate/translate_manager_browsertest.cc +++ b/chrome/browser/translate/translate_manager_browsertest.cc @@ -624,12 +624,13 @@ TEST_F(TranslateManagerBrowserTest, FetchLanguagesFromTranslateServer) { std::vector<std::string> server_languages; // A list of languages to fake being returned by the translate server. server_languages.push_back("aa"); - server_languages.push_back("bb"); + server_languages.push_back("ak"); server_languages.push_back("ab"); server_languages.push_back("en-CA"); - server_languages.push_back("zz"); - server_languages.push_back("yy"); + server_languages.push_back("zh"); + server_languages.push_back("yi"); server_languages.push_back("fr-FR"); + server_languages.push_back("xx"); // First, get the default languages list: std::vector<std::string> default_supported_languages; @@ -658,9 +659,12 @@ TEST_F(TranslateManagerBrowserTest, FetchLanguagesFromTranslateServer) { SimulateSupportedLanguagesURLFetch(true, server_languages); current_supported_languages.clear(); TranslateManager::GetSupportedLanguages(¤t_supported_languages); + // "xx" can't be displayed in the Translate inforbar, so this is eliminated. + EXPECT_EQ(server_languages.size() - 1, current_supported_languages.size()); // Not sure we need to guarantee the order of languages, so we find them. - EXPECT_EQ(server_languages.size(), current_supported_languages.size()); for (size_t i = 0; i < server_languages.size(); ++i) { + if (server_languages[i] == "xx") + continue; EXPECT_NE(current_supported_languages.end(), std::find(current_supported_languages.begin(), current_supported_languages.end(), diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 94f05e3..668b682 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -2252,6 +2252,8 @@ 'browser/translate/page_translated_details.h', 'browser/translate/translate_accept_languages.h', 'browser/translate/translate_accept_languages.cc', + 'browser/translate/translate_browser_metrics.cc', + 'browser/translate/translate_browser_metrics.h', 'browser/translate/translate_error_details.h', 'browser/translate/translate_event_details.cc', 'browser/translate/translate_event_details.h', @@ -2261,8 +2263,6 @@ 'browser/translate/translate_language_list.h', 'browser/translate/translate_manager.cc', 'browser/translate/translate_manager.h', - 'browser/translate/translate_manager_metrics.cc', - 'browser/translate/translate_manager_metrics.h', 'browser/translate/translate_prefs.cc', 'browser/translate/translate_prefs.h', 'browser/translate/translate_tab_helper.cc', diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi index 6ae7879..7764ff6e 100644 --- a/chrome/chrome_tests_unit.gypi +++ b/chrome/chrome_tests_unit.gypi @@ -1276,7 +1276,7 @@ 'browser/thumbnails/render_widget_snapshot_taker_unittest.cc', 'browser/thumbnails/simple_thumbnail_crop_unittest.cc', 'browser/thumbnails/thumbnail_service_unittest.cc', - 'browser/translate/translate_manager_metrics_unittest.cc', + 'browser/translate/translate_browser_metrics_unittest.cc', 'browser/translate/translate_manager_unittest.cc', 'browser/ui/android/tab_model/tab_model_unittest.cc', 'browser/ui/ash/event_rewriter_unittest.cc', diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 316ea38..1c898e0 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml @@ -10726,6 +10726,9 @@ other types of suffix sets. </histogram> <histogram name="Translate.ServerReportedUnsupportedLanguage"> + <obsolete> + Deprecated 5/2013 by Translate.UndisplayableLanguage + </obsolete> <summary> The number of times the detected language is not supported by Translate Element. @@ -10785,6 +10788,15 @@ other types of suffix sets. </summary> </histogram> +<histogram name="Translate.UndisplayableLanguage" enum="LanguageCode"> + <summary> + Logs an undisplayable language included in the language list sent by the + Translate server. The Translate server sends the list each time the user + runs Chrome. This metrics tells us that there is a language which UI should + support but doesn't. + </summary> +</histogram> + <histogram name="Translate.UnsupportedLanguageAtInitiation" enum="LanguageCode"> <summary> Logs an unsupported source language detected during initiation of the diff --git a/ui/base/l10n/l10n_util.cc b/ui/base/l10n/l10n_util.cc index 9d806d52..995a277 100644 --- a/ui/base/l10n/l10n_util.cc +++ b/ui/base/l10n/l10n_util.cc @@ -208,19 +208,6 @@ bool IsDuplicateName(const std::string& locale_name) { return false; } -bool IsLocaleNameTranslated(const char* locale, - const std::string& display_locale) { - string16 display_name = - l10n_util::GetDisplayNameForLocale(locale, display_locale, false); - // Because ICU sets the error code to U_USING_DEFAULT_WARNING whether or not - // uloc_getDisplayName returns the actual translation or the default - // value (locale code), we have to rely on this hack to tell whether - // the translation is available or not. If ICU doesn't have a translated - // name for this locale, GetDisplayNameForLocale will just return the - // locale code. - return !IsStringASCII(display_name) || UTF16ToASCII(display_name) != locale; -} - // We added 30+ minimally populated locales with only a few entries // (exemplar character set, script, writing direction and its own // lanaguage name). These locales have to be distinguished from the @@ -230,7 +217,7 @@ bool IsLocalePartiallyPopulated(const std::string& locale_name) { // is not available. A more robust/elegant way to check is to add a special // field (say, 'isPartial' to our version of ICU locale files) and // check its value, but this hack seems to work well. - return !IsLocaleNameTranslated("en", locale_name); + return !l10n_util::IsLocaleNameTranslated("en", locale_name); } #if !defined(OS_MACOSX) @@ -505,6 +492,19 @@ std::string GetApplicationLocale(const std::string& pref_locale) { #endif } +bool IsLocaleNameTranslated(const char* locale, + const std::string& display_locale) { + string16 display_name = + l10n_util::GetDisplayNameForLocale(locale, display_locale, false); + // Because ICU sets the error code to U_USING_DEFAULT_WARNING whether or not + // uloc_getDisplayName returns the actual translation or the default + // value (locale code), we have to rely on this hack to tell whether + // the translation is available or not. If ICU doesn't have a translated + // name for this locale, GetDisplayNameForLocale will just return the + // locale code. + return !IsStringASCII(display_name) || UTF16ToASCII(display_name) != locale; +} + string16 GetDisplayNameForLocale(const std::string& locale, const std::string& display_locale, bool is_for_ui) { @@ -843,7 +843,8 @@ const std::vector<std::string>& GetAvailableLocales() { void GetAcceptLanguagesForLocale(const std::string& display_locale, std::vector<std::string>* locale_codes) { for (size_t i = 0; i < arraysize(kAcceptLanguageList); ++i) { - if (!IsLocaleNameTranslated(kAcceptLanguageList[i], display_locale)) + if (!l10n_util::IsLocaleNameTranslated(kAcceptLanguageList[i], + display_locale)) // TODO(jungshik) : Put them at the of the list with language codes // enclosed by brackets instead of skipping. continue; diff --git a/ui/base/l10n/l10n_util.h b/ui/base/l10n/l10n_util.h index f073a29..7c26b80 100644 --- a/ui/base/l10n/l10n_util.h +++ b/ui/base/l10n/l10n_util.h @@ -32,6 +32,11 @@ namespace l10n_util { // we fall back to en-us. UI_EXPORT std::string GetApplicationLocale(const std::string& pref_locale); +// Returns true if a display name for |locale| is available in the locale +// |display_locale|. +UI_EXPORT bool IsLocaleNameTranslated(const char* locale, + const std::string& display_locale); + // Given a locale code, return true if the OS is capable of supporting it. // For instance, Oriya is not well supported on Windows XP and we return // false for "or". |