Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1523)

Side by Side Diff: chrome/renderer/translate/translate_helper.cc

Issue 25531002: Move language detection to a component (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Run translate unittests on iOS Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/renderer/DEPS ('k') | chrome/renderer/translate/translate_helper_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/translate_helper.h" 5 #include "chrome/renderer/translate/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/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "base/strings/string16.h" 11 #include "base/strings/string16.h"
12 #include "base/strings/string_util.h" 12 #include "base/strings/string_util.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "chrome/common/chrome_constants.h"
15 #include "chrome/common/render_messages.h" 14 #include "chrome/common/render_messages.h"
16 #include "chrome/common/translate/language_detection_util.h"
17 #include "chrome/common/translate/translate_common_metrics.h"
18 #include "chrome/common/translate/translate_util.h"
19 #include "chrome/renderer/extensions/extension_groups.h" 15 #include "chrome/renderer/extensions/extension_groups.h"
20 #include "chrome/renderer/isolated_world_ids.h" 16 #include "chrome/renderer/isolated_world_ids.h"
17 #include "components/translate/common/translate_constants.h"
18 #include "components/translate/common/translate_metrics.h"
19 #include "components/translate/common/translate_util.h"
20 #include "components/translate/language_detection/language_detection_util.h"
21 #include "content/public/renderer/render_view.h" 21 #include "content/public/renderer/render_view.h"
22 #include "third_party/WebKit/public/web/WebDocument.h" 22 #include "third_party/WebKit/public/web/WebDocument.h"
23 #include "third_party/WebKit/public/web/WebElement.h" 23 #include "third_party/WebKit/public/web/WebElement.h"
24 #include "third_party/WebKit/public/web/WebFrame.h" 24 #include "third_party/WebKit/public/web/WebFrame.h"
25 #include "third_party/WebKit/public/web/WebNode.h" 25 #include "third_party/WebKit/public/web/WebNode.h"
26 #include "third_party/WebKit/public/web/WebNodeList.h" 26 #include "third_party/WebKit/public/web/WebNodeList.h"
27 #include "third_party/WebKit/public/web/WebScriptSource.h" 27 #include "third_party/WebKit/public/web/WebScriptSource.h"
28 #include "third_party/WebKit/public/web/WebView.h" 28 #include "third_party/WebKit/public/web/WebView.h"
29 #include "third_party/WebKit/public/web/WebWidget.h" 29 #include "third_party/WebKit/public/web/WebWidget.h"
30 #include "url/gurl.h" 30 #include "url/gurl.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 WebDocument document = main_frame->document(); 94 WebDocument document = main_frame->document();
95 std::string content_language = document.contentLanguage().utf8(); 95 std::string content_language = document.contentLanguage().utf8();
96 WebElement html_element = document.documentElement(); 96 WebElement html_element = document.documentElement();
97 std::string html_lang; 97 std::string html_lang;
98 // |html_element| can be null element, e.g. in 98 // |html_element| can be null element, e.g. in
99 // BrowserTest.WindowOpenClose. 99 // BrowserTest.WindowOpenClose.
100 if (!html_element.isNull()) 100 if (!html_element.isNull())
101 html_lang = html_element.getAttribute("lang").utf8(); 101 html_lang = html_element.getAttribute("lang").utf8();
102 std::string cld_language; 102 std::string cld_language;
103 bool is_cld_reliable; 103 bool is_cld_reliable;
104 std::string language = LanguageDetectionUtil::DeterminePageLanguage( 104 std::string language = translate::DeterminePageLanguage(
105 content_language, html_lang, contents, &cld_language, &is_cld_reliable); 105 content_language, html_lang, contents, &cld_language, &is_cld_reliable);
106 106
107 if (language.empty()) 107 if (language.empty())
108 return; 108 return;
109 109
110 language_determined_time_ = base::TimeTicks::Now(); 110 language_determined_time_ = base::TimeTicks::Now();
111 111
112 GURL url(document.url()); 112 GURL url(document.url());
113 LanguageDetectionDetails details; 113 LanguageDetectionDetails details;
114 details.time = base::Time::Now(); 114 details.time = base::Time::Now();
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 return; 328 return;
329 329
330 // Any pending translation is now irrelevant. 330 // Any pending translation is now irrelevant.
331 CancelPendingTranslation(); 331 CancelPendingTranslation();
332 332
333 // Set our states. 333 // Set our states.
334 translation_pending_ = true; 334 translation_pending_ = true;
335 335
336 // If the source language is undetermined, we'll let the translate element 336 // If the source language is undetermined, we'll let the translate element
337 // detect it. 337 // detect it.
338 source_lang_ = (source_lang != chrome::kUnknownLanguageCode) ? 338 source_lang_ = (source_lang != translate::kUnknownLanguageCode) ?
339 source_lang : kAutoDetectionLanguage; 339 source_lang : kAutoDetectionLanguage;
340 target_lang_ = target_lang; 340 target_lang_ = target_lang;
341 341
342 TranslateCommonMetrics::ReportUserActionDuration(language_determined_time_, 342 translate::ReportUserActionDuration(language_determined_time_,
343 base::TimeTicks::Now()); 343 base::TimeTicks::Now());
344 344
345 GURL url(main_frame->document().url()); 345 GURL url(main_frame->document().url());
346 TranslateCommonMetrics::ReportPageScheme(url.scheme()); 346 translate::ReportPageScheme(url.scheme());
347 347
348 // Set up v8 isolated world with proper content-security-policy and 348 // Set up v8 isolated world with proper content-security-policy and
349 // security-origin. 349 // security-origin.
350 WebFrame* frame = GetMainFrame(); 350 WebFrame* frame = GetMainFrame();
351 if (frame) { 351 if (frame) {
352 frame->setIsolatedWorldContentSecurityPolicy( 352 frame->setIsolatedWorldContentSecurityPolicy(
353 chrome::ISOLATED_WORLD_ID_TRANSLATE, 353 chrome::ISOLATED_WORLD_ID_TRANSLATE,
354 WebString::fromUTF8(kContentSecurityPolicy)); 354 WebString::fromUTF8(kContentSecurityPolicy));
355 355
356 GURL security_origin = TranslateUtil::GetTranslateSecurityOrigin(); 356 GURL security_origin = translate::GetTranslateSecurityOrigin();
357 frame->setIsolatedWorldSecurityOrigin( 357 frame->setIsolatedWorldSecurityOrigin(
358 chrome::ISOLATED_WORLD_ID_TRANSLATE, 358 chrome::ISOLATED_WORLD_ID_TRANSLATE,
359 WebSecurityOrigin::create(security_origin)); 359 WebSecurityOrigin::create(security_origin));
360 } 360 }
361 361
362 if (!IsTranslateLibAvailable()) { 362 if (!IsTranslateLibAvailable()) {
363 // Evaluate the script to add the translation related method to the global 363 // Evaluate the script to add the translation related method to the global
364 // context of the page. 364 // context of the page.
365 ExecuteScript(translate_script); 365 ExecuteScript(translate_script);
366 DCHECK(IsTranslateLibAvailable()); 366 DCHECK(IsTranslateLibAvailable());
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 } 414 }
415 415
416 if (!translation_pending_) { 416 if (!translation_pending_) {
417 NOTREACHED(); 417 NOTREACHED();
418 return; 418 return;
419 } 419 }
420 420
421 translation_pending_ = false; 421 translation_pending_ = false;
422 422
423 // Check JavaScript performance counters for UMA reports. 423 // Check JavaScript performance counters for UMA reports.
424 TranslateCommonMetrics::ReportTimeToTranslate( 424 translate::ReportTimeToTranslate(
425 ExecuteScriptAndGetDoubleResult("cr.googleTranslate.translationTime")); 425 ExecuteScriptAndGetDoubleResult("cr.googleTranslate.translationTime"));
426 426
427 // Notify the browser we are done. 427 // Notify the browser we are done.
428 render_view()->Send(new ChromeViewHostMsg_PageTranslated( 428 render_view()->Send(new ChromeViewHostMsg_PageTranslated(
429 render_view()->GetRoutingID(), render_view()->GetPageId(), 429 render_view()->GetRoutingID(), render_view()->GetPageId(),
430 actual_source_lang, target_lang_, TranslateErrors::NONE)); 430 actual_source_lang, target_lang_, TranslateErrors::NONE));
431 return; 431 return;
432 } 432 }
433 433
434 // The translation is still pending, check again later. 434 // The translation is still pending, check again later.
(...skipping 20 matching lines...) Expand all
455 FROM_HERE, 455 FROM_HERE,
456 base::Bind(&TranslateHelper::TranslatePageImpl, 456 base::Bind(&TranslateHelper::TranslatePageImpl,
457 weak_method_factory_.GetWeakPtr(), 457 weak_method_factory_.GetWeakPtr(),
458 count), 458 count),
459 AdjustDelay(count * kTranslateInitCheckDelayMs)); 459 AdjustDelay(count * kTranslateInitCheckDelayMs));
460 return; 460 return;
461 } 461 }
462 462
463 // The library is loaded, and ready for translation now. 463 // The library is loaded, and ready for translation now.
464 // Check JavaScript performance counters for UMA reports. 464 // Check JavaScript performance counters for UMA reports.
465 TranslateCommonMetrics::ReportTimeToBeReady( 465 translate::ReportTimeToBeReady(
466 ExecuteScriptAndGetDoubleResult("cr.googleTranslate.readyTime")); 466 ExecuteScriptAndGetDoubleResult("cr.googleTranslate.readyTime"));
467 TranslateCommonMetrics::ReportTimeToLoad( 467 translate::ReportTimeToLoad(
468 ExecuteScriptAndGetDoubleResult("cr.googleTranslate.loadTime")); 468 ExecuteScriptAndGetDoubleResult("cr.googleTranslate.loadTime"));
469 469
470 if (!StartTranslation()) { 470 if (!StartTranslation()) {
471 NotifyBrowserTranslationFailed(TranslateErrors::TRANSLATION_ERROR); 471 NotifyBrowserTranslationFailed(TranslateErrors::TRANSLATION_ERROR);
472 return; 472 return;
473 } 473 }
474 // Check the status of the translation. 474 // Check the status of the translation.
475 base::MessageLoop::current()->PostDelayedTask( 475 base::MessageLoop::current()->PostDelayedTask(
476 FROM_HERE, 476 FROM_HERE,
477 base::Bind(&TranslateHelper::CheckTranslateStatus, 477 base::Bind(&TranslateHelper::CheckTranslateStatus,
(...skipping 12 matching lines...) Expand all
490 490
491 WebFrame* TranslateHelper::GetMainFrame() { 491 WebFrame* TranslateHelper::GetMainFrame() {
492 WebView* web_view = render_view()->GetWebView(); 492 WebView* web_view = render_view()->GetWebView();
493 493
494 // When the tab is going to be closed, the web_view can be NULL. 494 // When the tab is going to be closed, the web_view can be NULL.
495 if (!web_view) 495 if (!web_view)
496 return NULL; 496 return NULL;
497 497
498 return web_view->mainFrame(); 498 return web_view->mainFrame();
499 } 499 }
OLDNEW
« no previous file with comments | « chrome/renderer/DEPS ('k') | chrome/renderer/translate/translate_helper_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698