| Index: trunk/src/chrome/renderer/translate/translate_helper.cc
|
| ===================================================================
|
| --- trunk/src/chrome/renderer/translate/translate_helper.cc (revision 202442)
|
| +++ trunk/src/chrome/renderer/translate/translate_helper.cc (working copy)
|
| @@ -93,24 +93,18 @@
|
| // language of the intended audience (a distinction really only
|
| // relevant for things like langauge textbooks). This distinction
|
| // shouldn't affect translation.
|
| - WebFrame* main_frame = GetMainFrame();
|
| - if (!main_frame)
|
| - return;
|
| - WebDocument document = main_frame->document();
|
| + WebDocument document = GetMainFrame()->document();
|
| std::string content_language = document.contentLanguage().utf8();
|
| - std::string html_lang =
|
| - document.documentElement().getAttribute("lang").utf8();
|
| std::string cld_language;
|
| bool is_cld_reliable;
|
| std::string language = DeterminePageLanguage(
|
| - content_language, html_lang, contents, &cld_language, &is_cld_reliable);
|
| + content_language, contents, &cld_language, &is_cld_reliable);
|
|
|
| if (language.empty())
|
| return;
|
|
|
| language_determined_time_ = base::TimeTicks::Now();
|
|
|
| - // TODO(toyoshim): Add |html_lang| to LanguageDetectionDetails.
|
| GURL url(document.url());
|
| LanguageDetectionDetails details;
|
| details.time = base::Time::Now();
|
| @@ -325,20 +319,7 @@
|
| }
|
|
|
| // static
|
| -void TranslateHelper::ApplyLanguageCodeCorrection(std::string* code) {
|
| - // Correct well-known format errors.
|
| - CorrectLanguageCodeTypo(code);
|
| -
|
| - // Convert language code synonym firstly because sometime synonym code is in
|
| - // invalid format, e.g. 'fil'. After validation, such a 3 characters language
|
| - // gets converted to an empty string.
|
| - ConvertLanguageCodeSynonym(code);
|
| - ResetInvalidLanguageCode(code);
|
| -}
|
| -
|
| -// static
|
| std::string TranslateHelper::DeterminePageLanguage(const std::string& code,
|
| - const std::string& html_lang,
|
| const string16& contents,
|
| std::string* cld_language_p,
|
| bool* is_cld_reliable_p) {
|
| @@ -356,27 +337,17 @@
|
| ConvertLanguageCodeSynonym(&cld_language);
|
| #endif // defined(ENABLE_LANGUAGE_DETECTION)
|
|
|
| - // Check if html lang attribute is valid.
|
| - std::string modified_html_lang;
|
| - if (!html_lang.empty()) {
|
| - modified_html_lang = html_lang;
|
| - ApplyLanguageCodeCorrection(&modified_html_lang);
|
| - TranslateHelperMetrics::ReportHtmlLang(html_lang, modified_html_lang);
|
| - VLOG(9) << "html lang based language code: " << modified_html_lang;
|
| - }
|
| + // Correct well-known format errors.
|
| + std::string language = code;
|
| + CorrectLanguageCodeTypo(&language);
|
|
|
| - // Check if Content-Language is valid.
|
| - std::string modified_code;
|
| - if (!code.empty()) {
|
| - modified_code = code;
|
| - ApplyLanguageCodeCorrection(&modified_code);
|
| - TranslateHelperMetrics::ReportContentLanguage(code, modified_code);
|
| - }
|
| + // Convert language code synonym firstly because sometime synonym code is in
|
| + // invalid format, e.g. 'fil'. After validation, such a 3 characters language
|
| + // gets converted to an empty string.
|
| + ConvertLanguageCodeSynonym(&language);
|
| + ResetInvalidLanguageCode(&language);
|
|
|
| - // Adopt |modified_html_lang| if it is valid. Otherwise, adopt
|
| - // |modified_code|.
|
| - std::string language = modified_html_lang.empty() ? modified_code :
|
| - modified_html_lang;
|
| + TranslateHelperMetrics::ReportContentLanguage(code, language);
|
|
|
| #if defined(ENABLE_LANGUAGE_DETECTION)
|
| // If |language| is empty, just use CLD result even though it might be
|
| @@ -462,8 +433,7 @@
|
| const std::string& translate_script,
|
| const std::string& source_lang,
|
| const std::string& target_lang) {
|
| - WebFrame* main_frame = GetMainFrame();
|
| - if (!main_frame || render_view()->GetPageId() != page_id)
|
| + if (render_view()->GetPageId() != page_id)
|
| return; // We navigated away, nothing to do.
|
|
|
| if (translation_pending_ && page_id == page_id_ &&
|
| @@ -487,7 +457,7 @@
|
| TranslateHelperMetrics::ReportUserActionDuration(language_determined_time_,
|
| base::TimeTicks::Now());
|
|
|
| - GURL url(main_frame->document().url());
|
| + GURL url(GetMainFrame()->document().url());
|
| TranslateHelperMetrics::ReportPageScheme(url.scheme());
|
|
|
| if (!IsTranslateLibAvailable()) {
|
| @@ -620,10 +590,12 @@
|
|
|
| WebFrame* TranslateHelper::GetMainFrame() {
|
| WebView* web_view = render_view()->GetWebView();
|
| -
|
| - // When the tab is going to be closed, the web_view can be NULL.
|
| - if (!web_view)
|
| + if (!web_view) {
|
| + // When the WebView is going away, the render view should have called
|
| + // CancelPendingTranslation() which should have stopped any pending work, so
|
| + // that case should not happen.
|
| + NOTREACHED();
|
| return NULL;
|
| -
|
| + }
|
| return web_view->mainFrame();
|
| }
|
|
|