Commit f1da1804 authored by droger's avatar droger Committed by Commit bot

Move TranslateHelper to the translate component.

This CL moves TranslateHelper to the translate component.

A couple dependencies had to be injected, through the constructor:
- extensions (group and scheme)
- isolated world id

BUG=335087
TBR=jochen

Review URL: https://codereview.chromium.org/564793003

Cr-Commit-Position: refs/heads/master@{#295276}
parent 2a3abf4b
......@@ -83,8 +83,6 @@
'renderer/security_filter_peer.h',
'renderer/tts_dispatcher.cc',
'renderer/tts_dispatcher.h',
'renderer/translate/translate_helper.cc',
'renderer/translate/translate_helper.h',
'renderer/web_apps.cc',
'renderer/web_apps.h',
'renderer/webview_color_overlay.cc',
......@@ -276,8 +274,6 @@
'../components/components.gyp:password_manager_content_renderer',
'../components/components.gyp:plugins_renderer',
'../components/components.gyp:translate_content_renderer',
'../components/components.gyp:translate_core_common',
'../components/components.gyp:translate_core_language_detection',
'../components/components.gyp:visitedlink_renderer',
'../components/components.gyp:web_cache_renderer',
'../content/app/resources/content_resources.gyp:content_resources',
......
......@@ -17,17 +17,19 @@
#include "chrome/common/prerender_messages.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/url_constants.h"
#include "chrome/renderer/isolated_world_ids.h"
#include "chrome/renderer/prerender/prerender_helper.h"
#include "chrome/renderer/safe_browsing/phishing_classifier_delegate.h"
#include "chrome/renderer/translate/translate_helper.h"
#include "chrome/renderer/web_apps.h"
#include "chrome/renderer/webview_color_overlay.h"
#include "components/translate/content/renderer/translate_helper.h"
#include "components/web_cache/renderer/web_cache_render_process_observer.h"
#include "content/public/common/bindings_policy.h"
#include "content/public/renderer/content_renderer_client.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_view.h"
#include "extensions/common/constants.h"
#include "extensions/renderer/extension_groups.h"
#include "net/base/data_url.h"
#include "skia/ext/platform_canvas.h"
#include "third_party/WebKit/public/platform/WebCString.h"
......@@ -158,7 +160,11 @@ ChromeRenderViewObserver::ChromeRenderViewObserver(
web_cache::WebCacheRenderProcessObserver* web_cache_render_process_observer)
: content::RenderViewObserver(render_view),
web_cache_render_process_observer_(web_cache_render_process_observer),
translate_helper_(new TranslateHelper(render_view)),
translate_helper_(new translate::TranslateHelper(
render_view,
chrome::ISOLATED_WORLD_ID_TRANSLATE,
extensions::EXTENSION_GROUP_INTERNAL_TRANSLATE_SCRIPTS,
extensions::kExtensionScheme)),
phishing_classifier_(NULL),
capture_timer_(false, false) {
const CommandLine& command_line = *CommandLine::ForCurrentProcess();
......
......@@ -20,7 +20,6 @@
class ContentSettingsObserver;
class SkBitmap;
class TranslateHelper;
class WebViewColorOverlay;
class WebViewAnimatingOverlay;
......@@ -33,6 +32,10 @@ namespace safe_browsing {
class PhishingClassifierDelegate;
}
namespace translate {
class TranslateHelper;
}
namespace web_cache {
class WebCacheRenderProcessObserver;
}
......@@ -98,7 +101,7 @@ class ChromeRenderViewObserver : public content::RenderViewObserver {
web_cache::WebCacheRenderProcessObserver* web_cache_render_process_observer_;
// Have the same lifetime as us.
TranslateHelper* translate_helper_;
translate::TranslateHelper* translate_helper_;
safe_browsing::PhishingClassifierDelegate* phishing_classifier_;
// A color page overlay when visually de-emaphasized.
......
......@@ -3,11 +3,14 @@
// found in the LICENSE file.
#include "base/time/time.h"
#include "chrome/renderer/translate/translate_helper.h"
#include "chrome/renderer/isolated_world_ids.h"
#include "chrome/test/base/chrome_render_view_test.h"
#include "components/translate/content/common/translate_messages.h"
#include "components/translate/content/renderer/translate_helper.h"
#include "components/translate/core/common/translate_constants.h"
#include "content/public/renderer/render_view.h"
#include "extensions/common/constants.h"
#include "extensions/renderer/extension_groups.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/web/WebLocalFrame.h"
......@@ -16,11 +19,14 @@ using testing::AtLeast;
using testing::Return;
using testing::_;
class TestTranslateHelper : public TranslateHelper {
class TestTranslateHelper : public translate::TranslateHelper {
public:
explicit TestTranslateHelper(content::RenderView* render_view)
: TranslateHelper(render_view) {
}
: translate::TranslateHelper(
render_view,
chrome::ISOLATED_WORLD_ID_TRANSLATE,
extensions::EXTENSION_GROUP_INTERNAL_TRANSLATE_SCRIPTS,
extensions::kExtensionScheme) {}
virtual base::TimeDelta AdjustDelay(int delayInMs) OVERRIDE {
// Just returns base::TimeDelta() which has initial value 0.
......
......@@ -206,9 +206,16 @@
'target_name': 'translate_content_renderer',
'type': 'static_library',
'dependencies': [
'translate_content_common',
'translate_core_common',
'translate_core_language_detection',
'../base/base.gyp:base',
'../content/content.gyp:content_common',
'../content/content.gyp:content_renderer',
'../ipc/ipc.gyp:ipc',
'../third_party/WebKit/public/blink.gyp:blink',
'../url/url.gyp:url_lib',
'../v8/tools/gyp/v8.gyp:v8',
],
'include_dirs': [
'..',
......@@ -216,6 +223,8 @@
'sources': [
# Note: sources list duplicated in GN build.
'translate/content/renderer/renderer_cld_data_provider.h',
'translate/content/renderer/translate_helper.cc',
'translate/content/renderer/translate_helper.h',
],
'conditions': [
['cld_version==0 or cld_version==2', {
......
......@@ -7,12 +7,21 @@ import("//build/config/features.gni")
static_library("renderer") {
sources = [
"renderer_cld_data_provider.h",
"translate_helper.cc",
"translate_helper.h",
]
deps = [
"//base",
"//components/translate/content/common",
"//components/translate/core/common",
"//components/translate/core/language_detection",
"//content/public/common",
"//content/public/renderer",
"//ipc",
"//third_party/WebKit/public:blink",
"//url",
"//v8",
]
if (cld_version == 0 || cld_version == 2) {
......
include_rules = [
"+content/public/renderer",
"+third_party/cld_2",
"+third_party/WebKit/public/web",
"+v8",
]
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/renderer/translate/translate_helper.h"
#include "components/translate/content/renderer/translate_helper.h"
#include "base/bind.h"
#include "base/compiler_specific.h"
......@@ -12,19 +12,16 @@
#include "base/strings/string16.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/renderer/isolated_world_ids.h"
#include "components/translate/content/common/translate_messages.h"
#include "components/translate/core/common/translate_constants.h"
#include "components/translate/core/common/translate_metrics.h"
#include "components/translate/core/common/translate_util.h"
#include "components/translate/core/language_detection/language_detection_util.h"
#include "content/public/common/content_constants.h"
#include "content/public/common/url_constants.h"
#include "content/public/renderer/render_thread.h"
#include "content/public/renderer/render_view.h"
#include "extensions/common/constants.h"
#include "extensions/renderer/extension_groups.h"
#include "ipc/ipc_platform_file.h"
#include "content/public/common/url_constants.h"
#include "third_party/WebKit/public/web/WebDocument.h"
#include "third_party/WebKit/public/web/WebElement.h"
#include "third_party/WebKit/public/web/WebFrame.h"
......@@ -73,11 +70,15 @@ bool g_cld_callback_set = false;
} // namespace
namespace translate {
////////////////////////////////////////////////////////////////////////////////
// TranslateHelper, public:
//
TranslateHelper::TranslateHelper(content::RenderView* render_view)
TranslateHelper::TranslateHelper(content::RenderView* render_view,
int world_id,
int extension_group,
const std::string& extension_scheme)
: content::RenderViewObserver(render_view),
page_seq_no_(0),
translation_pending_(false),
......@@ -86,6 +87,9 @@ TranslateHelper::TranslateHelper(content::RenderView* render_view)
cld_data_polling_canceled_(false),
deferred_page_capture_(false),
deferred_page_seq_no_(-1),
world_id_(world_id),
extension_group_(extension_group),
extension_scheme_(extension_scheme),
weak_method_factory_(this) {
}
......@@ -116,7 +120,7 @@ void TranslateHelper::PrepareForUrl(const GURL& url) {
return;
if (url.SchemeIs(url::kFtpScheme))
return;
if (url.SchemeIs(extensions::kExtensionScheme))
if (url.SchemeIs(extension_scheme_.c_str()))
return;
// Start polling for CLD data.
......@@ -172,7 +176,7 @@ void TranslateHelper::PageCapturedImpl(int page_seq_no,
html_lang = html_element.getAttribute("lang").utf8();
std::string cld_language;
bool is_cld_reliable;
std::string language = translate::DeterminePageLanguage(
std::string language = DeterminePageLanguage(
content_language, html_lang, contents, &cld_language, &is_cld_reliable);
if (language.empty())
......@@ -181,7 +185,7 @@ void TranslateHelper::PageCapturedImpl(int page_seq_no,
language_determined_time_ = base::TimeTicks::Now();
GURL url(document.url());
translate::LanguageDetectionDetails details;
LanguageDetectionDetails details;
details.time = base::Time::Now();
details.url = url;
details.content_language = content_language;
......@@ -255,10 +259,7 @@ void TranslateHelper::ExecuteScript(const std::string& script) {
WebScriptSource source = WebScriptSource(ASCIIToUTF16(script));
main_frame->executeScriptInIsolatedWorld(
chrome::ISOLATED_WORLD_ID_TRANSLATE,
&source,
1,
extensions::EXTENSION_GROUP_INTERNAL_TRANSLATE_SCRIPTS);
world_id_, &source, 1, extension_group_);
}
bool TranslateHelper::ExecuteScriptAndGetBoolResult(const std::string& script,
......@@ -271,11 +272,7 @@ bool TranslateHelper::ExecuteScriptAndGetBoolResult(const std::string& script,
WebVector<v8::Local<v8::Value> > results;
WebScriptSource source = WebScriptSource(ASCIIToUTF16(script));
main_frame->executeScriptInIsolatedWorld(
chrome::ISOLATED_WORLD_ID_TRANSLATE,
&source,
1,
extensions::EXTENSION_GROUP_INTERNAL_TRANSLATE_SCRIPTS,
&results);
world_id_, &source, 1, extension_group_, &results);
if (results.size() != 1 || results[0].IsEmpty() || !results[0]->IsBoolean()) {
NOTREACHED();
return fallback;
......@@ -294,11 +291,7 @@ std::string TranslateHelper::ExecuteScriptAndGetStringResult(
WebVector<v8::Local<v8::Value> > results;
WebScriptSource source = WebScriptSource(ASCIIToUTF16(script));
main_frame->executeScriptInIsolatedWorld(
chrome::ISOLATED_WORLD_ID_TRANSLATE,
&source,
1,
extensions::EXTENSION_GROUP_INTERNAL_TRANSLATE_SCRIPTS,
&results);
world_id_, &source, 1, extension_group_, &results);
if (results.size() != 1 || results[0].IsEmpty() || !results[0]->IsString()) {
NOTREACHED();
return std::string();
......@@ -321,11 +314,7 @@ double TranslateHelper::ExecuteScriptAndGetDoubleResult(
WebVector<v8::Local<v8::Value> > results;
WebScriptSource source = WebScriptSource(ASCIIToUTF16(script));
main_frame->executeScriptInIsolatedWorld(
chrome::ISOLATED_WORLD_ID_TRANSLATE,
&source,
1,
extensions::EXTENSION_GROUP_INTERNAL_TRANSLATE_SCRIPTS,
&results);
world_id_, &source, 1, extension_group_, &results);
if (results.size() != 1 || results[0].IsEmpty() || !results[0]->IsNumber()) {
NOTREACHED();
return 0.0;
......@@ -408,28 +397,25 @@ void TranslateHelper::OnTranslatePage(int page_seq_no,
// If the source language is undetermined, we'll let the translate element
// detect it.
source_lang_ = (source_lang != translate::kUnknownLanguageCode) ?
source_lang : kAutoDetectionLanguage;
source_lang_ = (source_lang != kUnknownLanguageCode) ? source_lang
: kAutoDetectionLanguage;
target_lang_ = target_lang;
translate::ReportUserActionDuration(language_determined_time_,
base::TimeTicks::Now());
ReportUserActionDuration(language_determined_time_, base::TimeTicks::Now());
GURL url(main_frame->document().url());
translate::ReportPageScheme(url.scheme());
ReportPageScheme(url.scheme());
// Set up v8 isolated world with proper content-security-policy and
// security-origin.
WebFrame* frame = GetMainFrame();
if (frame) {
frame->setIsolatedWorldContentSecurityPolicy(
chrome::ISOLATED_WORLD_ID_TRANSLATE,
WebString::fromUTF8(kContentSecurityPolicy));
world_id_, WebString::fromUTF8(kContentSecurityPolicy));
GURL security_origin = translate::GetTranslateSecurityOrigin();
GURL security_origin = GetTranslateSecurityOrigin();
frame->setIsolatedWorldSecurityOrigin(
chrome::ISOLATED_WORLD_ID_TRANSLATE,
WebSecurityOrigin::create(security_origin));
world_id_, WebSecurityOrigin::create(security_origin));
}
if (!IsTranslateLibAvailable()) {
......@@ -465,8 +451,7 @@ void TranslateHelper::CheckTranslateStatus(int page_seq_no) {
// First check if there was an error.
if (HasTranslationFailed()) {
// TODO(toyoshim): Check |errorCode| of translate.js and notify it here.
NotifyBrowserTranslationFailed(
translate::TranslateErrors::TRANSLATION_ERROR);
NotifyBrowserTranslationFailed(TranslateErrors::TRANSLATION_ERROR);
return; // There was an error.
}
......@@ -477,12 +462,10 @@ void TranslateHelper::CheckTranslateStatus(int page_seq_no) {
if (source_lang_ == kAutoDetectionLanguage) {
actual_source_lang = GetOriginalPageLanguage();
if (actual_source_lang.empty()) {
NotifyBrowserTranslationFailed(
translate::TranslateErrors::UNKNOWN_LANGUAGE);
NotifyBrowserTranslationFailed(TranslateErrors::UNKNOWN_LANGUAGE);
return;
} else if (actual_source_lang == target_lang_) {
NotifyBrowserTranslationFailed(
translate::TranslateErrors::IDENTICAL_LANGUAGES);
NotifyBrowserTranslationFailed(TranslateErrors::IDENTICAL_LANGUAGES);
return;
}
} else {
......@@ -497,7 +480,7 @@ void TranslateHelper::CheckTranslateStatus(int page_seq_no) {
translation_pending_ = false;
// Check JavaScript performance counters for UMA reports.
translate::ReportTimeToTranslate(
ReportTimeToTranslate(
ExecuteScriptAndGetDoubleResult("cr.googleTranslate.translationTime"));
// Notify the browser we are done.
......@@ -505,7 +488,7 @@ void TranslateHelper::CheckTranslateStatus(int page_seq_no) {
new ChromeViewHostMsg_PageTranslated(render_view()->GetRoutingID(),
actual_source_lang,
target_lang_,
translate::TranslateErrors::NONE));
TranslateErrors::NONE));
return;
}
......@@ -526,8 +509,7 @@ void TranslateHelper::TranslatePageImpl(int page_seq_no, int count) {
// The library is not ready, try again later, unless we have tried several
// times unsucessfully already.
if (++count >= kMaxTranslateInitCheckAttempts) {
NotifyBrowserTranslationFailed(
translate::TranslateErrors::INITIALIZATION_ERROR);
NotifyBrowserTranslationFailed(TranslateErrors::INITIALIZATION_ERROR);
return;
}
base::MessageLoop::current()->PostDelayedTask(
......@@ -541,14 +523,13 @@ void TranslateHelper::TranslatePageImpl(int page_seq_no, int count) {
// The library is loaded, and ready for translation now.
// Check JavaScript performance counters for UMA reports.
translate::ReportTimeToBeReady(
ReportTimeToBeReady(
ExecuteScriptAndGetDoubleResult("cr.googleTranslate.readyTime"));
translate::ReportTimeToLoad(
ReportTimeToLoad(
ExecuteScriptAndGetDoubleResult("cr.googleTranslate.loadTime"));
if (!StartTranslation()) {
NotifyBrowserTranslationFailed(
translate::TranslateErrors::TRANSLATION_ERROR);
NotifyBrowserTranslationFailed(TranslateErrors::TRANSLATION_ERROR);
return;
}
// Check the status of the translation.
......@@ -560,7 +541,7 @@ void TranslateHelper::TranslatePageImpl(int page_seq_no, int count) {
}
void TranslateHelper::NotifyBrowserTranslationFailed(
translate::TranslateErrors::Type error) {
TranslateErrors::Type error) {
translation_pending_ = false;
// Notify the browser there was an error.
render_view()->Send(new ChromeViewHostMsg_PageTranslated(
......@@ -653,3 +634,5 @@ void TranslateHelper::RecordLanguageDetectionTiming(
content::RenderThread::Get()->UpdateHistograms(
content::kHistogramSynchronizerReservedSequenceNumber);
}
} // namespace translate
......@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_RENDERER_TRANSLATE_TRANSLATE_HELPER_H_
#define CHROME_RENDERER_TRANSLATE_TRANSLATE_HELPER_H_
#ifndef COMPONENTS_TRANSLATE_CONTENT_RENDERER_TRANSLATE_HELPER_H_
#define COMPONENTS_TRANSLATE_CONTENT_RENDERER_TRANSLATE_HELPER_H_
#include <string>
......@@ -26,6 +26,8 @@ namespace content {
class RendererCldDataProvider;
}
namespace translate {
// This class deals with page translation.
// There is one TranslateHelper per RenderView.
//
......@@ -77,7 +79,10 @@ class RendererCldDataProvider;
// message to be sent to the browser process immediately.
class TranslateHelper : public content::RenderViewObserver {
public:
explicit TranslateHelper(content::RenderView* render_view);
explicit TranslateHelper(content::RenderView* render_view,
int world_id,
int extension_group,
const std::string& extension_scheme);
virtual ~TranslateHelper();
// Informs us that the page's text has been extracted.
......@@ -195,7 +200,7 @@ class TranslateHelper : public content::RenderViewObserver {
// Sends a message to the browser to notify it that the translation failed
// with |error|.
void NotifyBrowserTranslationFailed(translate::TranslateErrors::Type error);
void NotifyBrowserTranslationFailed(TranslateErrors::Type error);
// Convenience method to access the main frame. Can return NULL, typically
// if the page is being closed.
......@@ -239,7 +244,7 @@ class TranslateHelper : public content::RenderViewObserver {
base::TimeTicks language_determined_time_;
// Provides CLD data for this process.
scoped_ptr<translate::RendererCldDataProvider> cld_data_provider_;
scoped_ptr<RendererCldDataProvider> cld_data_provider_;
// Whether or not polling for CLD2 data has started.
bool cld_data_polling_started_;
......@@ -255,6 +260,15 @@ class TranslateHelper : public content::RenderViewObserver {
// deferred_page_capture_ is true.
int deferred_page_seq_no_;
// The world ID to use for script execution.
int world_id_;
// The extension group.
int extension_group_;
// The URL scheme for translate extensions.
std::string extension_scheme_;
// The contents of the page most recently reported to PageCaptured if
// deferred_page_capture_ is true.
base::string16 deferred_contents_;
......@@ -265,4 +279,6 @@ class TranslateHelper : public content::RenderViewObserver {
DISALLOW_COPY_AND_ASSIGN(TranslateHelper);
};
#endif // CHROME_RENDERER_TRANSLATE_TRANSLATE_HELPER_H_
} // namespace translate
#endif // COMPONENTS_TRANSLATE_CONTENT_RENDERER_TRANSLATE_HELPER_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment