Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/renderer/translate_helper.h" | 5 #include "chrome/renderer/translate_helper.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 135 } | 135 } |
| 136 | 136 |
| 137 void TranslateHelper::CancelPendingTranslation() { | 137 void TranslateHelper::CancelPendingTranslation() { |
| 138 weak_method_factory_.InvalidateWeakPtrs(); | 138 weak_method_factory_.InvalidateWeakPtrs(); |
| 139 translation_pending_ = false; | 139 translation_pending_ = false; |
| 140 page_id_ = -1; | 140 page_id_ = -1; |
| 141 source_lang_.clear(); | 141 source_lang_.clear(); |
| 142 target_lang_.clear(); | 142 target_lang_.clear(); |
| 143 } | 143 } |
| 144 | 144 |
| 145 // static | |
|
Takashi Toyoshima
2013/02/12 06:26:53
Just replace this function to proper position.
| |
| 146 bool TranslateHelper::IsPageTranslatable(WebDocument* document) { | |
| 147 std::vector<WebElement> meta_elements; | |
| 148 webkit_glue::GetMetaElementsWithAttribute(document, | |
| 149 ASCIIToUTF16("name"), | |
| 150 ASCIIToUTF16("google"), | |
| 151 &meta_elements); | |
| 152 std::vector<WebElement>::const_iterator iter; | |
| 153 for (iter = meta_elements.begin(); iter != meta_elements.end(); ++iter) { | |
| 154 WebString attribute = iter->getAttribute("value"); | |
| 155 if (attribute.isNull()) // We support both 'value' and 'content'. | |
| 156 attribute = iter->getAttribute("content"); | |
| 157 if (attribute.isNull()) | |
| 158 continue; | |
| 159 if (LowerCaseEqualsASCII(attribute, "notranslate")) | |
| 160 return false; | |
| 161 } | |
| 162 return true; | |
| 163 } | |
| 164 | |
| 165 #if defined(ENABLE_LANGUAGE_DETECTION) | 145 #if defined(ENABLE_LANGUAGE_DETECTION) |
| 166 // static | 146 // static |
| 167 std::string TranslateHelper::DetermineTextLanguage(const string16& text) { | 147 std::string TranslateHelper::DetermineTextLanguage(const string16& text) { |
| 168 std::string language = chrome::kUnknownLanguageCode; | 148 std::string language = chrome::kUnknownLanguageCode; |
| 169 int num_languages = 0; | 149 int num_languages = 0; |
| 170 int text_bytes = 0; | 150 int text_bytes = 0; |
| 171 bool is_reliable = false; | 151 bool is_reliable = false; |
| 172 Language cld_language = | 152 Language cld_language = |
| 173 DetectLanguageOfUnicodeText(NULL, text.c_str(), true, &is_reliable, | 153 DetectLanguageOfUnicodeText(NULL, text.c_str(), true, &is_reliable, |
| 174 &num_languages, NULL, &text_bytes); | 154 &num_languages, NULL, &text_bytes); |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 187 } | 167 } |
| 188 VLOG(9) << "Detected lang_id: " << language << ", from Text:\n" << text | 168 VLOG(9) << "Detected lang_id: " << language << ", from Text:\n" << text |
| 189 << "\n*************************************\n"; | 169 << "\n*************************************\n"; |
| 190 return language; | 170 return language; |
| 191 } | 171 } |
| 192 #endif // defined(ENABLE_LANGUAGE_DETECTION) | 172 #endif // defined(ENABLE_LANGUAGE_DETECTION) |
| 193 | 173 |
| 194 //////////////////////////////////////////////////////////////////////////////// | 174 //////////////////////////////////////////////////////////////////////////////// |
| 195 // TranslateHelper, protected: | 175 // TranslateHelper, protected: |
| 196 // | 176 // |
| 197 // static | |
| 198 void TranslateHelper::ConvertLanguageCodeSynonym(std::string* code) { | |
| 199 // Apply liner search here because number of items in the list is just four. | |
| 200 for (size_t i = 0; i < arraysize(kLanguageCodeSynonyms); ++i) { | |
| 201 if (code->compare(kLanguageCodeSynonyms[i].from) == 0) { | |
| 202 *code = std::string(kLanguageCodeSynonyms[i].to); | |
| 203 break; | |
| 204 } | |
| 205 } | |
| 206 } | |
| 207 | |
| 208 bool TranslateHelper::IsTranslateLibAvailable() { | 177 bool TranslateHelper::IsTranslateLibAvailable() { |
| 209 bool lib_available = false; | 178 bool lib_available = false; |
| 210 if (!ExecuteScriptAndGetBoolResult( | 179 if (!ExecuteScriptAndGetBoolResult( |
| 211 "typeof cr != 'undefined' && typeof cr.googleTranslate != 'undefined' && " | 180 "typeof cr != 'undefined' && typeof cr.googleTranslate != 'undefined' && " |
| 212 "typeof cr.googleTranslate.translate == 'function'", &lib_available)) { | 181 "typeof cr.googleTranslate.translate == 'function'", &lib_available)) { |
| 213 NOTREACHED(); | 182 NOTREACHED(); |
| 214 return false; | 183 return false; |
| 215 } | 184 } |
| 216 return lib_available; | 185 return lib_available; |
| 217 } | 186 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 265 return lang; | 234 return lang; |
| 266 } | 235 } |
| 267 | 236 |
| 268 bool TranslateHelper::DontDelayTasks() { | 237 bool TranslateHelper::DontDelayTasks() { |
| 269 return false; | 238 return false; |
| 270 } | 239 } |
| 271 | 240 |
| 272 //////////////////////////////////////////////////////////////////////////////// | 241 //////////////////////////////////////////////////////////////////////////////// |
| 273 // TranslateHelper, private: | 242 // TranslateHelper, private: |
| 274 // | 243 // |
| 244 // static | |
| 245 void TranslateHelper::ConvertLanguageCodeSynonym(std::string* code) { | |
| 246 // Apply liner search here because number of items in the list is just four. | |
| 247 for (size_t i = 0; i < arraysize(kLanguageCodeSynonyms); ++i) { | |
| 248 if (code->compare(kLanguageCodeSynonyms[i].from) == 0) { | |
| 249 *code = std::string(kLanguageCodeSynonyms[i].to); | |
| 250 break; | |
| 251 } | |
| 252 } | |
| 253 } | |
| 254 | |
| 255 // static | |
| 256 bool TranslateHelper::IsPageTranslatable(WebDocument* document) { | |
| 257 std::vector<WebElement> meta_elements; | |
| 258 webkit_glue::GetMetaElementsWithAttribute(document, | |
| 259 ASCIIToUTF16("name"), | |
| 260 ASCIIToUTF16("google"), | |
| 261 &meta_elements); | |
| 262 std::vector<WebElement>::const_iterator iter; | |
| 263 for (iter = meta_elements.begin(); iter != meta_elements.end(); ++iter) { | |
| 264 WebString attribute = iter->getAttribute("value"); | |
| 265 if (attribute.isNull()) // We support both 'value' and 'content'. | |
| 266 attribute = iter->getAttribute("content"); | |
| 267 if (attribute.isNull()) | |
| 268 continue; | |
| 269 if (LowerCaseEqualsASCII(attribute, "notranslate")) | |
| 270 return false; | |
| 271 } | |
| 272 return true; | |
| 273 } | |
| 274 | |
| 275 bool TranslateHelper::OnMessageReceived(const IPC::Message& message) { | 275 bool TranslateHelper::OnMessageReceived(const IPC::Message& message) { |
| 276 bool handled = true; | 276 bool handled = true; |
| 277 IPC_BEGIN_MESSAGE_MAP(TranslateHelper, message) | 277 IPC_BEGIN_MESSAGE_MAP(TranslateHelper, message) |
| 278 IPC_MESSAGE_HANDLER(ChromeViewMsg_TranslatePage, OnTranslatePage) | 278 IPC_MESSAGE_HANDLER(ChromeViewMsg_TranslatePage, OnTranslatePage) |
| 279 IPC_MESSAGE_HANDLER(ChromeViewMsg_RevertTranslation, OnRevertTranslation) | 279 IPC_MESSAGE_HANDLER(ChromeViewMsg_RevertTranslation, OnRevertTranslation) |
| 280 IPC_MESSAGE_UNHANDLED(handled = false) | 280 IPC_MESSAGE_UNHANDLED(handled = false) |
| 281 IPC_END_MESSAGE_MAP() | 281 IPC_END_MESSAGE_MAP() |
| 282 return handled; | 282 return handled; |
| 283 } | 283 } |
| 284 | 284 |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 479 WebView* web_view = render_view()->GetWebView(); | 479 WebView* web_view = render_view()->GetWebView(); |
| 480 if (!web_view) { | 480 if (!web_view) { |
| 481 // When the WebView is going away, the render view should have called | 481 // When the WebView is going away, the render view should have called |
| 482 // CancelPendingTranslation() which should have stopped any pending work, so | 482 // CancelPendingTranslation() which should have stopped any pending work, so |
| 483 // that case should not happen. | 483 // that case should not happen. |
| 484 NOTREACHED(); | 484 NOTREACHED(); |
| 485 return NULL; | 485 return NULL; |
| 486 } | 486 } |
| 487 return web_view->mainFrame(); | 487 return web_view->mainFrame(); |
| 488 } | 488 } |
| OLD | NEW |