summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/translate
diff options
context:
space:
mode:
authorhajimehoshi@chromium.org <hajimehoshi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-20 20:29:07 +0000
committerhajimehoshi@chromium.org <hajimehoshi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-20 20:29:07 +0000
commit32beec0c62867a9a31fc3aa17ccedfb486faf8f3 (patch)
tree7634b7523856b4608e01814790cfd6cd5279273c /chrome/renderer/translate
parent022f251ed0ba24467b8d78e89ab0893e12e63d73 (diff)
downloadchromium_src-32beec0c62867a9a31fc3aa17ccedfb486faf8f3.zip
chromium_src-32beec0c62867a9a31fc3aa17ccedfb486faf8f3.tar.gz
chromium_src-32beec0c62867a9a31fc3aa17ccedfb486faf8f3.tar.bz2
Translate: Preserve the dialect code of Chinese
When a page whose Content-Language was 'zh' (not 'zh-TW' or 'zh-CN') was opened, even though CLD knew the dielect of the page, the Translate infobar didn't appear. This CL respects the result of CLD when Content-Language and CLD agree that the page is written in Chinese and the Content-Language doesn't know the dialect. BUG=250735 Review URL: https://chromiumcodereview.appspot.com/17230003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207543 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/translate')
-rw-r--r--chrome/renderer/translate/translate_helper.cc18
-rw-r--r--chrome/renderer/translate/translate_helper.h5
-rw-r--r--chrome/renderer/translate/translate_helper_metrics.h1
-rw-r--r--chrome/renderer/translate/translate_helper_metrics_unittest.cc25
4 files changed, 40 insertions, 9 deletions
diff --git a/chrome/renderer/translate/translate_helper.cc b/chrome/renderer/translate/translate_helper.cc
index 4428b53..34b4afe 100644
--- a/chrome/renderer/translate/translate_helper.cc
+++ b/chrome/renderer/translate/translate_helper.cc
@@ -392,6 +392,16 @@ bool TranslateHelper::MaybeServerWrongConfiguration(
}
// static
+bool TranslateHelper::CanCLDComplementSubCode(
+ const std::string& page_language, const std::string& cld_language) {
+ // Translate server cannot treat general Chinese. If Content-Language and
+ // CLD agree that the language is Chinese and Content-Language doesn't know
+ // which dialect is used, CLD language has priority.
+ // TODO(hajimehoshi): How about the other dialects like zh-MO?
+ return page_language == "zh" && StartsWithASCII(cld_language, "zh-", false);
+}
+
+// static
std::string TranslateHelper::DeterminePageLanguage(const std::string& code,
const std::string& html_lang,
const string16& contents,
@@ -445,13 +455,19 @@ std::string TranslateHelper::DeterminePageLanguage(const std::string& code,
if (cld_language == chrome::kUnknownLanguageCode) {
TranslateHelperMetrics::ReportLanguageVerification(
TranslateHelperMetrics::LANGUAGE_VERIFICATION_UNKNOWN);
+ return language;
} else if (IsSameOrSimilarLanguages(language, cld_language)) {
TranslateHelperMetrics::ReportLanguageVerification(
TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_AGREE);
+ return language;
} else if (MaybeServerWrongConfiguration(language, cld_language)) {
- language = cld_language;
TranslateHelperMetrics::ReportLanguageVerification(
TranslateHelperMetrics::LANGUAGE_VERIFICATION_TRUST_CLD);
+ return cld_language;
+ } else if (CanCLDComplementSubCode(language, cld_language)) {
+ TranslateHelperMetrics::ReportLanguageVerification(
+ TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE);
+ return cld_language;
} else {
TranslateHelperMetrics::ReportLanguageVerification(
TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_DISAGREE);
diff --git a/chrome/renderer/translate/translate_helper.h b/chrome/renderer/translate/translate_helper.h
index fa2b0b0..7118475 100644
--- a/chrome/renderer/translate/translate_helper.h
+++ b/chrome/renderer/translate/translate_helper.h
@@ -123,6 +123,11 @@ class TranslateHelper : public content::RenderViewObserver {
static bool MaybeServerWrongConfiguration(const std::string& page_language,
const std::string& cld_language);
+ // Checks if CLD can complement a sub code when the page language doesn't
+ // know the sub code.
+ static bool CanCLDComplementSubCode(const std::string& page_language,
+ const std::string& cld_language);
+
// Determines content page language from Content-Language code and contents.
static std::string DeterminePageLanguage(const std::string& code,
const std::string& html_lang,
diff --git a/chrome/renderer/translate/translate_helper_metrics.h b/chrome/renderer/translate/translate_helper_metrics.h
index 89d4de5..d0d5f1a 100644
--- a/chrome/renderer/translate/translate_helper_metrics.h
+++ b/chrome/renderer/translate/translate_helper_metrics.h
@@ -45,6 +45,7 @@ enum LanguageVerificationType {
LANGUAGE_VERIFICATION_CLD_AGREE,
LANGUAGE_VERIFICATION_CLD_DISAGREE,
LANGUAGE_VERIFICATION_TRUST_CLD,
+ LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE,
LANGUAGE_VERIFICATION_MAX,
};
diff --git a/chrome/renderer/translate/translate_helper_metrics_unittest.cc b/chrome/renderer/translate/translate_helper_metrics_unittest.cc
index 0851528..b0d4585 100644
--- a/chrome/renderer/translate/translate_helper_metrics_unittest.cc
+++ b/chrome/renderer/translate/translate_helper_metrics_unittest.cc
@@ -57,7 +57,8 @@ class MetricsRecorder {
int expected_unknown,
int expected_cld_agree,
int expected_cld_disagree,
- int expected_trust_cld) {
+ int expected_trust_cld,
+ int expected_cld_complement_sub_code) {
ASSERT_EQ(TranslateHelperMetrics::GetMetricsName(
TranslateHelperMetrics::UMA_LANGUAGE_VERIFICATION), key_);
@@ -87,6 +88,11 @@ class MetricsRecorder {
expected_trust_cld,
GetCountWithoutSnapshot(
TranslateHelperMetrics::LANGUAGE_VERIFICATION_TRUST_CLD));
+ EXPECT_EQ(
+ expected_cld_complement_sub_code,
+ GetCountWithoutSnapshot(
+ TranslateHelperMetrics::
+ LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE));
}
void CheckScheme(int expected_http, int expected_https, int expected_others) {
@@ -194,25 +200,28 @@ TEST(TranslateHelperMetricsTest, ReportLanguageVerification) {
MetricsRecorder recorder(TranslateHelperMetrics::GetMetricsName(
TranslateHelperMetrics::UMA_LANGUAGE_VERIFICATION));
- recorder.CheckLanguageVerification(0, 0, 0, 0, 0, 0);
+ recorder.CheckLanguageVerification(0, 0, 0, 0, 0, 0, 0);
TranslateHelperMetrics::ReportLanguageVerification(
TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_DISABLED);
- recorder.CheckLanguageVerification(1, 0, 0, 0, 0, 0);
+ recorder.CheckLanguageVerification(1, 0, 0, 0, 0, 0, 0);
TranslateHelperMetrics::ReportLanguageVerification(
TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_ONLY);
- recorder.CheckLanguageVerification(1, 1, 0, 0, 0, 0);
+ recorder.CheckLanguageVerification(1, 1, 0, 0, 0, 0, 0);
TranslateHelperMetrics::ReportLanguageVerification(
TranslateHelperMetrics::LANGUAGE_VERIFICATION_UNKNOWN);
- recorder.CheckLanguageVerification(1, 1, 1, 0, 0, 0);
+ recorder.CheckLanguageVerification(1, 1, 1, 0, 0, 0, 0);
TranslateHelperMetrics::ReportLanguageVerification(
TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_AGREE);
- recorder.CheckLanguageVerification(1, 1, 1, 1, 0, 0);
+ recorder.CheckLanguageVerification(1, 1, 1, 1, 0, 0, 0);
TranslateHelperMetrics::ReportLanguageVerification(
TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_DISAGREE);
- recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 0);
+ recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 0, 0);
TranslateHelperMetrics::ReportLanguageVerification(
TranslateHelperMetrics::LANGUAGE_VERIFICATION_TRUST_CLD);
- recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1);
+ recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1, 0);
+ TranslateHelperMetrics::ReportLanguageVerification(
+ TranslateHelperMetrics::LANGUAGE_VERIFICATION_CLD_COMPLEMENT_SUB_CODE);
+ recorder.CheckLanguageVerification(1, 1, 1, 1, 1, 1, 1);
}
TEST(TranslateHelperMetricsTest, ReportTimeToBeReady) {