diff options
author | jshin@chromium.org <jshin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-19 20:57:14 +0000 |
---|---|---|
committer | jshin@chromium.org <jshin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-19 20:57:14 +0000 |
commit | d54713426ab132a5ca95d6239641aad580fcf799 (patch) | |
tree | 247a70bc7609eba200c5f1760b8ab0ea56877982 /chrome/renderer | |
parent | 35ee9505314a11dadac1bdfd41612f2984448af9 (diff) | |
download | chromium_src-d54713426ab132a5ca95d6239641aad580fcf799.zip chromium_src-d54713426ab132a5ca95d6239641aad580fcf799.tar.gz chromium_src-d54713426ab132a5ca95d6239641aad580fcf799.tar.bz2 |
Review URL: http://codereview.chromium.org/545123
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@36541 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/extensions/extension_api_client_unittest.cc | 2 | ||||
-rw-r--r-- | chrome/renderer/render_view.cc | 23 | ||||
-rw-r--r-- | chrome/renderer/render_view.h | 12 |
3 files changed, 18 insertions, 19 deletions
diff --git a/chrome/renderer/extensions/extension_api_client_unittest.cc b/chrome/renderer/extensions/extension_api_client_unittest.cc index 05c2ddf..39d275f 100644 --- a/chrome/renderer/extensions/extension_api_client_unittest.cc +++ b/chrome/renderer/extensions/extension_api_client_unittest.cc @@ -290,7 +290,6 @@ TEST_F(ExtensionAPIClientTest, GetTab) { "tabs.get", "2"); } -#if defined(OS_WIN) TEST_F(ExtensionAPIClientTest, DetectTabLanguage) { ExpectJsFail("chrome.tabs.detectLanguage(32, function(){}, 20);", "Uncaught Error: Too many arguments."); @@ -306,7 +305,6 @@ TEST_F(ExtensionAPIClientTest, DetectTabLanguage) { ExpectJsPass("chrome.tabs.detectLanguage(null, function(){})", "tabs.detectLanguage", "null"); } -#endif TEST_F(ExtensionAPIClientTest, GetSelectedTab) { ExpectJsFail("chrome.tabs.getSelected(32, function(){}, 20);", diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 5b1ee82..dcbda82 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -67,10 +67,7 @@ #include "net/base/net_errors.h" #include "skia/ext/bitmap_platform_device.h" #include "skia/ext/image_operations.h" -#if defined(OS_WIN) -// TODO(port): The compact language detection library works only for Windows. #include "third_party/cld/bar/toolbar/cld/i18n/encodings/compact_lang_det/win/cld_unicodetext.h" -#endif #include "third_party/WebKit/WebKit/chromium/public/WebAccessibilityCache.h" #include "third_party/WebKit/WebKit/chromium/public/WebAccessibilityObject.h" #include "third_party/WebKit/WebKit/chromium/public/WebCString.h" @@ -223,7 +220,7 @@ static const char* const kUnreachableWebDataURL = static const char* const kBackForwardNavigationScheme = "history"; // The string returned in DetectLanguage if we failed to detect the language. -static const char* const kUnknownLanguageCode = "unknown"; +static const char* const kUnknownLanguageCode = "und"; static void GetRedirectChain(WebDataSource* ds, std::vector<GURL>* result) { WebVector<WebURL> urls; @@ -3082,31 +3079,29 @@ std::string RenderView::DetectLanguage() { if (!webview() || is_loading_) return kUnknownLanguageCode; - std::string language = kUnknownLanguageCode; -#if defined(OS_WIN) // CLD is only available on Windows at this time. WebFrame* main_frame = webview()->mainFrame(); std::wstring contents; CaptureText(main_frame, &contents); - language = DetermineTextLanguage(contents); -#endif - - return language; + return DetermineTextLanguage(contents); } // static std::string RenderView::DetermineTextLanguage(const std::wstring& text) { std::string language = kUnknownLanguageCode; -#if defined(OS_WIN) // CLD is only available on Windows at this time. int num_languages = 0; bool is_reliable = false; + string16 input = WideToUTF16(text); Language cld_language = - DetectLanguageOfUnicodeText(NULL, text.c_str(), true, &is_reliable, + DetectLanguageOfUnicodeText(NULL, input.c_str(), true, &is_reliable, &num_languages, NULL); if (cld_language != NUM_LANGUAGES && cld_language != UNKNOWN_LANGUAGE && cld_language != TG_UNKNOWN_LANGUAGE) { - language = LanguageCodeISO639_1(cld_language); + // We should not use LanguageCode_ISO_639_1 because it does not cover all the + // languages CLD can detect. As a result, it'll return the invalid language + // code for tradtional Chinese among others. |LanguageCode| will go through + // ISO 639-1, ISO-639-2 and 'other' tables to do the 'right' thing. + language = LanguageCode(cld_language); } -#endif return language; } diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h index 4d3a4e9..036cb0b 100644 --- a/chrome/renderer/render_view.h +++ b/chrome/renderer/render_view.h @@ -436,9 +436,15 @@ class RenderView : public RenderWidget, PageTranslator* page_translator() const { return page_translator_.get(); } - // Returns the ISO 639_1 language code of the current page - // (ex: en, fr, zh...). Returns 'unknown' if the language could not be - // determined. + // Returns the ISO 639 language code of the current page (e.g. en, fr, zh). + // If ISO 639-1 code is not available for the language, ISO 639-2 3-letter code + // will be returned (e.g. kha for Khasi and und for undtermined). For traditional + // Chinse, 'zh-TW' will be returned while for simplified Chinse, 'zh' will be + // returned. + // TODO(jungshik): Make it return 'he' (the correct ISO 639 code for Hebrew) + // instead of the obsolete 'iw'. Perhaps, it's also better to return 'zh-Hans' + // (or 'zh-CN') for Simplified Chinese instead of 'zh' to be aligned with + // 'zh-TW' for Traditional Chinse. std::string DetectLanguage(); protected: |