Index: chrome/renderer/translate/translate_helper.cc |
diff --git a/chrome/renderer/translate/translate_helper.cc b/chrome/renderer/translate/translate_helper.cc |
index 133dd85967e06110c94c9af7c06201bc290ad9e7..2cf95db19e1a8af387e6380a5b4ec39e0c021742 100644 |
--- a/chrome/renderer/translate/translate_helper.cc |
+++ b/chrome/renderer/translate/translate_helper.cc |
@@ -95,13 +95,28 @@ void TranslateHelper::PageCaptured(const string16& contents) { |
// shouldn't affect translation. |
WebDocument document = GetMainFrame()->document(); |
std::string content_language = document.contentLanguage().utf8(); |
- std::string language = DeterminePageLanguage(content_language, contents); |
+ std::string cld_language; |
+ bool is_cld_reliable; |
+ std::string language = DeterminePageLanguage( |
+ content_language, contents, &cld_language, &is_cld_reliable); |
+ |
+ if (language.empty()) |
+ return; |
language_determined_time_ = base::TimeTicks::Now(); |
+ GURL url(document.url()); |
+ LanguageDetectionDetails details; |
+ details.time = base::Time::Now(); |
+ details.url = url; |
+ details.content_language = content_language; |
+ details.cld_language = cld_language; |
+ details.is_cld_reliable = is_cld_reliable; |
+ details.adopted_language = language; |
+ |
Send(new ChromeViewHostMsg_TranslateLanguageDetermined( |
routing_id(), |
- language, |
+ details, |
IsTranslationAllowed(&document) && !language.empty())); |
} |
@@ -115,7 +130,8 @@ void TranslateHelper::CancelPendingTranslation() { |
#if defined(ENABLE_LANGUAGE_DETECTION) |
// static |
-std::string TranslateHelper::DetermineTextLanguage(const string16& text) { |
+std::string TranslateHelper::DetermineTextLanguage(const string16& text, |
+ bool* is_cld_reliable) { |
std::string language = chrome::kUnknownLanguageCode; |
int num_languages = 0; |
int text_bytes = 0; |
@@ -123,6 +139,9 @@ std::string TranslateHelper::DetermineTextLanguage(const string16& text) { |
Language cld_language = |
DetectLanguageOfUnicodeText(NULL, text.c_str(), true, &is_reliable, |
&num_languages, NULL, &text_bytes); |
+ if (is_cld_reliable != NULL) |
+ *is_cld_reliable = is_reliable; |
+ |
// We don't trust the result if the CLD reports that the detection is not |
// reliable, or if the actual text used to detect the language was less than |
// 100 bytes (short texts can often lead to wrong results). |
@@ -301,12 +320,20 @@ void TranslateHelper::ResetInvalidLanguageCode(std::string* code) { |
// static |
std::string TranslateHelper::DeterminePageLanguage(const std::string& code, |
- const string16& contents) { |
+ const string16& contents, |
+ std::string* cld_language_p, |
+ bool* is_cld_reliable_p) { |
#if defined(ENABLE_LANGUAGE_DETECTION) |
base::TimeTicks begin_time = base::TimeTicks::Now(); |
- std::string cld_language = DetermineTextLanguage(contents); |
+ bool is_cld_reliable; |
+ std::string cld_language = DetermineTextLanguage(contents, &is_cld_reliable); |
TranslateHelperMetrics::ReportLanguageDetectionTime(begin_time, |
base::TimeTicks::Now()); |
+ |
+ if (cld_language_p != NULL) |
+ *cld_language_p = cld_language; |
+ if (is_cld_reliable_p != NULL) |
+ *is_cld_reliable_p = is_cld_reliable; |
ConvertLanguageCodeSynonym(&cld_language); |
VLOG(9) << "CLD determined language code: " << cld_language; |
#endif // defined(ENABLE_LANGUAGE_DETECTION) |