Commit 2fd6cf23 authored by Doug Arnett's avatar Doug Arnett Committed by Commit Bot

Renames TranslateHelper to TranslateAgent for consistency

Also renames translate::mojom::Page interface to
translate::mojom::TranslateAgent

No functional changes.

Bug: 1043351
Change-Id: I2994e1219ff95aadd3fd650ebb1ee79e7d7b37e1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2007319Reviewed-by: default avatarKen Buchanan <kenrb@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avataranthonyvd <anthonyvd@chromium.org>
Commit-Queue: Doug Arnett <dougarnett@chromium.org>
Cr-Commit-Position: refs/heads/master@{#735496}
parent 5c4a542e
...@@ -37,20 +37,21 @@ ...@@ -37,20 +37,21 @@
FakePageImpl::FakePageImpl() FakePageImpl::FakePageImpl()
: called_translate_(false), called_revert_translation_(false) {} : called_translate_(false), called_revert_translation_(false) {}
FakePageImpl::~FakePageImpl() {} FakePageImpl::~FakePageImpl() {}
mojo::PendingRemote<translate::mojom::Page> mojo::PendingRemote<translate::mojom::TranslateAgent>
FakePageImpl::BindToNewPageRemote() { FakePageImpl::BindToNewPageRemote() {
receiver_.reset(); receiver_.reset();
translate_callback_pending_.Reset(); translate_callback_pending_.Reset();
return receiver_.BindNewPipeAndPassRemote(); return receiver_.BindNewPipeAndPassRemote();
} }
// translate::mojom::Page implementation. // translate::mojom::TranslateAgent implementation.
void FakePageImpl::Translate(const std::string& translate_script, void FakePageImpl::TranslateFrame(const std::string& translate_script,
const std::string& source_lang, const std::string& source_lang,
const std::string& target_lang, const std::string& target_lang,
TranslateCallback callback) { TranslateFrameCallback callback) {
// Ensure pending callback gets called. // Ensure pending callback gets called.
if (translate_callback_pending_) { if (translate_callback_pending_) {
std::move(translate_callback_pending_) std::move(translate_callback_pending_)
......
...@@ -40,18 +40,18 @@ ...@@ -40,18 +40,18 @@
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
#include "url/gurl.h" #include "url/gurl.h"
class FakePageImpl : public translate::mojom::Page { class FakePageImpl : public translate::mojom::TranslateAgent {
public: public:
FakePageImpl(); FakePageImpl();
~FakePageImpl() override; ~FakePageImpl() override;
mojo::PendingRemote<translate::mojom::Page> BindToNewPageRemote(); mojo::PendingRemote<translate::mojom::TranslateAgent> BindToNewPageRemote();
// translate::mojom::Page implementation. // translate::mojom::TranslateAgent implementation.
void Translate(const std::string& translate_script, void TranslateFrame(const std::string& translate_script,
const std::string& source_lang, const std::string& source_lang,
const std::string& target_lang, const std::string& target_lang,
TranslateCallback callback) override; TranslateFrameCallback callback) override;
void RevertTranslation() override; void RevertTranslation() override;
...@@ -66,8 +66,8 @@ class FakePageImpl : public translate::mojom::Page { ...@@ -66,8 +66,8 @@ class FakePageImpl : public translate::mojom::Page {
bool called_revert_translation_; bool called_revert_translation_;
private: private:
TranslateCallback translate_callback_pending_; TranslateFrameCallback translate_callback_pending_;
mojo::Receiver<translate::mojom::Page> receiver_{this}; mojo::Receiver<translate::mojom::TranslateAgent> receiver_{this};
DISALLOW_COPY_AND_ASSIGN(FakePageImpl); DISALLOW_COPY_AND_ASSIGN(FakePageImpl);
}; };
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
#include "components/crash/core/common/crash_key.h" #include "components/crash/core/common/crash_key.h"
#include "components/offline_pages/buildflags/buildflags.h" #include "components/offline_pages/buildflags/buildflags.h"
#include "components/safe_browsing/buildflags.h" #include "components/safe_browsing/buildflags.h"
#include "components/translate/content/renderer/translate_helper.h" #include "components/translate/content/renderer/translate_agent.h"
#include "components/web_cache/renderer/web_cache_impl.h" #include "components/web_cache/renderer/web_cache_impl.h"
#include "content/public/common/bindings_policy.h" #include "content/public/common/bindings_policy.h"
#include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_frame.h"
...@@ -137,7 +137,7 @@ ChromeRenderFrameObserver::ChromeRenderFrameObserver( ...@@ -137,7 +137,7 @@ ChromeRenderFrameObserver::ChromeRenderFrameObserver(
content::RenderFrame* render_frame, content::RenderFrame* render_frame,
web_cache::WebCacheImpl* web_cache_impl) web_cache::WebCacheImpl* web_cache_impl)
: content::RenderFrameObserver(render_frame), : content::RenderFrameObserver(render_frame),
translate_helper_(nullptr), translate_agent_(nullptr),
phishing_classifier_(nullptr), phishing_classifier_(nullptr),
web_cache_impl_(web_cache_impl) { web_cache_impl_(web_cache_impl) {
render_frame->GetAssociatedInterfaceRegistry()->AddInterface( render_frame->GetAssociatedInterfaceRegistry()->AddInterface(
...@@ -153,7 +153,7 @@ ChromeRenderFrameObserver::ChromeRenderFrameObserver( ...@@ -153,7 +153,7 @@ ChromeRenderFrameObserver::ChromeRenderFrameObserver(
if (!command_line.HasSwitch(switches::kDisableClientSidePhishingDetection)) if (!command_line.HasSwitch(switches::kDisableClientSidePhishingDetection))
SetClientSidePhishingDetection(true); SetClientSidePhishingDetection(true);
#endif #endif
translate_helper_ = new translate::TranslateHelper( translate_agent_ = new translate::TranslateAgent(
render_frame, ISOLATED_WORLD_ID_TRANSLATE, extensions::kExtensionScheme); render_frame, ISOLATED_WORLD_ID_TRANSLATE, extensions::kExtensionScheme);
} }
...@@ -375,11 +375,11 @@ void ChromeRenderFrameObserver::ReadyToCommitNavigation( ...@@ -375,11 +375,11 @@ void ChromeRenderFrameObserver::ReadyToCommitNavigation(
if (render_frame()->IsMainFrame() && web_cache_impl_) if (render_frame()->IsMainFrame() && web_cache_impl_)
web_cache_impl_->ExecutePendingClearCache(); web_cache_impl_->ExecutePendingClearCache();
// Let translate_helper do any preparatory work for loading a URL. // Let translate_agent do any preparatory work for loading a URL.
if (!translate_helper_) if (!translate_agent_)
return; return;
translate_helper_->PrepareForUrl( translate_agent_->PrepareForUrl(
render_frame()->GetWebFrame()->GetDocument().Url()); render_frame()->GetWebFrame()->GetDocument().Url());
} }
...@@ -453,8 +453,8 @@ void ChromeRenderFrameObserver::CapturePageText(TextCaptureType capture_type) { ...@@ -453,8 +453,8 @@ void ChromeRenderFrameObserver::CapturePageText(TextCaptureType capture_type) {
// We should run language detection only once. Parsing finishes before // We should run language detection only once. Parsing finishes before
// the page loads, so let's pick that timing. // the page loads, so let's pick that timing.
if (translate_helper_ && capture_type == PRELIMINARY_CAPTURE) { if (translate_agent_ && capture_type == PRELIMINARY_CAPTURE) {
translate_helper_->PageCaptured(contents); translate_agent_->PageCaptured(contents);
} }
TRACE_EVENT0("renderer", "ChromeRenderFrameObserver::CapturePageText"); TRACE_EVENT0("renderer", "ChromeRenderFrameObserver::CapturePageText");
......
...@@ -25,7 +25,7 @@ class PhishingClassifierDelegate; ...@@ -25,7 +25,7 @@ class PhishingClassifierDelegate;
} }
namespace translate { namespace translate {
class TranslateHelper; class TranslateAgent;
} }
namespace web_cache { namespace web_cache {
...@@ -104,7 +104,7 @@ class ChromeRenderFrameObserver : public content::RenderFrameObserver, ...@@ -104,7 +104,7 @@ class ChromeRenderFrameObserver : public content::RenderFrameObserver,
base::TimeDelta delay); base::TimeDelta delay);
// Have the same lifetime as us. // Have the same lifetime as us.
translate::TranslateHelper* translate_helper_; translate::TranslateAgent* translate_agent_;
safe_browsing::PhishingClassifierDelegate* phishing_classifier_; safe_browsing::PhishingClassifierDelegate* phishing_classifier_;
// Owned by ChromeContentRendererClient and outlive us. // Owned by ChromeContentRendererClient and outlive us.
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include "base/test/metrics/histogram_tester.h" #include "base/test/metrics/histogram_tester.h"
#include "chrome/test/base/chrome_render_view_test.h" #include "chrome/test/base/chrome_render_view_test.h"
#include "components/translate/content/common/translate.mojom.h" #include "components/translate/content/common/translate.mojom.h"
#include "components/translate/content/renderer/translate_helper.h" #include "components/translate/content/renderer/translate_agent.h"
#include "components/translate/core/common/translate_constants.h" #include "components/translate/core/common/translate_constants.h"
#include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_view.h" #include "content/public/renderer/render_view.h"
...@@ -38,9 +38,10 @@ class FakeContentTranslateDriver ...@@ -38,9 +38,10 @@ class FakeContentTranslateDriver
} }
// translate::mojom::ContentTranslateDriver implementation. // translate::mojom::ContentTranslateDriver implementation.
void RegisterPage(mojo::PendingRemote<translate::mojom::Page> page, void RegisterPage(
const translate::LanguageDetectionDetails& details, mojo::PendingRemote<translate::mojom::TranslateAgent> translate_agent,
bool page_needs_translation) override { const translate::LanguageDetectionDetails& details,
bool page_needs_translation) override {
called_new_page_ = true; called_new_page_ = true;
page_needs_translation_ = page_needs_translation; page_needs_translation_ = page_needs_translation;
} }
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include "chrome/common/chrome_isolated_world_ids.h" #include "chrome/common/chrome_isolated_world_ids.h"
#include "chrome/test/base/chrome_render_view_test.h" #include "chrome/test/base/chrome_render_view_test.h"
#include "components/translate/content/common/translate.mojom.h" #include "components/translate/content/common/translate.mojom.h"
#include "components/translate/content/renderer/translate_helper.h" #include "components/translate/content/renderer/translate_agent.h"
#include "components/translate/core/common/translate_constants.h" #include "components/translate/core/common/translate_constants.h"
#include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_view.h" #include "content/public/renderer/render_view.h"
...@@ -24,9 +24,9 @@ ...@@ -24,9 +24,9 @@
#include "third_party/blink/public/common/browser_interface_broker_proxy.h" #include "third_party/blink/public/common/browser_interface_broker_proxy.h"
#include "third_party/blink/public/web/web_local_frame.h" #include "third_party/blink/public/web/web_local_frame.h"
using testing::_;
using testing::AtLeast; using testing::AtLeast;
using testing::Return; using testing::Return;
using testing::_;
namespace { namespace {
...@@ -44,9 +44,10 @@ class FakeContentTranslateDriver ...@@ -44,9 +44,10 @@ class FakeContentTranslateDriver
} }
// translate::mojom::ContentTranslateDriver implementation. // translate::mojom::ContentTranslateDriver implementation.
void RegisterPage(mojo::PendingRemote<translate::mojom::Page> page, void RegisterPage(
const translate::LanguageDetectionDetails& details, mojo::PendingRemote<translate::mojom::TranslateAgent> translate_agent,
bool page_needs_translation) override { const translate::LanguageDetectionDetails& details,
bool page_needs_translation) override {
called_new_page_ = true; called_new_page_ = true;
details_ = details; details_ = details;
page_needs_translation_ = page_needs_translation; page_needs_translation_ = page_needs_translation;
...@@ -68,12 +69,12 @@ class FakeContentTranslateDriver ...@@ -68,12 +69,12 @@ class FakeContentTranslateDriver
} // namespace } // namespace
class TestTranslateHelper : public translate::TranslateHelper { class TestTranslateAgent : public translate::TranslateAgent {
public: public:
explicit TestTranslateHelper(content::RenderFrame* render_frame) explicit TestTranslateAgent(content::RenderFrame* render_frame)
: translate::TranslateHelper(render_frame, : translate::TranslateAgent(render_frame,
ISOLATED_WORLD_ID_TRANSLATE, ISOLATED_WORLD_ID_TRANSLATE,
extensions::kExtensionScheme) {} extensions::kExtensionScheme) {}
base::TimeDelta AdjustDelay(int delayInMs) override { base::TimeDelta AdjustDelay(int delayInMs) override {
// Just returns base::TimeDelta() which has initial value 0. // Just returns base::TimeDelta() which has initial value 0.
...@@ -92,9 +93,9 @@ class TestTranslateHelper : public translate::TranslateHelper { ...@@ -92,9 +93,9 @@ class TestTranslateHelper : public translate::TranslateHelper {
trans_result_error_type_ = translate::TranslateErrors::NONE; trans_result_error_type_ = translate::TranslateErrors::NONE;
// Will get new result values via OnPageTranslated. // Will get new result values via OnPageTranslated.
Translate(translate_script, source_lang, target_lang, TranslateFrame(translate_script, source_lang, target_lang,
base::Bind(&TestTranslateHelper::OnPageTranslated, base::Bind(&TestTranslateAgent::OnPageTranslated,
base::Unretained(this))); base::Unretained(this)));
} }
bool GetPageTranslatedResult(std::string* original_lang, bool GetPageTranslatedResult(std::string* original_lang,
...@@ -143,17 +144,17 @@ class TestTranslateHelper : public translate::TranslateHelper { ...@@ -143,17 +144,17 @@ class TestTranslateHelper : public translate::TranslateHelper {
base::Optional<std::string> trans_result_translated_lang_; base::Optional<std::string> trans_result_translated_lang_;
translate::TranslateErrors::Type trans_result_error_type_; translate::TranslateErrors::Type trans_result_error_type_;
DISALLOW_COPY_AND_ASSIGN(TestTranslateHelper); DISALLOW_COPY_AND_ASSIGN(TestTranslateAgent);
}; };
class TranslateHelperBrowserTest : public ChromeRenderViewTest { class TranslateAgentBrowserTest : public ChromeRenderViewTest {
public: public:
TranslateHelperBrowserTest() : translate_helper_(NULL) {} TranslateAgentBrowserTest() : translate_agent_(nullptr) {}
protected: protected:
void SetUp() override { void SetUp() override {
ChromeRenderViewTest::SetUp(); ChromeRenderViewTest::SetUp();
translate_helper_ = new TestTranslateHelper(view_->GetMainRenderFrame()); translate_agent_ = new TestTranslateAgent(view_->GetMainRenderFrame());
view_->GetMainRenderFrame() view_->GetMainRenderFrame()
->GetBrowserInterfaceBroker() ->GetBrowserInterfaceBroker()
...@@ -169,82 +170,82 @@ class TranslateHelperBrowserTest : public ChromeRenderViewTest { ...@@ -169,82 +170,82 @@ class TranslateHelperBrowserTest : public ChromeRenderViewTest {
->SetBinderForTesting(translate::mojom::ContentTranslateDriver::Name_, ->SetBinderForTesting(translate::mojom::ContentTranslateDriver::Name_,
{}); {});
delete translate_helper_; delete translate_agent_;
ChromeRenderViewTest::TearDown(); ChromeRenderViewTest::TearDown();
} }
TestTranslateHelper* translate_helper_; TestTranslateAgent* translate_agent_;
FakeContentTranslateDriver fake_translate_driver_; FakeContentTranslateDriver fake_translate_driver_;
private: private:
DISALLOW_COPY_AND_ASSIGN(TranslateHelperBrowserTest); DISALLOW_COPY_AND_ASSIGN(TranslateAgentBrowserTest);
}; };
// Tests that the browser gets notified of the translation failure if the // Tests that the browser gets notified of the translation failure if the
// translate library fails/times-out during initialization. // translate library fails/times-out during initialization.
TEST_F(TranslateHelperBrowserTest, TranslateLibNeverReady) { TEST_F(TranslateAgentBrowserTest, TranslateLibNeverReady) {
// We make IsTranslateLibAvailable true so we don't attempt to inject the // We make IsTranslateLibAvailable true so we don't attempt to inject the
// library. // library.
EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) EXPECT_CALL(*translate_agent_, IsTranslateLibAvailable())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(Return(true)); .WillRepeatedly(Return(true));
EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) EXPECT_CALL(*translate_agent_, IsTranslateLibReady())
.Times(AtLeast(5)) // See kMaxTranslateInitCheckAttempts in .Times(AtLeast(5)) // See kMaxTranslateInitCheckAttempts in
// translate_helper.cc // translate_agent.cc
.WillRepeatedly(Return(false)); .WillRepeatedly(Return(false));
EXPECT_CALL(*translate_helper_, GetErrorCode()) EXPECT_CALL(*translate_agent_, GetErrorCode())
.Times(AtLeast(5)) .Times(AtLeast(5))
.WillRepeatedly(Return(translate::TranslateErrors::NONE)); .WillRepeatedly(Return(translate::TranslateErrors::NONE));
translate_helper_->TranslatePage("en", "fr", std::string()); translate_agent_->TranslatePage("en", "fr", std::string());
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
translate::TranslateErrors::Type error; translate::TranslateErrors::Type error;
ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(NULL, NULL, &error)); ASSERT_TRUE(
translate_agent_->GetPageTranslatedResult(nullptr, nullptr, &error));
EXPECT_EQ(translate::TranslateErrors::TRANSLATION_TIMEOUT, error); EXPECT_EQ(translate::TranslateErrors::TRANSLATION_TIMEOUT, error);
} }
// Tests that the browser gets notified of the translation success when the // Tests that the browser gets notified of the translation success when the
// translation succeeds. // translation succeeds.
TEST_F(TranslateHelperBrowserTest, TranslateSuccess) { TEST_F(TranslateAgentBrowserTest, TranslateSuccess) {
// We make IsTranslateLibAvailable true so we don't attempt to inject the // We make IsTranslateLibAvailable true so we don't attempt to inject the
// library. // library.
EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) EXPECT_CALL(*translate_agent_, IsTranslateLibAvailable())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(Return(true)); .WillRepeatedly(Return(true));
EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) EXPECT_CALL(*translate_agent_, IsTranslateLibReady())
.WillOnce(Return(false)) .WillOnce(Return(false))
.WillOnce(Return(true)); .WillOnce(Return(true));
EXPECT_CALL(*translate_helper_, GetErrorCode()) EXPECT_CALL(*translate_agent_, GetErrorCode())
.WillOnce(Return(translate::TranslateErrors::NONE)); .WillOnce(Return(translate::TranslateErrors::NONE));
EXPECT_CALL(*translate_helper_, StartTranslation()).WillOnce(Return(true)); EXPECT_CALL(*translate_agent_, StartTranslation()).WillOnce(Return(true));
// Succeed after few checks. // Succeed after few checks.
EXPECT_CALL(*translate_helper_, HasTranslationFailed()) EXPECT_CALL(*translate_agent_, HasTranslationFailed())
.WillRepeatedly(Return(false)); .WillRepeatedly(Return(false));
EXPECT_CALL(*translate_helper_, HasTranslationFinished()) EXPECT_CALL(*translate_agent_, HasTranslationFinished())
.WillOnce(Return(false)) .WillOnce(Return(false))
.WillOnce(Return(false)) .WillOnce(Return(false))
.WillOnce(Return(true)); .WillOnce(Return(true));
// V8 call for performance monitoring should be ignored. // V8 call for performance monitoring should be ignored.
EXPECT_CALL(*translate_helper_, EXPECT_CALL(*translate_agent_, ExecuteScriptAndGetDoubleResult(_)).Times(3);
ExecuteScriptAndGetDoubleResult(_)).Times(3);
std::string original_lang("en"); std::string original_lang("en");
std::string target_lang("fr"); std::string target_lang("fr");
translate_helper_->TranslatePage(original_lang, target_lang, std::string()); translate_agent_->TranslatePage(original_lang, target_lang, std::string());
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
std::string received_original_lang; std::string received_original_lang;
std::string received_target_lang; std::string received_target_lang;
translate::TranslateErrors::Type error; translate::TranslateErrors::Type error;
ASSERT_TRUE(translate_helper_->GetPageTranslatedResult( ASSERT_TRUE(translate_agent_->GetPageTranslatedResult(
&received_original_lang, &received_target_lang, &error)); &received_original_lang, &received_target_lang, &error));
EXPECT_EQ(original_lang, received_original_lang); EXPECT_EQ(original_lang, received_original_lang);
EXPECT_EQ(target_lang, received_target_lang); EXPECT_EQ(target_lang, received_target_lang);
...@@ -253,80 +254,76 @@ TEST_F(TranslateHelperBrowserTest, TranslateSuccess) { ...@@ -253,80 +254,76 @@ TEST_F(TranslateHelperBrowserTest, TranslateSuccess) {
// Tests that the browser gets notified of the translation failure when the // Tests that the browser gets notified of the translation failure when the
// translation fails. // translation fails.
TEST_F(TranslateHelperBrowserTest, TranslateFailure) { TEST_F(TranslateAgentBrowserTest, TranslateFailure) {
// We make IsTranslateLibAvailable true so we don't attempt to inject the // We make IsTranslateLibAvailable true so we don't attempt to inject the
// library. // library.
EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) EXPECT_CALL(*translate_agent_, IsTranslateLibAvailable())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(Return(true)); .WillRepeatedly(Return(true));
EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) EXPECT_CALL(*translate_agent_, IsTranslateLibReady()).WillOnce(Return(true));
.WillOnce(Return(true));
EXPECT_CALL(*translate_helper_, StartTranslation()).WillOnce(Return(true)); EXPECT_CALL(*translate_agent_, StartTranslation()).WillOnce(Return(true));
// Fail after few checks. // Fail after few checks.
EXPECT_CALL(*translate_helper_, HasTranslationFailed()) EXPECT_CALL(*translate_agent_, HasTranslationFailed())
.WillOnce(Return(false)) .WillOnce(Return(false))
.WillOnce(Return(false)) .WillOnce(Return(false))
.WillOnce(Return(false)) .WillOnce(Return(false))
.WillOnce(Return(true)); .WillOnce(Return(true));
EXPECT_CALL(*translate_helper_, HasTranslationFinished()) EXPECT_CALL(*translate_agent_, HasTranslationFinished())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(Return(false)); .WillRepeatedly(Return(false));
EXPECT_CALL(*translate_helper_, GetErrorCode()) EXPECT_CALL(*translate_agent_, GetErrorCode())
.WillOnce(Return(translate::TranslateErrors::TRANSLATION_ERROR)); .WillOnce(Return(translate::TranslateErrors::TRANSLATION_ERROR));
// V8 call for performance monitoring should be ignored. // V8 call for performance monitoring should be ignored.
EXPECT_CALL(*translate_helper_, EXPECT_CALL(*translate_agent_, ExecuteScriptAndGetDoubleResult(_)).Times(2);
ExecuteScriptAndGetDoubleResult(_)).Times(2);
translate_helper_->TranslatePage("en", "fr", std::string()); translate_agent_->TranslatePage("en", "fr", std::string());
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
translate::TranslateErrors::Type error; translate::TranslateErrors::Type error;
ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(NULL, NULL, &error)); ASSERT_TRUE(
translate_agent_->GetPageTranslatedResult(nullptr, nullptr, &error));
EXPECT_EQ(translate::TranslateErrors::TRANSLATION_ERROR, error); EXPECT_EQ(translate::TranslateErrors::TRANSLATION_ERROR, error);
} }
// Tests that when the browser translate a page for which the language is // Tests that when the browser translate a page for which the language is
// undefined we query the translate element to get the language. // undefined we query the translate element to get the language.
TEST_F(TranslateHelperBrowserTest, UndefinedSourceLang) { TEST_F(TranslateAgentBrowserTest, UndefinedSourceLang) {
// We make IsTranslateLibAvailable true so we don't attempt to inject the // We make IsTranslateLibAvailable true so we don't attempt to inject the
// library. // library.
EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) EXPECT_CALL(*translate_agent_, IsTranslateLibAvailable())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(Return(true)); .WillRepeatedly(Return(true));
EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) EXPECT_CALL(*translate_agent_, IsTranslateLibReady()).WillOnce(Return(true));
.WillOnce(Return(true));
EXPECT_CALL(*translate_helper_, GetOriginalPageLanguage()) EXPECT_CALL(*translate_agent_, GetOriginalPageLanguage())
.WillOnce(Return("de")); .WillOnce(Return("de"));
EXPECT_CALL(*translate_helper_, StartTranslation()).WillOnce(Return(true)); EXPECT_CALL(*translate_agent_, StartTranslation()).WillOnce(Return(true));
EXPECT_CALL(*translate_helper_, HasTranslationFailed()) EXPECT_CALL(*translate_agent_, HasTranslationFailed())
.WillOnce(Return(false)); .WillOnce(Return(false));
EXPECT_CALL(*translate_helper_, HasTranslationFinished()) EXPECT_CALL(*translate_agent_, HasTranslationFinished())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(Return(true)); .WillRepeatedly(Return(true));
// V8 call for performance monitoring should be ignored. // V8 call for performance monitoring should be ignored.
EXPECT_CALL(*translate_helper_, EXPECT_CALL(*translate_agent_, ExecuteScriptAndGetDoubleResult(_)).Times(3);
ExecuteScriptAndGetDoubleResult(_)).Times(3);
translate_helper_->TranslatePage(translate::kUnknownLanguageCode, translate_agent_->TranslatePage(translate::kUnknownLanguageCode, "fr",
"fr", std::string());
std::string());
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
translate::TranslateErrors::Type error; translate::TranslateErrors::Type error;
std::string original_lang; std::string original_lang;
std::string target_lang; std::string target_lang;
ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(&original_lang, ASSERT_TRUE(translate_agent_->GetPageTranslatedResult(&original_lang,
&target_lang, &error)); &target_lang, &error));
EXPECT_EQ("de", original_lang); EXPECT_EQ("de", original_lang);
EXPECT_EQ("fr", target_lang); EXPECT_EQ("fr", target_lang);
EXPECT_EQ(translate::TranslateErrors::NONE, error); EXPECT_EQ(translate::TranslateErrors::NONE, error);
...@@ -334,38 +331,37 @@ TEST_F(TranslateHelperBrowserTest, UndefinedSourceLang) { ...@@ -334,38 +331,37 @@ TEST_F(TranslateHelperBrowserTest, UndefinedSourceLang) {
// Tests that starting a translation while a similar one is pending does not // Tests that starting a translation while a similar one is pending does not
// break anything. // break anything.
TEST_F(TranslateHelperBrowserTest, MultipleSimilarTranslations) { TEST_F(TranslateAgentBrowserTest, MultipleSimilarTranslations) {
// We make IsTranslateLibAvailable true so we don't attempt to inject the // We make IsTranslateLibAvailable true so we don't attempt to inject the
// library. // library.
EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) EXPECT_CALL(*translate_agent_, IsTranslateLibAvailable())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(Return(true)); .WillRepeatedly(Return(true));
EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) EXPECT_CALL(*translate_agent_, IsTranslateLibReady())
.WillRepeatedly(Return(true)); .WillRepeatedly(Return(true));
EXPECT_CALL(*translate_helper_, StartTranslation()) EXPECT_CALL(*translate_agent_, StartTranslation())
.WillRepeatedly(Return(true)); .WillRepeatedly(Return(true));
EXPECT_CALL(*translate_helper_, HasTranslationFailed()) EXPECT_CALL(*translate_agent_, HasTranslationFailed())
.WillRepeatedly(Return(false)); .WillRepeatedly(Return(false));
EXPECT_CALL(*translate_helper_, HasTranslationFinished()) EXPECT_CALL(*translate_agent_, HasTranslationFinished())
.WillOnce(Return(true)); .WillOnce(Return(true));
// V8 call for performance monitoring should be ignored. // V8 call for performance monitoring should be ignored.
EXPECT_CALL(*translate_helper_, EXPECT_CALL(*translate_agent_, ExecuteScriptAndGetDoubleResult(_)).Times(3);
ExecuteScriptAndGetDoubleResult(_)).Times(3);
std::string original_lang("en"); std::string original_lang("en");
std::string target_lang("fr"); std::string target_lang("fr");
translate_helper_->TranslatePage(original_lang, target_lang, std::string()); translate_agent_->TranslatePage(original_lang, target_lang, std::string());
// While this is running call again TranslatePage to make sure noting bad // While this is running call again TranslatePage to make sure noting bad
// happens. // happens.
translate_helper_->TranslatePage(original_lang, target_lang, std::string()); translate_agent_->TranslatePage(original_lang, target_lang, std::string());
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
std::string received_original_lang; std::string received_original_lang;
std::string received_target_lang; std::string received_target_lang;
translate::TranslateErrors::Type error; translate::TranslateErrors::Type error;
ASSERT_TRUE(translate_helper_->GetPageTranslatedResult( ASSERT_TRUE(translate_agent_->GetPageTranslatedResult(
&received_original_lang, &received_target_lang, &error)); &received_original_lang, &received_target_lang, &error));
EXPECT_EQ(original_lang, received_original_lang); EXPECT_EQ(original_lang, received_original_lang);
EXPECT_EQ(target_lang, received_target_lang); EXPECT_EQ(target_lang, received_target_lang);
...@@ -373,36 +369,35 @@ TEST_F(TranslateHelperBrowserTest, MultipleSimilarTranslations) { ...@@ -373,36 +369,35 @@ TEST_F(TranslateHelperBrowserTest, MultipleSimilarTranslations) {
} }
// Tests that starting a translation while a different one is pending works. // Tests that starting a translation while a different one is pending works.
TEST_F(TranslateHelperBrowserTest, MultipleDifferentTranslations) { TEST_F(TranslateAgentBrowserTest, MultipleDifferentTranslations) {
EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) EXPECT_CALL(*translate_agent_, IsTranslateLibAvailable())
.Times(AtLeast(1)) .Times(AtLeast(1))
.WillRepeatedly(Return(true)); .WillRepeatedly(Return(true));
EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) EXPECT_CALL(*translate_agent_, IsTranslateLibReady())
.WillRepeatedly(Return(true)); .WillRepeatedly(Return(true));
EXPECT_CALL(*translate_helper_, StartTranslation()) EXPECT_CALL(*translate_agent_, StartTranslation())
.WillRepeatedly(Return(true)); .WillRepeatedly(Return(true));
EXPECT_CALL(*translate_helper_, HasTranslationFailed()) EXPECT_CALL(*translate_agent_, HasTranslationFailed())
.WillRepeatedly(Return(false)); .WillRepeatedly(Return(false));
EXPECT_CALL(*translate_helper_, HasTranslationFinished()) EXPECT_CALL(*translate_agent_, HasTranslationFinished())
.WillOnce(Return(true)); .WillOnce(Return(true));
// V8 call for performance monitoring should be ignored. // V8 call for performance monitoring should be ignored.
EXPECT_CALL(*translate_helper_, EXPECT_CALL(*translate_agent_, ExecuteScriptAndGetDoubleResult(_)).Times(5);
ExecuteScriptAndGetDoubleResult(_)).Times(5);
std::string original_lang("en"); std::string original_lang("en");
std::string target_lang("fr"); std::string target_lang("fr");
translate_helper_->TranslatePage(original_lang, target_lang, std::string()); translate_agent_->TranslatePage(original_lang, target_lang, std::string());
// While this is running call again TranslatePage with a new target lang. // While this is running call again TranslatePage with a new target lang.
std::string new_target_lang("de"); std::string new_target_lang("de");
translate_helper_->TranslatePage( translate_agent_->TranslatePage(original_lang, new_target_lang,
original_lang, new_target_lang, std::string()); std::string());
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
std::string received_original_lang; std::string received_original_lang;
std::string received_target_lang; std::string received_target_lang;
translate::TranslateErrors::Type error; translate::TranslateErrors::Type error;
ASSERT_TRUE(translate_helper_->GetPageTranslatedResult( ASSERT_TRUE(translate_agent_->GetPageTranslatedResult(
&received_original_lang, &received_target_lang, &error)); &received_original_lang, &received_target_lang, &error));
EXPECT_EQ(original_lang, received_original_lang); EXPECT_EQ(original_lang, received_original_lang);
EXPECT_EQ(new_target_lang, received_target_lang); EXPECT_EQ(new_target_lang, received_target_lang);
...@@ -411,7 +406,7 @@ TEST_F(TranslateHelperBrowserTest, MultipleDifferentTranslations) { ...@@ -411,7 +406,7 @@ TEST_F(TranslateHelperBrowserTest, MultipleDifferentTranslations) {
// Tests that we send the right translate language message for a page and that // Tests that we send the right translate language message for a page and that
// we respect the "no translate" meta-tag. // we respect the "no translate" meta-tag.
TEST_F(TranslateHelperBrowserTest, TranslatablePage) { TEST_F(TranslateAgentBrowserTest, TranslatablePage) {
LoadHTML("<html><body>A random page with random content.</body></html>"); LoadHTML("<html><body>A random page with random content.</body></html>");
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
...@@ -421,8 +416,9 @@ TEST_F(TranslateHelperBrowserTest, TranslatablePage) { ...@@ -421,8 +416,9 @@ TEST_F(TranslateHelperBrowserTest, TranslatablePage) {
fake_translate_driver_.ResetNewPageValues(); fake_translate_driver_.ResetNewPageValues();
// Now the page specifies the META tag to prevent translation. // Now the page specifies the META tag to prevent translation.
LoadHTML("<html><head><meta name=\"google\" value=\"notranslate\"></head>" LoadHTML(
"<body>A random page with random content.</body></html>"); "<html><head><meta name=\"google\" value=\"notranslate\"></head>"
"<body>A random page with random content.</body></html>");
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
ASSERT_TRUE(fake_translate_driver_.called_new_page_); ASSERT_TRUE(fake_translate_driver_.called_new_page_);
...@@ -431,8 +427,9 @@ TEST_F(TranslateHelperBrowserTest, TranslatablePage) { ...@@ -431,8 +427,9 @@ TEST_F(TranslateHelperBrowserTest, TranslatablePage) {
fake_translate_driver_.ResetNewPageValues(); fake_translate_driver_.ResetNewPageValues();
// Try the alternate version of the META tag (content instead of value). // Try the alternate version of the META tag (content instead of value).
LoadHTML("<html><head><meta name=\"google\" content=\"notranslate\"></head>" LoadHTML(
"<body>A random page with random content.</body></html>"); "<html><head><meta name=\"google\" content=\"notranslate\"></head>"
"<body>A random page with random content.</body></html>");
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
ASSERT_TRUE(fake_translate_driver_.called_new_page_); ASSERT_TRUE(fake_translate_driver_.called_new_page_);
...@@ -442,9 +439,10 @@ TEST_F(TranslateHelperBrowserTest, TranslatablePage) { ...@@ -442,9 +439,10 @@ TEST_F(TranslateHelperBrowserTest, TranslatablePage) {
// Tests that the language meta tag takes precedence over the CLD when reporting // Tests that the language meta tag takes precedence over the CLD when reporting
// the page's language. // the page's language.
TEST_F(TranslateHelperBrowserTest, LanguageMetaTag) { TEST_F(TranslateAgentBrowserTest, LanguageMetaTag) {
LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"es\">" LoadHTML(
"</head><body>A random page with random content.</body></html>"); "<html><head><meta http-equiv=\"content-language\" content=\"es\">"
"</head><body>A random page with random content.</body></html>");
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
ASSERT_TRUE(fake_translate_driver_.called_new_page_); ASSERT_TRUE(fake_translate_driver_.called_new_page_);
...@@ -452,9 +450,10 @@ TEST_F(TranslateHelperBrowserTest, LanguageMetaTag) { ...@@ -452,9 +450,10 @@ TEST_F(TranslateHelperBrowserTest, LanguageMetaTag) {
fake_translate_driver_.ResetNewPageValues(); fake_translate_driver_.ResetNewPageValues();
// Makes sure we support multiple languages specified. // Makes sure we support multiple languages specified.
LoadHTML("<html><head><meta http-equiv=\"content-language\" " LoadHTML(
"content=\" fr , es,en \">" "<html><head><meta http-equiv=\"content-language\" "
"</head><body>A random page with random content.</body></html>"); "content=\" fr , es,en \">"
"</head><body>A random page with random content.</body></html>");
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
ASSERT_TRUE(fake_translate_driver_.called_new_page_); ASSERT_TRUE(fake_translate_driver_.called_new_page_);
...@@ -463,18 +462,20 @@ TEST_F(TranslateHelperBrowserTest, LanguageMetaTag) { ...@@ -463,18 +462,20 @@ TEST_F(TranslateHelperBrowserTest, LanguageMetaTag) {
// Tests that the language meta tag works even with non-all-lower-case. // Tests that the language meta tag works even with non-all-lower-case.
// http://code.google.com/p/chromium/issues/detail?id=145689 // http://code.google.com/p/chromium/issues/detail?id=145689
TEST_F(TranslateHelperBrowserTest, LanguageMetaTagCase) { TEST_F(TranslateAgentBrowserTest, LanguageMetaTagCase) {
LoadHTML("<html><head><meta http-equiv=\"Content-Language\" content=\"es\">" LoadHTML(
"</head><body>A random page with random content.</body></html>"); "<html><head><meta http-equiv=\"Content-Language\" content=\"es\">"
"</head><body>A random page with random content.</body></html>");
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
ASSERT_TRUE(fake_translate_driver_.called_new_page_); ASSERT_TRUE(fake_translate_driver_.called_new_page_);
EXPECT_EQ("es", fake_translate_driver_.details_->adopted_language); EXPECT_EQ("es", fake_translate_driver_.details_->adopted_language);
fake_translate_driver_.ResetNewPageValues(); fake_translate_driver_.ResetNewPageValues();
// Makes sure we support multiple languages specified. // Makes sure we support multiple languages specified.
LoadHTML("<html><head><meta http-equiv=\"Content-Language\" " LoadHTML(
"content=\" fr , es,en \">" "<html><head><meta http-equiv=\"Content-Language\" "
"</head><body>A random page with random content.</body></html>"); "content=\" fr , es,en \">"
"</head><body>A random page with random content.</body></html>");
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
ASSERT_TRUE(fake_translate_driver_.called_new_page_); ASSERT_TRUE(fake_translate_driver_.called_new_page_);
EXPECT_EQ("fr", fake_translate_driver_.details_->adopted_language); EXPECT_EQ("fr", fake_translate_driver_.details_->adopted_language);
...@@ -483,25 +484,28 @@ TEST_F(TranslateHelperBrowserTest, LanguageMetaTagCase) { ...@@ -483,25 +484,28 @@ TEST_F(TranslateHelperBrowserTest, LanguageMetaTagCase) {
// Tests that the language meta tag is converted to Chrome standard of dashes // Tests that the language meta tag is converted to Chrome standard of dashes
// instead of underscores and proper capitalization. // instead of underscores and proper capitalization.
// http://code.google.com/p/chromium/issues/detail?id=159487 // http://code.google.com/p/chromium/issues/detail?id=159487
TEST_F(TranslateHelperBrowserTest, LanguageCommonMistakesAreCorrected) { TEST_F(TranslateAgentBrowserTest, LanguageCommonMistakesAreCorrected) {
LoadHTML("<html><head><meta http-equiv='Content-Language' content='EN_us'>" LoadHTML(
"</head><body>A random page with random content.</body></html>"); "<html><head><meta http-equiv='Content-Language' content='EN_us'>"
"</head><body>A random page with random content.</body></html>");
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
ASSERT_TRUE(fake_translate_driver_.called_new_page_); ASSERT_TRUE(fake_translate_driver_.called_new_page_);
EXPECT_EQ("en", fake_translate_driver_.details_->adopted_language); EXPECT_EQ("en", fake_translate_driver_.details_->adopted_language);
fake_translate_driver_.ResetNewPageValues(); fake_translate_driver_.ResetNewPageValues();
LoadHTML("<html><head><meta http-equiv='Content-Language' content='ZH_tw'>" LoadHTML(
"</head><body>A random page with random content.</body></html>"); "<html><head><meta http-equiv='Content-Language' content='ZH_tw'>"
"</head><body>A random page with random content.</body></html>");
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
ASSERT_TRUE(fake_translate_driver_.called_new_page_); ASSERT_TRUE(fake_translate_driver_.called_new_page_);
EXPECT_EQ("zh-TW", fake_translate_driver_.details_->adopted_language); EXPECT_EQ("zh-TW", fake_translate_driver_.details_->adopted_language);
} }
// Tests that a back navigation gets a translate language message. // Tests that a back navigation gets a translate language message.
TEST_F(TranslateHelperBrowserTest, BackToTranslatablePage) { TEST_F(TranslateAgentBrowserTest, BackToTranslatablePage) {
LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"es\">" LoadHTML(
"</head><body>This page is in Spanish.</body></html>"); "<html><head><meta http-equiv=\"content-language\" content=\"es\">"
"</head><body>This page is in Spanish.</body></html>");
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
ASSERT_TRUE(fake_translate_driver_.called_new_page_); ASSERT_TRUE(fake_translate_driver_.called_new_page_);
EXPECT_EQ("es", fake_translate_driver_.details_->adopted_language); EXPECT_EQ("es", fake_translate_driver_.details_->adopted_language);
...@@ -509,8 +513,9 @@ TEST_F(TranslateHelperBrowserTest, BackToTranslatablePage) { ...@@ -509,8 +513,9 @@ TEST_F(TranslateHelperBrowserTest, BackToTranslatablePage) {
content::PageState back_state = GetCurrentPageState(); content::PageState back_state = GetCurrentPageState();
LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"fr\">" LoadHTML(
"</head><body>This page is in French.</body></html>"); "<html><head><meta http-equiv=\"content-language\" content=\"fr\">"
"</head><body>This page is in French.</body></html>");
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
ASSERT_TRUE(fake_translate_driver_.called_new_page_); ASSERT_TRUE(fake_translate_driver_.called_new_page_);
EXPECT_EQ("fr", fake_translate_driver_.details_->adopted_language); EXPECT_EQ("fr", fake_translate_driver_.details_->adopted_language);
......
...@@ -114,7 +114,7 @@ class TranslateScriptBrowserTest : public ChromeRenderViewTest { ...@@ -114,7 +114,7 @@ class TranslateScriptBrowserTest : public ChromeRenderViewTest {
if (result.IsEmpty() || !result->IsNumber()) { if (result.IsEmpty() || !result->IsNumber()) {
NOTREACHED(); NOTREACHED();
// TODO(toyoshim): Return NaN here and the real implementation in // TODO(toyoshim): Return NaN here and the real implementation in
// TranslateHelper::ExecuteScriptAndGetDoubleResult(). // TranslateAgent::ExecuteScriptAndGetDoubleResult().
return 0.0; return 0.0;
} }
return result.As<v8::Number>()->Value(); return result.As<v8::Number>()->Value();
......
...@@ -1401,7 +1401,7 @@ if (!is_android) { ...@@ -1401,7 +1401,7 @@ if (!is_android) {
"../renderer/chrome_render_frame_observer_browsertest.cc", "../renderer/chrome_render_frame_observer_browsertest.cc",
"../renderer/content_settings_agent_impl_browsertest.cc", "../renderer/content_settings_agent_impl_browsertest.cc",
"../renderer/media/cast_session_browsertest.cc", "../renderer/media/cast_session_browsertest.cc",
"../renderer/translate/translate_helper_browsertest.cc", "../renderer/translate/translate_agent_browsertest.cc",
"../renderer/translate/translate_script_browsertest.cc", "../renderer/translate/translate_script_browsertest.cc",
"base/chrome_render_view_test.cc", "base/chrome_render_view_test.cc",
"base/chrome_render_view_test.h", "base/chrome_render_view_test.h",
......
...@@ -126,19 +126,19 @@ void ContentTranslateDriver::TranslatePage(int page_seq_no, ...@@ -126,19 +126,19 @@ void ContentTranslateDriver::TranslatePage(int page_seq_no,
const std::string& translate_script, const std::string& translate_script,
const std::string& source_lang, const std::string& source_lang,
const std::string& target_lang) { const std::string& target_lang) {
auto it = pages_.find(page_seq_no); auto it = translate_agents_.find(page_seq_no);
if (it == pages_.end()) if (it == translate_agents_.end())
return; // This page has navigated away. return; // This page has navigated away.
it->second->Translate( it->second->TranslateFrame(
translate_script, source_lang, target_lang, translate_script, source_lang, target_lang,
base::BindOnce(&ContentTranslateDriver::OnPageTranslated, base::BindOnce(&ContentTranslateDriver::OnPageTranslated,
base::Unretained(this))); base::Unretained(this)));
} }
void ContentTranslateDriver::RevertTranslation(int page_seq_no) { void ContentTranslateDriver::RevertTranslation(int page_seq_no) {
auto it = pages_.find(page_seq_no); auto it = translate_agents_.find(page_seq_no);
if (it == pages_.end()) if (it == translate_agents_.end())
return; // This page has navigated away. return; // This page has navigated away.
it->second->RevertTranslation(); it->second->RevertTranslation();
...@@ -266,7 +266,7 @@ void ContentTranslateDriver::DidFinishNavigation( ...@@ -266,7 +266,7 @@ void ContentTranslateDriver::DidFinishNavigation(
} }
void ContentTranslateDriver::OnPageAway(int page_seq_no) { void ContentTranslateDriver::OnPageAway(int page_seq_no) {
pages_.erase(page_seq_no); translate_agents_.erase(page_seq_no);
} }
void ContentTranslateDriver::AddReceiver( void ContentTranslateDriver::AddReceiver(
...@@ -275,7 +275,7 @@ void ContentTranslateDriver::AddReceiver( ...@@ -275,7 +275,7 @@ void ContentTranslateDriver::AddReceiver(
} }
void ContentTranslateDriver::RegisterPage( void ContentTranslateDriver::RegisterPage(
mojo::PendingRemote<translate::mojom::Page> page, mojo::PendingRemote<translate::mojom::TranslateAgent> translate_agent,
const translate::LanguageDetectionDetails& details, const translate::LanguageDetectionDetails& details,
const bool page_needs_translation) { const bool page_needs_translation) {
// If we have a language histogram (i.e. we're not in incognito), update it // If we have a language histogram (i.e. we're not in incognito), update it
...@@ -283,8 +283,8 @@ void ContentTranslateDriver::RegisterPage( ...@@ -283,8 +283,8 @@ void ContentTranslateDriver::RegisterPage(
if (language_histogram_ && details.is_cld_reliable) if (language_histogram_ && details.is_cld_reliable)
language_histogram_->OnPageVisited(details.cld_language); language_histogram_->OnPageVisited(details.cld_language);
pages_[++next_page_seq_no_].Bind(std::move(page)); translate_agents_[++next_page_seq_no_].Bind(std::move(translate_agent));
pages_[next_page_seq_no_].set_disconnect_handler( translate_agents_[next_page_seq_no_].set_disconnect_handler(
base::BindOnce(&ContentTranslateDriver::OnPageAway, base::BindOnce(&ContentTranslateDriver::OnPageAway,
base::Unretained(this), next_page_seq_no_)); base::Unretained(this), next_page_seq_no_));
translate_manager_->set_current_seq_no(next_page_seq_no_); translate_manager_->set_current_seq_no(next_page_seq_no_);
......
...@@ -117,9 +117,10 @@ class ContentTranslateDriver : public TranslateDriver, ...@@ -117,9 +117,10 @@ class ContentTranslateDriver : public TranslateDriver,
void AddReceiver( void AddReceiver(
mojo::PendingReceiver<translate::mojom::ContentTranslateDriver> receiver); mojo::PendingReceiver<translate::mojom::ContentTranslateDriver> receiver);
// Called when a page has been loaded and can be potentially translated. // Called when a page has been loaded and can be potentially translated.
void RegisterPage(mojo::PendingRemote<translate::mojom::Page> page, void RegisterPage(
const translate::LanguageDetectionDetails& details, mojo::PendingRemote<translate::mojom::TranslateAgent> translate_agent,
bool page_needs_translation) override; const translate::LanguageDetectionDetails& details,
bool page_needs_translation) override;
private: private:
void OnPageAway(int page_seq_no); void OnPageAway(int page_seq_no);
...@@ -136,17 +137,17 @@ class ContentTranslateDriver : public TranslateDriver, ...@@ -136,17 +137,17 @@ class ContentTranslateDriver : public TranslateDriver,
// Records mojo connections with all current alive pages. // Records mojo connections with all current alive pages.
int next_page_seq_no_; int next_page_seq_no_;
// mojo::Remote<Page> is the connection between this driver and a // mojo::Remote<TranslateAgent> is the connection between this driver and a
// TranslateHelper (which are per RenderFrame). Each TranslateHelper has a // TranslateAgent (which are per RenderFrame). Each TranslateAgent has a
// |binding_| member, representing the other end of this pipe. // |binding_| member, representing the other end of this pipe.
std::map<int, mojo::Remote<mojom::Page>> pages_; std::map<int, mojo::Remote<mojom::TranslateAgent>> translate_agents_;
// Histogram to be notified about detected language of every page visited. Not // Histogram to be notified about detected language of every page visited. Not
// owned here. // owned here.
language::UrlLanguageHistogram* const language_histogram_; language::UrlLanguageHistogram* const language_histogram_;
// ContentTranslateDriver is a singleton per web contents but multiple render // ContentTranslateDriver is a singleton per web contents but multiple render
// frames may be contained in a single web contents. TranslateHelpers get the // frames may be contained in a single web contents. TranslateAgents get the
// other end of this receiver in the form of a ContentTranslateDriver. // other end of this receiver in the form of a ContentTranslateDriver.
mojo::ReceiverSet<translate::mojom::ContentTranslateDriver> receivers_; mojo::ReceiverSet<translate::mojom::ContentTranslateDriver> receivers_;
......
...@@ -35,8 +35,11 @@ struct LanguageDetectionDetails { ...@@ -35,8 +35,11 @@ struct LanguageDetectionDetails {
mojo_base.mojom.String16 contents; mojo_base.mojom.String16 contents;
}; };
interface Page { // Handles language translation. This is used by the browser process to
// Requests that the page be translated from |source_lang| to // direct a renderer to translate the language of a frame (or revert a
// previous translation of the contents of a frame).
interface TranslateAgent {
// Requests that the frame be translated from |source_lang| to
// |target_lang|. // |target_lang|.
// //
// If a Translate request is already in progress with a matching // If a Translate request is already in progress with a matching
...@@ -49,18 +52,22 @@ interface Page { ...@@ -49,18 +52,22 @@ interface Page {
// //
// If |cancelled| is |true| all other response values should be // If |cancelled| is |true| all other response values should be
// ignored. // ignored.
Translate(string translate_script, string source_lang, string target_lang) TranslateFrame(string translate_script, string source_lang,
string target_lang)
=> (bool cancelled, string original_lang, string translated_lang, => (bool cancelled, string original_lang, string translated_lang,
TranslateError error); TranslateError error);
// Requests that the page be reverted to its original language with // Requests that the frame be reverted to its original language with
// no translation applied. // no translation applied.
RevertTranslation(); RevertTranslation();
}; };
// Reports when page is ready for translation. This is used by the
// renderer of a main frame to report its detected language to the
// browser process and provides the translation interface back to itself.
interface ContentTranslateDriver { interface ContentTranslateDriver {
// Notification that a new page is ready to translate, // Notification that a new page is ready to translate,
// and the language for it has been determined. // and the language for it has been determined.
RegisterPage(pending_remote<Page> page, LanguageDetectionDetails details, RegisterPage(pending_remote<TranslateAgent> translate_agent,
bool page_needs_translation); LanguageDetectionDetails details, bool page_needs_translation);
}; };
...@@ -6,8 +6,8 @@ import("//build/config/features.gni") ...@@ -6,8 +6,8 @@ import("//build/config/features.gni")
static_library("renderer") { static_library("renderer") {
sources = [ sources = [
"translate_helper.cc", "translate_agent.cc",
"translate_helper.h", "translate_agent.h",
] ]
deps = [ deps = [
...@@ -28,7 +28,7 @@ static_library("renderer") { ...@@ -28,7 +28,7 @@ static_library("renderer") {
source_set("unit_tests") { source_set("unit_tests") {
testonly = true testonly = true
sources = [ "translate_helper_unittest.cc" ] sources = [ "translate_agent_unittest.cc" ]
deps = [ deps = [
":renderer", ":renderer",
"//base", "//base",
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "components/translate/content/renderer/translate_helper.h" #include "components/translate/content/renderer/translate_agent.h"
#include <utility> #include <utility>
...@@ -34,12 +34,12 @@ ...@@ -34,12 +34,12 @@
#include "v8/include/v8.h" #include "v8/include/v8.h"
using blink::WebDocument; using blink::WebDocument;
using blink::WebLanguageDetectionDetails;
using blink::WebLocalFrame; using blink::WebLocalFrame;
using blink::WebScriptSource; using blink::WebScriptSource;
using blink::WebSecurityOrigin; using blink::WebSecurityOrigin;
using blink::WebString; using blink::WebString;
using blink::WebVector; using blink::WebVector;
using blink::WebLanguageDetectionDetails;
namespace { namespace {
...@@ -66,10 +66,10 @@ const char kContentSecurityPolicy[] = "script-src 'self' 'unsafe-eval'"; ...@@ -66,10 +66,10 @@ const char kContentSecurityPolicy[] = "script-src 'self' 'unsafe-eval'";
namespace translate { namespace translate {
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// TranslateHelper, public: // TranslateAgent, public:
TranslateHelper::TranslateHelper(content::RenderFrame* render_frame, TranslateAgent::TranslateAgent(content::RenderFrame* render_frame,
int world_id, int world_id,
const std::string& extension_scheme) const std::string& extension_scheme)
: content::RenderFrameObserver(render_frame), : content::RenderFrameObserver(render_frame),
world_id_(world_id), world_id_(world_id),
extension_scheme_(extension_scheme) { extension_scheme_(extension_scheme) {
...@@ -77,15 +77,14 @@ TranslateHelper::TranslateHelper(content::RenderFrame* render_frame, ...@@ -77,15 +77,14 @@ TranslateHelper::TranslateHelper(content::RenderFrame* render_frame,
blink::TaskType::kInternalTranslation); blink::TaskType::kInternalTranslation);
} }
TranslateHelper::~TranslateHelper() { TranslateAgent::~TranslateAgent() {}
}
void TranslateHelper::PrepareForUrl(const GURL& url) { void TranslateAgent::PrepareForUrl(const GURL& url) {
// Navigated to a new url, reset current page translation. // Navigated to a new url, reset current page translation.
ResetPage(); ResetPage();
} }
void TranslateHelper::PageCaptured(const base::string16& contents) { void TranslateAgent::PageCaptured(const base::string16& contents) {
// Get the document language as set by WebKit from the http-equiv // Get the document language as set by WebKit from the http-equiv
// meta tag for "content-language". This may or may not also // meta tag for "content-language". This may or may not also
// have a value derived from the actual Content-Language HTTP // have a value derived from the actual Content-Language HTTP
...@@ -137,7 +136,7 @@ void TranslateHelper::PageCaptured(const base::string16& contents) { ...@@ -137,7 +136,7 @@ void TranslateHelper::PageCaptured(const base::string16& contents) {
details, !details.has_notranslate && !language.empty()); details, !details.has_notranslate && !language.empty());
} }
void TranslateHelper::CancelPendingTranslation() { void TranslateAgent::CancelPendingTranslation() {
weak_method_factory_.InvalidateWeakPtrs(); weak_method_factory_.InvalidateWeakPtrs();
// Make sure to send the cancelled response back. // Make sure to send the cancelled response back.
if (translate_callback_pending_) { if (translate_callback_pending_) {
...@@ -149,48 +148,49 @@ void TranslateHelper::CancelPendingTranslation() { ...@@ -149,48 +148,49 @@ void TranslateHelper::CancelPendingTranslation() {
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// TranslateHelper, protected: // TranslateAgent, protected:
bool TranslateHelper::IsTranslateLibAvailable() { bool TranslateAgent::IsTranslateLibAvailable() {
return ExecuteScriptAndGetBoolResult( return ExecuteScriptAndGetBoolResult(
"typeof cr != 'undefined' && typeof cr.googleTranslate != 'undefined' && " "typeof cr != 'undefined' && typeof cr.googleTranslate != 'undefined' && "
"typeof cr.googleTranslate.translate == 'function'", false); "typeof cr.googleTranslate.translate == 'function'",
false);
} }
bool TranslateHelper::IsTranslateLibReady() { bool TranslateAgent::IsTranslateLibReady() {
return ExecuteScriptAndGetBoolResult("cr.googleTranslate.libReady", false); return ExecuteScriptAndGetBoolResult("cr.googleTranslate.libReady", false);
} }
bool TranslateHelper::HasTranslationFinished() { bool TranslateAgent::HasTranslationFinished() {
return ExecuteScriptAndGetBoolResult("cr.googleTranslate.finished", true); return ExecuteScriptAndGetBoolResult("cr.googleTranslate.finished", true);
} }
bool TranslateHelper::HasTranslationFailed() { bool TranslateAgent::HasTranslationFailed() {
return ExecuteScriptAndGetBoolResult("cr.googleTranslate.error", true); return ExecuteScriptAndGetBoolResult("cr.googleTranslate.error", true);
} }
int64_t TranslateHelper::GetErrorCode() { int64_t TranslateAgent::GetErrorCode() {
int64_t error_code = int64_t error_code =
ExecuteScriptAndGetIntegerResult("cr.googleTranslate.errorCode"); ExecuteScriptAndGetIntegerResult("cr.googleTranslate.errorCode");
DCHECK_LT(error_code, static_cast<int>(TranslateErrors::TRANSLATE_ERROR_MAX)); DCHECK_LT(error_code, static_cast<int>(TranslateErrors::TRANSLATE_ERROR_MAX));
return error_code; return error_code;
} }
bool TranslateHelper::StartTranslation() { bool TranslateAgent::StartTranslation() {
return ExecuteScriptAndGetBoolResult( return ExecuteScriptAndGetBoolResult(
BuildTranslationScript(source_lang_, target_lang_), false); BuildTranslationScript(source_lang_, target_lang_), false);
} }
std::string TranslateHelper::GetOriginalPageLanguage() { std::string TranslateAgent::GetOriginalPageLanguage() {
return ExecuteScriptAndGetStringResult("cr.googleTranslate.sourceLang"); return ExecuteScriptAndGetStringResult("cr.googleTranslate.sourceLang");
} }
base::TimeDelta TranslateHelper::AdjustDelay(int delayInMs) { base::TimeDelta TranslateAgent::AdjustDelay(int delayInMs) {
// Just converts |delayInMs| without any modification in practical cases. // Just converts |delayInMs| without any modification in practical cases.
// Tests will override this function to return modified value. // Tests will override this function to return modified value.
return base::TimeDelta::FromMilliseconds(delayInMs); return base::TimeDelta::FromMilliseconds(delayInMs);
} }
void TranslateHelper::ExecuteScript(const std::string& script) { void TranslateAgent::ExecuteScript(const std::string& script) {
WebLocalFrame* main_frame = render_frame()->GetWebFrame(); WebLocalFrame* main_frame = render_frame()->GetWebFrame();
if (!main_frame) if (!main_frame)
return; return;
...@@ -199,8 +199,8 @@ void TranslateHelper::ExecuteScript(const std::string& script) { ...@@ -199,8 +199,8 @@ void TranslateHelper::ExecuteScript(const std::string& script) {
main_frame->ExecuteScriptInIsolatedWorld(world_id_, source); main_frame->ExecuteScriptInIsolatedWorld(world_id_, source);
} }
bool TranslateHelper::ExecuteScriptAndGetBoolResult(const std::string& script, bool TranslateAgent::ExecuteScriptAndGetBoolResult(const std::string& script,
bool fallback) { bool fallback) {
WebLocalFrame* main_frame = render_frame()->GetWebFrame(); WebLocalFrame* main_frame = render_frame()->GetWebFrame();
if (!main_frame) if (!main_frame)
return fallback; return fallback;
...@@ -217,7 +217,7 @@ bool TranslateHelper::ExecuteScriptAndGetBoolResult(const std::string& script, ...@@ -217,7 +217,7 @@ bool TranslateHelper::ExecuteScriptAndGetBoolResult(const std::string& script,
return result.As<v8::Boolean>()->Value(); return result.As<v8::Boolean>()->Value();
} }
std::string TranslateHelper::ExecuteScriptAndGetStringResult( std::string TranslateAgent::ExecuteScriptAndGetStringResult(
const std::string& script) { const std::string& script) {
WebLocalFrame* main_frame = render_frame()->GetWebFrame(); WebLocalFrame* main_frame = render_frame()->GetWebFrame();
if (!main_frame) if (!main_frame)
...@@ -240,7 +240,7 @@ std::string TranslateHelper::ExecuteScriptAndGetStringResult( ...@@ -240,7 +240,7 @@ std::string TranslateHelper::ExecuteScriptAndGetStringResult(
return std::string(str.get()); return std::string(str.get());
} }
double TranslateHelper::ExecuteScriptAndGetDoubleResult( double TranslateAgent::ExecuteScriptAndGetDoubleResult(
const std::string& script) { const std::string& script) {
WebLocalFrame* main_frame = render_frame()->GetWebFrame(); WebLocalFrame* main_frame = render_frame()->GetWebFrame();
if (!main_frame) if (!main_frame)
...@@ -258,7 +258,7 @@ double TranslateHelper::ExecuteScriptAndGetDoubleResult( ...@@ -258,7 +258,7 @@ double TranslateHelper::ExecuteScriptAndGetDoubleResult(
return result.As<v8::Number>()->Value(); return result.As<v8::Number>()->Value();
} }
int64_t TranslateHelper::ExecuteScriptAndGetIntegerResult( int64_t TranslateAgent::ExecuteScriptAndGetIntegerResult(
const std::string& script) { const std::string& script) {
WebLocalFrame* main_frame = render_frame()->GetWebFrame(); WebLocalFrame* main_frame = render_frame()->GetWebFrame();
if (!main_frame) if (!main_frame)
...@@ -276,12 +276,11 @@ int64_t TranslateHelper::ExecuteScriptAndGetIntegerResult( ...@@ -276,12 +276,11 @@ int64_t TranslateHelper::ExecuteScriptAndGetIntegerResult(
return result.As<v8::Integer>()->Value(); return result.As<v8::Integer>()->Value();
} }
// mojom::Page implementations. // mojom::TranslateAgent implementations.
void TranslateHelper::Translate( void TranslateAgent::TranslateFrame(const std::string& translate_script,
const std::string& translate_script, const std::string& source_lang,
const std::string& source_lang, const std::string& target_lang,
const std::string& target_lang, TranslateFrameCallback callback) {
TranslateCallback callback) {
WebLocalFrame* main_frame = render_frame()->GetWebFrame(); WebLocalFrame* main_frame = render_frame()->GetWebFrame();
if (!main_frame) { if (!main_frame) {
// Cancelled. // Cancelled.
...@@ -333,7 +332,7 @@ void TranslateHelper::Translate( ...@@ -333,7 +332,7 @@ void TranslateHelper::Translate(
TranslatePageImpl(0); TranslatePageImpl(0);
} }
void TranslateHelper::RevertTranslation() { void TranslateAgent::RevertTranslation() {
if (!IsTranslateLibAvailable()) { if (!IsTranslateLibAvailable()) {
NOTREACHED(); NOTREACHED();
return; return;
...@@ -345,8 +344,8 @@ void TranslateHelper::RevertTranslation() { ...@@ -345,8 +344,8 @@ void TranslateHelper::RevertTranslation() {
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// TranslateHelper, private: // TranslateAgent, private:
void TranslateHelper::CheckTranslateStatus() { void TranslateAgent::CheckTranslateStatus() {
// First check if there was an error. // First check if there was an error.
if (HasTranslationFailed()) { if (HasTranslationFailed()) {
NotifyBrowserTranslationFailed( NotifyBrowserTranslationFailed(
...@@ -389,12 +388,12 @@ void TranslateHelper::CheckTranslateStatus() { ...@@ -389,12 +388,12 @@ void TranslateHelper::CheckTranslateStatus() {
// The translation is still pending, check again later. // The translation is still pending, check again later.
translate_task_runner_->PostDelayedTask( translate_task_runner_->PostDelayedTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&TranslateHelper::CheckTranslateStatus, base::BindOnce(&TranslateAgent::CheckTranslateStatus,
weak_method_factory_.GetWeakPtr()), weak_method_factory_.GetWeakPtr()),
AdjustDelay(kTranslateStatusCheckDelayMs)); AdjustDelay(kTranslateStatusCheckDelayMs));
} }
void TranslateHelper::TranslatePageImpl(int count) { void TranslateAgent::TranslatePageImpl(int count) {
DCHECK_LT(count, kMaxTranslateInitCheckAttempts); DCHECK_LT(count, kMaxTranslateInitCheckAttempts);
if (!IsTranslateLibReady()) { if (!IsTranslateLibReady()) {
// There was an error during initialization of library. // There was an error during initialization of library.
...@@ -413,7 +412,7 @@ void TranslateHelper::TranslatePageImpl(int count) { ...@@ -413,7 +412,7 @@ void TranslateHelper::TranslatePageImpl(int count) {
} }
translate_task_runner_->PostDelayedTask( translate_task_runner_->PostDelayedTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&TranslateHelper::TranslatePageImpl, base::BindOnce(&TranslateAgent::TranslatePageImpl,
weak_method_factory_.GetWeakPtr(), count), weak_method_factory_.GetWeakPtr(), count),
AdjustDelay(count * kTranslateInitCheckDelayMs)); AdjustDelay(count * kTranslateInitCheckDelayMs));
return; return;
...@@ -433,12 +432,12 @@ void TranslateHelper::TranslatePageImpl(int count) { ...@@ -433,12 +432,12 @@ void TranslateHelper::TranslatePageImpl(int count) {
// Check the status of the translation. // Check the status of the translation.
translate_task_runner_->PostDelayedTask( translate_task_runner_->PostDelayedTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&TranslateHelper::CheckTranslateStatus, base::BindOnce(&TranslateAgent::CheckTranslateStatus,
weak_method_factory_.GetWeakPtr()), weak_method_factory_.GetWeakPtr()),
AdjustDelay(kTranslateStatusCheckDelayMs)); AdjustDelay(kTranslateStatusCheckDelayMs));
} }
void TranslateHelper::NotifyBrowserTranslationFailed( void TranslateAgent::NotifyBrowserTranslationFailed(
TranslateErrors::Type error) { TranslateErrors::Type error) {
DCHECK(translate_callback_pending_); DCHECK(translate_callback_pending_);
// Notify the browser there was an error. // Notify the browser there was an error.
...@@ -447,7 +446,7 @@ void TranslateHelper::NotifyBrowserTranslationFailed( ...@@ -447,7 +446,7 @@ void TranslateHelper::NotifyBrowserTranslationFailed(
} }
const mojo::Remote<mojom::ContentTranslateDriver>& const mojo::Remote<mojom::ContentTranslateDriver>&
TranslateHelper::GetTranslateHandler() { TranslateAgent::GetTranslateHandler() {
if (!translate_handler_) { if (!translate_handler_) {
render_frame()->GetBrowserInterfaceBroker()->GetInterface( render_frame()->GetBrowserInterfaceBroker()->GetInterface(
translate_handler_.BindNewPipeAndPassReceiver()); translate_handler_.BindNewPipeAndPassReceiver());
...@@ -456,18 +455,18 @@ TranslateHelper::GetTranslateHandler() { ...@@ -456,18 +455,18 @@ TranslateHelper::GetTranslateHandler() {
return translate_handler_; return translate_handler_;
} }
void TranslateHelper::ResetPage() { void TranslateAgent::ResetPage() {
receiver_.reset(); receiver_.reset();
translate_callback_pending_.Reset(); translate_callback_pending_.Reset();
CancelPendingTranslation(); CancelPendingTranslation();
} }
void TranslateHelper::OnDestruct() { void TranslateAgent::OnDestruct() {
delete this; delete this;
} }
/* static */ /* static */
std::string TranslateHelper::BuildTranslationScript( std::string TranslateAgent::BuildTranslationScript(
const std::string& source_lang, const std::string& source_lang,
const std::string& target_lang) { const std::string& target_lang) {
return "cr.googleTranslate.translate(" + return "cr.googleTranslate.translate(" +
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef COMPONENTS_TRANSLATE_CONTENT_RENDERER_TRANSLATE_HELPER_H_ #ifndef COMPONENTS_TRANSLATE_CONTENT_RENDERER_TRANSLATE_AGENT_H_
#define COMPONENTS_TRANSLATE_CONTENT_RENDERER_TRANSLATE_HELPER_H_ #define COMPONENTS_TRANSLATE_CONTENT_RENDERER_TRANSLATE_AGENT_H_
#include <memory> #include <memory>
#include <string> #include <string>
...@@ -27,14 +27,14 @@ class WebLocalFrame; ...@@ -27,14 +27,14 @@ class WebLocalFrame;
namespace translate { namespace translate {
// This class deals with page translation. // This class deals with page translation.
// There is one TranslateHelper per RenderView. // There is one TranslateAgent per RenderView.
class TranslateHelper : public content::RenderFrameObserver, class TranslateAgent : public content::RenderFrameObserver,
public mojom::Page { public mojom::TranslateAgent {
public: public:
TranslateHelper(content::RenderFrame* render_frame, TranslateAgent(content::RenderFrame* render_frame,
int world_id, int world_id,
const std::string& extension_scheme); const std::string& extension_scheme);
~TranslateHelper() override; ~TranslateAgent() override;
// Informs us that the page's text has been extracted. // Informs us that the page's text has been extracted.
void PageCaptured(const base::string16& contents); void PageCaptured(const base::string16& contents);
...@@ -44,11 +44,11 @@ class TranslateHelper : public content::RenderFrameObserver, ...@@ -44,11 +44,11 @@ class TranslateHelper : public content::RenderFrameObserver,
// this URL loads, this is the time to prepare for it. // this URL loads, this is the time to prepare for it.
void PrepareForUrl(const GURL& url); void PrepareForUrl(const GURL& url);
// mojom::Page implementation. // mojom::TranslateAgent implementation.
void Translate(const std::string& translate_script, void TranslateFrame(const std::string& translate_script,
const std::string& source_lang, const std::string& source_lang,
const std::string& target_lang, const std::string& target_lang,
TranslateCallback callback) override; TranslateFrameCallback callback) override;
void RevertTranslation() override; void RevertTranslation() override;
protected: protected:
...@@ -109,7 +109,7 @@ class TranslateHelper : public content::RenderFrameObserver, ...@@ -109,7 +109,7 @@ class TranslateHelper : public content::RenderFrameObserver,
virtual int64_t ExecuteScriptAndGetIntegerResult(const std::string& script); virtual int64_t ExecuteScriptAndGetIntegerResult(const std::string& script);
private: private:
FRIEND_TEST_ALL_PREFIXES(TranslateHelperTest, TestBuildTranslationScript); FRIEND_TEST_ALL_PREFIXES(TranslateAgentTest, TestBuildTranslationScript);
// Converts language code to the one used in server supporting list. // Converts language code to the one used in server supporting list.
static void ConvertLanguageCodeSynonym(std::string* code); static void ConvertLanguageCodeSynonym(std::string* code);
...@@ -145,12 +145,12 @@ class TranslateHelper : public content::RenderFrameObserver, ...@@ -145,12 +145,12 @@ class TranslateHelper : public content::RenderFrameObserver,
// with |error|. // with |error|.
void NotifyBrowserTranslationFailed(TranslateErrors::Type error); void NotifyBrowserTranslationFailed(TranslateErrors::Type error);
// Convenience method to access the main frame. Can return NULL, typically // Convenience method to access the main frame. Can return nullptr, typically
// if the page is being closed. // if the page is being closed.
blink::WebLocalFrame* GetMainFrame(); blink::WebLocalFrame* GetMainFrame();
// The states associated with the current translation. // The states associated with the current translation.
TranslateCallback translate_callback_pending_; TranslateFrameCallback translate_callback_pending_;
std::string source_lang_; std::string source_lang_;
std::string target_lang_; std::string target_lang_;
...@@ -174,14 +174,14 @@ class TranslateHelper : public content::RenderFrameObserver, ...@@ -174,14 +174,14 @@ class TranslateHelper : public content::RenderFrameObserver,
// Mojo interface). // Mojo interface).
mojo::Remote<mojom::ContentTranslateDriver> translate_handler_; mojo::Remote<mojom::ContentTranslateDriver> translate_handler_;
mojo::Receiver<mojom::Page> receiver_{this}; mojo::Receiver<mojom::TranslateAgent> receiver_{this};
// Method factory used to make calls to TranslatePageImpl. // Method factory used to make calls to TranslatePageImpl.
base::WeakPtrFactory<TranslateHelper> weak_method_factory_{this}; base::WeakPtrFactory<TranslateAgent> weak_method_factory_{this};
DISALLOW_COPY_AND_ASSIGN(TranslateHelper); DISALLOW_COPY_AND_ASSIGN(TranslateAgent);
}; };
} // namespace translate } // namespace translate
#endif // COMPONENTS_TRANSLATE_CONTENT_RENDERER_TRANSLATE_HELPER_H_ #endif // COMPONENTS_TRANSLATE_CONTENT_RENDERER_TRANSLATE_AGENT_H_
...@@ -2,27 +2,27 @@ ...@@ -2,27 +2,27 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "components/translate/content/renderer/translate_helper.h" #include "components/translate/content/renderer/translate_agent.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace translate { namespace translate {
class TranslateHelperTest : public testing::Test {}; class TranslateAgentTest : public testing::Test {};
TEST_F(TranslateHelperTest, TestBuildTranslationScript) { TEST_F(TranslateAgentTest, TestBuildTranslationScript) {
// Test expected cases. // Test expected cases.
EXPECT_EQ(TranslateHelper::BuildTranslationScript("en", "es"), EXPECT_EQ(TranslateAgent::BuildTranslationScript("en", "es"),
"cr.googleTranslate.translate(\"en\",\"es\")"); "cr.googleTranslate.translate(\"en\",\"es\")");
EXPECT_EQ(TranslateHelper::BuildTranslationScript("en-US", "zh-TW"), EXPECT_EQ(TranslateAgent::BuildTranslationScript("en-US", "zh-TW"),
"cr.googleTranslate.translate(\"en-US\",\"zh-TW\")"); "cr.googleTranslate.translate(\"en-US\",\"zh-TW\")");
// Test that quote gets quoted. // Test that quote gets quoted.
EXPECT_EQ(TranslateHelper::BuildTranslationScript("en\"", "es"), EXPECT_EQ(TranslateAgent::BuildTranslationScript("en\"", "es"),
"cr.googleTranslate.translate(\"en\\\"\",\"es\")"); "cr.googleTranslate.translate(\"en\\\"\",\"es\")");
// Test that < gets quoted. // Test that < gets quoted.
EXPECT_EQ(TranslateHelper::BuildTranslationScript("en<", "es"), EXPECT_EQ(TranslateAgent::BuildTranslationScript("en<", "es"),
"cr.googleTranslate.translate(\"en\\u003C\",\"es\")"); "cr.googleTranslate.translate(\"en\\u003C\",\"es\")");
} }
......
...@@ -30,7 +30,7 @@ extern const char kTranslateLanguageDetectionConflict[]; ...@@ -30,7 +30,7 @@ extern const char kTranslateLanguageDetectionConflict[];
} // namespace metrics_internal } // namespace metrics_internal
// A page may provide a Content-Language HTTP header or a META tag. // A page may provide a Content-Language HTTP header or a META tag.
// TranslateHelper checks if a server provides a valid Content-Language. // TranslateAgent checks if a server provides a valid Content-Language.
enum LanguageCheckType { enum LanguageCheckType {
LANGUAGE_NOT_PROVIDED, LANGUAGE_NOT_PROVIDED,
LANGUAGE_VALID, LANGUAGE_VALID,
...@@ -38,7 +38,7 @@ enum LanguageCheckType { ...@@ -38,7 +38,7 @@ enum LanguageCheckType {
LANGUAGE_MAX, LANGUAGE_MAX,
}; };
// When a valid Content-Language is provided, TranslateHelper checks if a // When a valid Content-Language is provided, TranslateAgent checks if a
// server provided Content-Language matches to a language CLD determined. // server provided Content-Language matches to a language CLD determined.
enum LanguageVerificationType { enum LanguageVerificationType {
LANGUAGE_VERIFICATION_CLD_DISABLED, // obsolete LANGUAGE_VERIFICATION_CLD_DISABLED, // obsolete
...@@ -59,14 +59,14 @@ enum SchemeType { ...@@ -59,14 +59,14 @@ enum SchemeType {
SCHEME_MAX, SCHEME_MAX,
}; };
// Called after TranslateHelper verifies a server providing Content-Language // Called after TranslateAgent verifies a server providing Content-Language
// header. |provided_code| contains a Content-Language header value which a // header. |provided_code| contains a Content-Language header value which a
// server provides. It can be empty string when a server doesn't provide it. // server provides. It can be empty string when a server doesn't provide it.
// |revised_code| is a value modified by format error corrector. // |revised_code| is a value modified by format error corrector.
void ReportContentLanguage(const std::string& provided_code, void ReportContentLanguage(const std::string& provided_code,
const std::string& revised_code); const std::string& revised_code);
// Called after TranslateHelper verifies a page providing html lang attribute. // Called after TranslateAgent verifies a page providing html lang attribute.
// |provided_code| contains a html lang attribute which a page provides. It can // |provided_code| contains a html lang attribute which a page provides. It can
// be empty string when a page doesn't provide it. |revised_code| is a value // be empty string when a page doesn't provide it. |revised_code| is a value
// modified by format error corrector. // modified by format error corrector.
......
...@@ -113,7 +113,7 @@ class IOSTranslateDriver ...@@ -113,7 +113,7 @@ class IOSTranslateDriver
// An ever-increasing sequence number of the current page, used to match up // An ever-increasing sequence number of the current page, used to match up
// translation requests with responses. // translation requests with responses.
// This matches the similar field in TranslateHelper in the renderer on other // This matches the similar field in TranslateAgent in the renderer on other
// platforms. // platforms.
int page_seq_no_; int page_seq_no_;
......
...@@ -14,8 +14,8 @@ ...@@ -14,8 +14,8 @@
@class NSString; @class NSString;
// Manager for the injection of the Translate JavaScript. // Manager for the injection of the Translate JavaScript.
// Replicates functionality from TranslateHelper in // Replicates functionality from TranslateAgent in
// chrome/renderer/translate/translate_helper.cc. // chrome/renderer/translate/translate_agent.cc.
// JsTranslateManager injects the script in the page and calls it, but is not // JsTranslateManager injects the script in the page and calls it, but is not
// responsible for loading it or caching it. // responsible for loading it or caching it.
@interface JsTranslateManager : CRWJSInjectionManager @interface JsTranslateManager : CRWJSInjectionManager
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
@property(nonatomic, copy) NSString* script; @property(nonatomic, copy) NSString* script;
// Starts translation of the page from |source| language to |target| language. // Starts translation of the page from |source| language to |target| language.
// Equivalent to TranslateHelper::StartTranslation(). // Equivalent to TranslateAgent::StartTranslation().
- (void)startTranslationFrom:(const std::string&)source - (void)startTranslationFrom:(const std::string&)source
to:(const std::string&)target; to:(const std::string&)target;
......
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