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 | |
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 |