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

Unified Diff: chrome/renderer/translate/translate_helper_browsertest.cc

Issue 2143383002: [Translate] Migrate IPCs to Mojo interfaces. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix trybots Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/chrome_render_frame_observer_browsertest.cc ('k') | components/translate.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/translate/translate_helper_browsertest.cc
diff --git a/chrome/renderer/translate/translate_helper_browsertest.cc b/chrome/renderer/translate/translate_helper_browsertest.cc
index 501b3d99dbf45bea49108080a56cf74028a95074..dca087f426265cfdfe3a6b5c7c205f9f6b4f8620 100644
--- a/chrome/renderer/translate/translate_helper_browsertest.cc
+++ b/chrome/renderer/translate/translate_helper_browsertest.cc
@@ -9,12 +9,14 @@
#include "base/time/time.h"
#include "chrome/common/chrome_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/common/translate.mojom.h"
#include "components/translate/content/renderer/translate_helper.h"
#include "components/translate/core/common/translate_constants.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_view.h"
#include "extensions/common/constants.h"
+#include "mojo/public/cpp/bindings/binding_set.h"
+#include "services/shell/public/cpp/interface_provider.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/web/WebLocalFrame.h"
@@ -23,6 +25,46 @@ using testing::AtLeast;
using testing::Return;
using testing::_;
+namespace {
+
+class FakeContentTranslateDriver
+ : public translate::mojom::ContentTranslateDriver {
+ public:
+ FakeContentTranslateDriver()
+ : called_new_page_(false), page_needs_translation_(false) {}
+ ~FakeContentTranslateDriver() override {}
+
+ void BindHandle(mojo::ScopedMessagePipeHandle handle) {
+ bindings_.AddBinding(
+ this, mojo::MakeRequest<translate::mojom::ContentTranslateDriver>(
+ std::move(handle)));
+ }
+
+ // translate::mojom::ContentTranslateDriver implementation.
+ void RegisterPage(translate::mojom::PagePtr page,
+ const translate::LanguageDetectionDetails& details,
+ bool page_needs_translation) override {
+ called_new_page_ = true;
+ details_ = details;
+ page_needs_translation_ = page_needs_translation;
+ }
+
+ void ResetNewPageValues() {
+ called_new_page_ = false;
+ details_ = base::nullopt;
+ page_needs_translation_ = false;
+ }
+
+ bool called_new_page_;
+ base::Optional<translate::LanguageDetectionDetails> details_;
+ bool page_needs_translation_;
+
+ private:
+ mojo::BindingSet<translate::mojom::ContentTranslateDriver> bindings_;
+};
+
+} // namespace
+
class TestTranslateHelper : public translate::TranslateHelper {
public:
explicit TestTranslateHelper(content::RenderFrame* render_frame)
@@ -40,7 +82,31 @@ class TestTranslateHelper : public translate::TranslateHelper {
void TranslatePage(const std::string& source_lang,
const std::string& target_lang,
const std::string& translate_script) {
- OnTranslatePage(0, translate_script, source_lang, target_lang);
+ // Reset result values firstly.
+ page_translated_ = false;
+ trans_result_cancelled_ = false;
+ trans_result_original_lang_ = base::nullopt;
+ trans_result_translated_lang_ = base::nullopt;
+ trans_result_error_type_ = translate::TranslateErrors::NONE;
+
+ // Will get new result values via OnPageTranslated.
+ Translate(translate_script, source_lang, target_lang,
+ base::Bind(&TestTranslateHelper::OnPageTranslated,
+ base::Unretained(this)));
+ }
+
+ bool GetPageTranslatedResult(std::string* original_lang,
+ std::string* target_lang,
+ translate::TranslateErrors::Type* error) {
+ if (!page_translated_)
+ return false;
+ if (original_lang)
+ *original_lang = *trans_result_original_lang_;
+ if (target_lang)
+ *target_lang = *trans_result_translated_lang_;
+ if (error)
+ *error = trans_result_error_type_;
+ return true;
}
MOCK_METHOD0(IsTranslateLibAvailable, bool());
@@ -56,6 +122,23 @@ class TestTranslateHelper : public translate::TranslateHelper {
MOCK_METHOD1(ExecuteScriptAndGetDoubleResult, double(const std::string&));
private:
+ void OnPageTranslated(bool cancelled,
+ const std::string& original_lang,
+ const std::string& translated_lang,
+ translate::TranslateErrors::Type error_type) {
+ page_translated_ = true;
+ trans_result_cancelled_ = cancelled;
+ trans_result_original_lang_ = original_lang;
+ trans_result_translated_lang_ = translated_lang;
+ trans_result_error_type_ = error_type;
+ }
+
+ bool page_translated_;
+ bool trans_result_cancelled_;
+ base::Optional<std::string> trans_result_original_lang_;
+ base::Optional<std::string> trans_result_translated_lang_;
+ translate::TranslateErrors::Type trans_result_error_type_;
+
DISALLOW_COPY_AND_ASSIGN(TestTranslateHelper);
};
@@ -67,6 +150,14 @@ class TranslateHelperBrowserTest : public ChromeRenderViewTest {
void SetUp() override {
ChromeRenderViewTest::SetUp();
translate_helper_ = new TestTranslateHelper(view_->GetMainRenderFrame());
+
+ shell::InterfaceProvider* remote_interfaces =
+ view_->GetMainRenderFrame()->GetRemoteInterfaces();
+ shell::InterfaceProvider::TestApi test_api(remote_interfaces);
+ test_api.SetBinderForName(
+ translate::mojom::ContentTranslateDriver::Name_,
+ base::Bind(&FakeContentTranslateDriver::BindHandle,
+ base::Unretained(&fake_translate_driver_)));
}
void TearDown() override {
@@ -74,27 +165,8 @@ class TranslateHelperBrowserTest : public ChromeRenderViewTest {
ChromeRenderViewTest::TearDown();
}
- bool GetPageTranslatedMessage(std::string* original_lang,
- std::string* target_lang,
- translate::TranslateErrors::Type* error) {
- const IPC::Message* message =
- render_thread_->sink().GetUniqueMessageMatching(
- ChromeFrameHostMsg_PageTranslated::ID);
- if (!message)
- return false;
- std::tuple<std::string, std::string, translate::TranslateErrors::Type>
- translate_param;
- ChromeFrameHostMsg_PageTranslated::Read(message, &translate_param);
- if (original_lang)
- *original_lang = std::get<0>(translate_param);
- if (target_lang)
- *target_lang = std::get<1>(translate_param);
- if (error)
- *error = std::get<2>(translate_param);
- return true;
- }
-
TestTranslateHelper* translate_helper_;
+ FakeContentTranslateDriver fake_translate_driver_;
private:
DISALLOW_COPY_AND_ASSIGN(TranslateHelperBrowserTest);
@@ -118,7 +190,7 @@ TEST_F(TranslateHelperBrowserTest, TranslateLibNeverReady) {
base::RunLoop().RunUntilIdle();
translate::TranslateErrors::Type error;
- ASSERT_TRUE(GetPageTranslatedMessage(NULL, NULL, &error));
+ ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(NULL, NULL, &error));
EXPECT_EQ(translate::TranslateErrors::INITIALIZATION_ERROR, error);
}
@@ -157,9 +229,8 @@ TEST_F(TranslateHelperBrowserTest, TranslateSuccess) {
std::string received_original_lang;
std::string received_target_lang;
translate::TranslateErrors::Type error;
- ASSERT_TRUE(GetPageTranslatedMessage(&received_original_lang,
- &received_target_lang,
- &error));
+ ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(
+ &received_original_lang, &received_target_lang, &error));
EXPECT_EQ(original_lang, received_original_lang);
EXPECT_EQ(target_lang, received_target_lang);
EXPECT_EQ(translate::TranslateErrors::NONE, error);
@@ -198,7 +269,7 @@ TEST_F(TranslateHelperBrowserTest, TranslateFailure) {
base::RunLoop().RunUntilIdle();
translate::TranslateErrors::Type error;
- ASSERT_TRUE(GetPageTranslatedMessage(NULL, NULL, &error));
+ ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(NULL, NULL, &error));
EXPECT_EQ(translate::TranslateErrors::TRANSLATION_ERROR, error);
}
@@ -236,7 +307,8 @@ TEST_F(TranslateHelperBrowserTest, UndefinedSourceLang) {
translate::TranslateErrors::Type error;
std::string original_lang;
std::string target_lang;
- ASSERT_TRUE(GetPageTranslatedMessage(&original_lang, &target_lang, &error));
+ ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(&original_lang,
+ &target_lang, &error));
EXPECT_EQ("de", original_lang);
EXPECT_EQ("fr", target_lang);
EXPECT_EQ(translate::TranslateErrors::NONE, error);
@@ -275,9 +347,8 @@ TEST_F(TranslateHelperBrowserTest, MultipleSimilarTranslations) {
std::string received_original_lang;
std::string received_target_lang;
translate::TranslateErrors::Type error;
- ASSERT_TRUE(GetPageTranslatedMessage(&received_original_lang,
- &received_target_lang,
- &error));
+ ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(
+ &received_original_lang, &received_target_lang, &error));
EXPECT_EQ(original_lang, received_original_lang);
EXPECT_EQ(target_lang, received_target_lang);
EXPECT_EQ(translate::TranslateErrors::NONE, error);
@@ -313,9 +384,8 @@ TEST_F(TranslateHelperBrowserTest, MultipleDifferentTranslations) {
std::string received_original_lang;
std::string received_target_lang;
translate::TranslateErrors::Type error;
- ASSERT_TRUE(GetPageTranslatedMessage(&received_original_lang,
- &received_target_lang,
- &error));
+ ASSERT_TRUE(translate_helper_->GetPageTranslatedResult(
+ &received_original_lang, &received_target_lang, &error));
EXPECT_EQ(original_lang, received_original_lang);
EXPECT_EQ(new_target_lang, received_target_lang);
EXPECT_EQ(translate::TranslateErrors::NONE, error);
@@ -323,144 +393,117 @@ TEST_F(TranslateHelperBrowserTest, MultipleDifferentTranslations) {
// Tests that we send the right translate language message for a page and that
// we respect the "no translate" meta-tag.
-TEST_F(ChromeRenderViewTest, TranslatablePage) {
+TEST_F(TranslateHelperBrowserTest, TranslatablePage) {
LoadHTML("<html><body>A random page with random content.</body></html>");
- const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching(
- ChromeFrameHostMsg_TranslateLanguageDetermined::ID);
- ASSERT_NE(static_cast<IPC::Message*>(NULL), message);
- ChromeFrameHostMsg_TranslateLanguageDetermined::Param params;
- ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
- EXPECT_TRUE(std::get<1>(params)) << "Page should be translatable.";
- render_thread_->sink().ClearMessages();
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(fake_translate_driver_.called_new_page_);
+ EXPECT_TRUE(fake_translate_driver_.page_needs_translation_)
+ << "Page should be translatable.";
+ fake_translate_driver_.ResetNewPageValues();
// Now the page specifies the META tag to prevent translation.
LoadHTML("<html><head><meta name=\"google\" value=\"notranslate\"></head>"
"<body>A random page with random content.</body></html>");
- message = render_thread_->sink().GetUniqueMessageMatching(
- ChromeFrameHostMsg_TranslateLanguageDetermined::ID);
- ASSERT_NE(static_cast<IPC::Message*>(NULL), message);
- ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
- EXPECT_FALSE(std::get<1>(params)) << "Page should not be translatable.";
- render_thread_->sink().ClearMessages();
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(fake_translate_driver_.called_new_page_);
+ EXPECT_FALSE(fake_translate_driver_.page_needs_translation_)
+ << "Page should not be translatable.";
+ fake_translate_driver_.ResetNewPageValues();
// Try the alternate version of the META tag (content instead of value).
LoadHTML("<html><head><meta name=\"google\" content=\"notranslate\"></head>"
"<body>A random page with random content.</body></html>");
- message = render_thread_->sink().GetUniqueMessageMatching(
- ChromeFrameHostMsg_TranslateLanguageDetermined::ID);
- ASSERT_NE(static_cast<IPC::Message*>(NULL), message);
- ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
- EXPECT_FALSE(std::get<1>(params)) << "Page should not be translatable.";
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(fake_translate_driver_.called_new_page_);
+ EXPECT_FALSE(fake_translate_driver_.page_needs_translation_)
+ << "Page should not be translatable.";
}
// Tests that the language meta tag takes precedence over the CLD when reporting
// the page's language.
-TEST_F(ChromeRenderViewTest, LanguageMetaTag) {
+TEST_F(TranslateHelperBrowserTest, LanguageMetaTag) {
LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"es\">"
"</head><body>A random page with random content.</body></html>");
- const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching(
- ChromeFrameHostMsg_TranslateLanguageDetermined::ID);
- ASSERT_NE(static_cast<IPC::Message*>(NULL), message);
- ChromeFrameHostMsg_TranslateLanguageDetermined::Param params;
- ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
- EXPECT_EQ("es", std::get<0>(params).adopted_language);
- render_thread_->sink().ClearMessages();
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(fake_translate_driver_.called_new_page_);
+ EXPECT_EQ("es", fake_translate_driver_.details_->adopted_language);
+ fake_translate_driver_.ResetNewPageValues();
// Makes sure we support multiple languages specified.
LoadHTML("<html><head><meta http-equiv=\"content-language\" "
"content=\" fr , es,en \">"
"</head><body>A random page with random content.</body></html>");
- message = render_thread_->sink().GetUniqueMessageMatching(
- ChromeFrameHostMsg_TranslateLanguageDetermined::ID);
- ASSERT_NE(static_cast<IPC::Message*>(NULL), message);
- ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
- EXPECT_EQ("fr", std::get<0>(params).adopted_language);
+
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(fake_translate_driver_.called_new_page_);
+ EXPECT_EQ("fr", fake_translate_driver_.details_->adopted_language);
}
// Tests that the language meta tag works even with non-all-lower-case.
// http://code.google.com/p/chromium/issues/detail?id=145689
-TEST_F(ChromeRenderViewTest, LanguageMetaTagCase) {
+TEST_F(TranslateHelperBrowserTest, LanguageMetaTagCase) {
LoadHTML("<html><head><meta http-equiv=\"Content-Language\" content=\"es\">"
"</head><body>A random page with random content.</body></html>");
- const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching(
- ChromeFrameHostMsg_TranslateLanguageDetermined::ID);
- ASSERT_NE(static_cast<IPC::Message*>(NULL), message);
- ChromeFrameHostMsg_TranslateLanguageDetermined::Param params;
- ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
- EXPECT_EQ("es", std::get<0>(params).adopted_language);
- render_thread_->sink().ClearMessages();
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(fake_translate_driver_.called_new_page_);
+ EXPECT_EQ("es", fake_translate_driver_.details_->adopted_language);
+ fake_translate_driver_.ResetNewPageValues();
// Makes sure we support multiple languages specified.
LoadHTML("<html><head><meta http-equiv=\"Content-Language\" "
"content=\" fr , es,en \">"
"</head><body>A random page with random content.</body></html>");
- message = render_thread_->sink().GetUniqueMessageMatching(
- ChromeFrameHostMsg_TranslateLanguageDetermined::ID);
- ASSERT_NE(static_cast<IPC::Message*>(NULL), message);
- ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
- EXPECT_EQ("fr", std::get<0>(params).adopted_language);
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(fake_translate_driver_.called_new_page_);
+ EXPECT_EQ("fr", fake_translate_driver_.details_->adopted_language);
}
// Tests that the language meta tag is converted to Chrome standard of dashes
// instead of underscores and proper capitalization.
// http://code.google.com/p/chromium/issues/detail?id=159487
-TEST_F(ChromeRenderViewTest, LanguageCommonMistakesAreCorrected) {
+TEST_F(TranslateHelperBrowserTest, LanguageCommonMistakesAreCorrected) {
LoadHTML("<html><head><meta http-equiv='Content-Language' content='EN_us'>"
"</head><body>A random page with random content.</body></html>");
- const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching(
- ChromeFrameHostMsg_TranslateLanguageDetermined::ID);
- ASSERT_NE(static_cast<IPC::Message*>(NULL), message);
- ChromeFrameHostMsg_TranslateLanguageDetermined::Param params;
- ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
- EXPECT_EQ("en", std::get<0>(params).adopted_language);
- render_thread_->sink().ClearMessages();
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(fake_translate_driver_.called_new_page_);
+ EXPECT_EQ("en", fake_translate_driver_.details_->adopted_language);
+ fake_translate_driver_.ResetNewPageValues();
LoadHTML("<html><head><meta http-equiv='Content-Language' content='ZH_tw'>"
"</head><body>A random page with random content.</body></html>");
- message = render_thread_->sink().GetUniqueMessageMatching(
- ChromeFrameHostMsg_TranslateLanguageDetermined::ID);
- ASSERT_NE(static_cast<IPC::Message*>(NULL), message);
- ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
- EXPECT_EQ("zh-TW", std::get<0>(params).adopted_language);
- render_thread_->sink().ClearMessages();
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(fake_translate_driver_.called_new_page_);
+ EXPECT_EQ("zh-TW", fake_translate_driver_.details_->adopted_language);
}
// Tests that a back navigation gets a translate language message.
-TEST_F(ChromeRenderViewTest, BackToTranslatablePage) {
+TEST_F(TranslateHelperBrowserTest, BackToTranslatablePage) {
LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"zh\">"
"</head><body>This page is in Chinese.</body></html>");
- const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching(
- ChromeFrameHostMsg_TranslateLanguageDetermined::ID);
- ASSERT_NE(static_cast<IPC::Message*>(NULL), message);
- ChromeFrameHostMsg_TranslateLanguageDetermined::Param params;
- ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
- EXPECT_EQ("zh", std::get<0>(params).adopted_language);
- render_thread_->sink().ClearMessages();
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(fake_translate_driver_.called_new_page_);
+ EXPECT_EQ("zh", fake_translate_driver_.details_->adopted_language);
+ fake_translate_driver_.ResetNewPageValues();
content::PageState back_state = GetCurrentPageState();
LoadHTML("<html><head><meta http-equiv=\"content-language\" content=\"fr\">"
"</head><body>This page is in French.</body></html>");
- message = render_thread_->sink().GetUniqueMessageMatching(
- ChromeFrameHostMsg_TranslateLanguageDetermined::ID);
- ASSERT_NE(static_cast<IPC::Message*>(NULL), message);
- ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
- EXPECT_EQ("fr", std::get<0>(params).adopted_language);
- render_thread_->sink().ClearMessages();
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(fake_translate_driver_.called_new_page_);
+ EXPECT_EQ("fr", fake_translate_driver_.details_->adopted_language);
+ fake_translate_driver_.ResetNewPageValues();
GoBack(GURL("data:text/html;charset=utf-8,<html><head>"
"<meta http-equiv=\"content-language\" content=\"zh\">"
"</head><body>This page is in Chinese.</body></html>"),
back_state);
- message = render_thread_->sink().GetUniqueMessageMatching(
- ChromeFrameHostMsg_TranslateLanguageDetermined::ID);
- ASSERT_NE(static_cast<IPC::Message*>(NULL), message);
- ChromeFrameHostMsg_TranslateLanguageDetermined::Read(message, &params);
- EXPECT_EQ("zh", std::get<0>(params).adopted_language);
- render_thread_->sink().ClearMessages();
+ base::RunLoop().RunUntilIdle();
+ ASSERT_TRUE(fake_translate_driver_.called_new_page_);
+ EXPECT_EQ("zh", fake_translate_driver_.details_->adopted_language);
}
« no previous file with comments | « chrome/renderer/chrome_render_frame_observer_browsertest.cc ('k') | components/translate.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698