| Index: chrome/renderer/translate/translate_helper.cc
|
| diff --git a/chrome/renderer/translate/translate_helper.cc b/chrome/renderer/translate/translate_helper.cc
|
| index 1664233cc82f4516b60d07d4ed25b08d9cd8e135..4de0352118cce4e6af200d6180c41934440336fa 100644
|
| --- a/chrome/renderer/translate/translate_helper.cc
|
| +++ b/chrome/renderer/translate/translate_helper.cc
|
| @@ -92,12 +92,25 @@ 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;
|
|
|
| + 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, IsPageTranslatable(&document)));
|
| + routing_id(), details, IsPageTranslatable(&document)));
|
| }
|
|
|
| void TranslateHelper::CancelPendingTranslation() {
|
| @@ -110,7 +123,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;
|
| @@ -118,6 +132,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).
|
| @@ -296,10 +313,19 @@ 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);
|
| +
|
| + if (cld_language_p != NULL)
|
| + *cld_language_p = cld_language;
|
| + if (is_cld_reliable_p != NULL)
|
| + *is_cld_reliable_p = is_cld_reliable;
|
| +
|
| UMA_HISTOGRAM_MEDIUM_TIMES("Renderer4.LanguageDetection",
|
| base::TimeTicks::Now() - begin_time);
|
| ConvertLanguageCodeSynonym(&cld_language);
|
|
|