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 |