summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorjshin@chromium.org <jshin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-19 20:57:14 +0000
committerjshin@chromium.org <jshin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-19 20:57:14 +0000
commitd54713426ab132a5ca95d6239641aad580fcf799 (patch)
tree247a70bc7609eba200c5f1760b8ab0ea56877982 /chrome/renderer
parent35ee9505314a11dadac1bdfd41612f2984448af9 (diff)
downloadchromium_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.cc2
-rw-r--r--chrome/renderer/render_view.cc23
-rw-r--r--chrome/renderer/render_view.h12
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: