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

Unified Diff: chrome/browser/translate/translate_manager_render_view_host_unittest.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
Index: chrome/browser/translate/translate_manager_render_view_host_unittest.cc
diff --git a/chrome/browser/translate/translate_manager_render_view_host_unittest.cc b/chrome/browser/translate/translate_manager_render_view_host_unittest.cc
index db00e351f5aa4a82c3ba5bec64ed9ccd1895239c..15411865974a221da6896ad94d5a505f2b962fac 100644
--- a/chrome/browser/translate/translate_manager_render_view_host_unittest.cc
+++ b/chrome/browser/translate/translate_manager_render_view_host_unittest.cc
@@ -36,7 +36,7 @@
#include "components/prefs/pref_change_registrar.h"
#include "components/prefs/pref_service.h"
#include "components/translate/content/browser/content_translate_driver.h"
-#include "components/translate/content/common/translate_messages.h"
+#include "components/translate/content/common/translate.mojom.h"
#include "components/translate/core/browser/translate_accept_languages.h"
#include "components/translate/core/browser/translate_download_manager.h"
#include "components/translate/core/browser/translate_language_list.h"
@@ -52,8 +52,8 @@
#include "content/public/browser/notification_registrar.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/url_constants.h"
-#include "content/public/test/mock_render_process_host.h"
#include "content/public/test/test_renderer_host.h"
+#include "mojo/public/cpp/bindings/binding.h"
#include "net/base/net_errors.h"
#include "net/url_request/test_url_fetcher_factory.h"
#include "net/url_request/url_fetcher_delegate.h"
@@ -115,6 +115,62 @@ class MockTranslateBubbleFactory : public TranslateBubbleFactory {
DISALLOW_COPY_AND_ASSIGN(MockTranslateBubbleFactory);
};
+class FakePageImpl : public translate::mojom::Page {
+ public:
+ FakePageImpl()
+ : called_translate_(false),
+ called_revert_translation_(false),
+ binding_(this) {}
+ ~FakePageImpl() override {}
+
+ translate::mojom::PagePtr BindToNewPagePtr() {
+ binding_.Close();
+ translate_callback_pending_.Reset();
+ return binding_.CreateInterfacePtrAndBind();
+ }
+
+ // translate::mojom::Page implementation.
+ void Translate(const std::string& translate_script,
+ const std::string& source_lang,
+ const std::string& target_lang,
+ const TranslateCallback& callback) override {
+ // Ensure pending callback gets called.
+ if (translate_callback_pending_) {
+ translate_callback_pending_.Run(true, "", "",
+ translate::TranslateErrors::NONE);
+ translate_callback_pending_.Reset();
+ }
+
+ called_translate_ = true;
+ source_lang_ = source_lang;
+ target_lang_ = target_lang;
+
+ translate_callback_pending_ = callback;
+ }
+
+ void RevertTranslation() override { called_revert_translation_ = true; }
+
+ void PageTranslated(bool cancelled,
+ const std::string& source_lang,
+ const std::string& target_lang,
+ translate::TranslateErrors::Type error) {
+ translate_callback_pending_.Run(cancelled, source_lang, target_lang, error);
+ translate_callback_pending_.Reset();
+ }
+
+ bool called_translate_;
+ base::Optional<std::string> source_lang_;
+ base::Optional<std::string> target_lang_;
+ bool called_revert_translation_;
+
+ private:
+ TranslateCallback translate_callback_pending_;
+
+ mojo::Binding<translate::mojom::Page> binding_;
+
+ DISALLOW_COPY_AND_ASSIGN(FakePageImpl);
+};
+
} // namespace
// An observer that keeps track of whether a navigation entry was committed.
@@ -238,42 +294,57 @@ class TranslateManagerRenderViewHostTest
bool page_translatable) {
translate::LanguageDetectionDetails details;
details.adopted_language = lang;
- main_rfh()->OnMessageReceived(
- ChromeFrameHostMsg_TranslateLanguageDetermined(0, details,
- page_translatable));
+ ChromeTranslateClient::FromWebContents(web_contents())
+ ->translate_driver()
+ .RegisterPage(fake_page_.BindToNewPagePtr(), details,
+ page_translatable);
}
- void SimulateOnPageTranslated(int routing_id,
- const std::string& source_lang,
+ void SimulateOnPageTranslated(const std::string& source_lang,
const std::string& target_lang,
translate::TranslateErrors::Type error) {
- main_rfh()->OnMessageReceived(ChromeFrameHostMsg_PageTranslated(
- routing_id, source_lang, target_lang, error));
+ // Ensure fake_page_ Translate() call gets dispatched.
+ base::RunLoop().RunUntilIdle();
+
+ fake_page_.PageTranslated(false, source_lang, target_lang, error);
+
+ // Ensure fake_page_ Translate() response callback gets dispatched.
+ base::RunLoop().RunUntilIdle();
}
void SimulateOnPageTranslated(const std::string& source_lang,
const std::string& target_lang) {
- SimulateOnPageTranslated(
- 0, source_lang, target_lang, translate::TranslateErrors::NONE);
+ SimulateOnPageTranslated(source_lang, target_lang,
+ translate::TranslateErrors::NONE);
}
bool GetTranslateMessage(std::string* original_lang,
std::string* target_lang) {
- const IPC::Message* message = process()->sink().GetFirstMessageMatching(
- ChromeFrameMsg_TranslatePage::ID);
- if (!message)
+ base::RunLoop().RunUntilIdle();
+
+ if (!fake_page_.called_translate_)
return false;
- std::tuple<int, std::string, std::string, std::string> translate_param;
- ChromeFrameMsg_TranslatePage::Read(message, &translate_param);
- // Ignore get<0>(translate_param) which is the page seq no.
- // Ignore get<1>(translate_param) which is the script injected in the page.
+ EXPECT_TRUE(fake_page_.source_lang_);
+ EXPECT_TRUE(fake_page_.target_lang_);
+
if (original_lang)
- *original_lang = std::get<2>(translate_param);
+ *original_lang = *fake_page_.source_lang_;
if (target_lang)
- *target_lang = std::get<3>(translate_param);
+ *target_lang = *fake_page_.target_lang_;
+
+ // Reset
+ fake_page_.called_translate_ = false;
+ fake_page_.source_lang_ = base::nullopt;
+ fake_page_.target_lang_ = base::nullopt;
+
return true;
}
+ bool IsTranslationReverted() {
+ base::RunLoop().RunUntilIdle();
+ return fake_page_.called_revert_translation_;
+ }
+
InfoBarService* infobar_service() {
return InfoBarService::FromWebContents(web_contents());
}
@@ -404,8 +475,6 @@ class TranslateManagerRenderViewHostTest
}
virtual void TearDown() {
- process()->sink().ClearMessages();
-
notification_registrar_.Remove(
this,
chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED,
@@ -492,6 +561,8 @@ class TranslateManagerRenderViewHostTest
std::set<infobars::InfoBarDelegate*> removed_infobars_;
std::unique_ptr<MockTranslateBubbleFactory> bubble_factory_;
+ FakePageImpl fake_page_;
+
DISALLOW_COPY_AND_ASSIGN(TranslateManagerRenderViewHostTest);
};
@@ -621,7 +692,6 @@ TEST_F(TranslateManagerRenderViewHostTest, NormalTranslate) {
infobar->translate_step());
// Simulate clicking translate.
- process()->sink().ClearMessages();
infobar->Translate();
// The "Translating..." infobar should be showing.
@@ -649,7 +719,6 @@ TEST_F(TranslateManagerRenderViewHostTest, NormalTranslate) {
infobar->translate_step());
// Simulate changing the original language and translating.
- process()->sink().ClearMessages();
std::string new_original_lang = infobar->language_code_at(0);
infobar->UpdateOriginalLanguage(new_original_lang);
infobar->Translate();
@@ -662,7 +731,6 @@ TEST_F(TranslateManagerRenderViewHostTest, NormalTranslate) {
ASSERT_TRUE(infobar != NULL);
// Simulate changing the target language and translating.
- process()->sink().ClearMessages();
std::string new_target_lang = infobar->language_code_at(1);
infobar->UpdateTargetLanguage(new_target_lang);
infobar->Translate();
@@ -704,7 +772,6 @@ TEST_F(TranslateManagerRenderViewHostTest, TranslateScriptNotAvailable) {
infobar->translate_step());
// Simulate clicking translate.
- process()->sink().ClearMessages();
infobar->Translate();
SimulateTranslateScriptURLFetch(false);
@@ -766,8 +833,8 @@ TEST_F(TranslateManagerRenderViewHostTest, TranslateUnknownLanguage) {
menu.reset(CreateContextMenu());
menu->Init();
menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0);
- SimulateOnPageTranslated(
- 1, "en", "en", translate::TranslateErrors::IDENTICAL_LANGUAGES);
+ SimulateOnPageTranslated("en", "en",
+ translate::TranslateErrors::IDENTICAL_LANGUAGES);
infobar = GetTranslateInfoBar();
ASSERT_TRUE(infobar != NULL);
EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR,
@@ -781,8 +848,8 @@ TEST_F(TranslateManagerRenderViewHostTest, TranslateUnknownLanguage) {
menu.reset(CreateContextMenu());
menu->Init();
menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0);
- SimulateOnPageTranslated(
- 2, std::string(), "en", translate::TranslateErrors::UNKNOWN_LANGUAGE);
+ SimulateOnPageTranslated(std::string(), "en",
+ translate::TranslateErrors::UNKNOWN_LANGUAGE);
infobar = GetTranslateInfoBar();
ASSERT_TRUE(infobar != NULL);
EXPECT_EQ(translate::TRANSLATE_STEP_TRANSLATE_ERROR,
@@ -843,7 +910,6 @@ TEST_F(TranslateManagerRenderViewHostTest, AutoTranslateOnNavigate) {
SimulateOnPageTranslated("fr", "en");
// Now navigate to a new page in the same language.
- process()->sink().ClearMessages();
SimulateNavigation(GURL("http://news.google.fr"), "fr", true);
// This should have automatically triggered a translation.
@@ -853,7 +919,6 @@ TEST_F(TranslateManagerRenderViewHostTest, AutoTranslateOnNavigate) {
EXPECT_EQ("en", target_lang);
// Now navigate to a page in a different language.
- process()->sink().ClearMessages();
SimulateNavigation(GURL("http://news.google.es"), "es", true);
// This should not have triggered a translate.
@@ -1097,7 +1162,6 @@ TEST_F(TranslateManagerRenderViewHostTest, ServerReportsUnsupportedLanguage) {
EnableBubbleTest();
SimulateNavigation(GURL("http://mail.google.fr"), "fr", true);
- process()->sink().ClearMessages();
SimulateTranslatePress();
SimulateTranslateScriptURLFetch(true);
// Simulate the render notifying the translation has been done, but it
@@ -1118,11 +1182,8 @@ TEST_F(TranslateManagerRenderViewHostTest, ServerReportsUnsupportedLanguage) {
// Pressing the button on that infobar should revert to the original
// language.
- process()->sink().ClearMessages();
infobar->MessageInfoBarButtonPressed();
- const IPC::Message* message = process()->sink().GetFirstMessageMatching(
- ChromeFrameMsg_RevertTranslation::ID);
- EXPECT_TRUE(message != NULL);
+ EXPECT_TRUE(IsTranslationReverted());
// And it should have removed the infobar.
EXPECT_TRUE(GetTranslateInfoBar() == NULL);
}
@@ -1373,7 +1434,6 @@ TEST_F(TranslateManagerRenderViewHostTest, AlwaysTranslateLanguagePref) {
EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang));
EXPECT_EQ("fr", original_lang);
EXPECT_EQ("en", target_lang);
- process()->sink().ClearMessages();
// Try another language, it should not be autotranslated.
SimulateNavigation(GURL("http://www.google.es"), "es", true);
@@ -1450,7 +1510,6 @@ TEST_F(TranslateManagerRenderViewHostTest, ContextMenu) {
EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang));
EXPECT_EQ("fr", original_lang);
EXPECT_EQ("en", target_lang);
- process()->sink().ClearMessages();
// This should also have reverted the blacklisting of this site and language.
EXPECT_FALSE(translate_prefs->IsBlockedLanguage("fr"));
@@ -1473,7 +1532,6 @@ TEST_F(TranslateManagerRenderViewHostTest, ContextMenu) {
ASSERT_TRUE(infobar != NULL);
infobar->Translate();
EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang));
- process()->sink().ClearMessages();
menu.reset(CreateContextMenu());
menu->Init();
EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
@@ -1488,7 +1546,6 @@ TEST_F(TranslateManagerRenderViewHostTest, ContextMenu) {
ASSERT_TRUE(infobar != NULL);
infobar->Translate();
EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang));
- process()->sink().ClearMessages();
menu.reset(CreateContextMenu());
menu->Init();
EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
@@ -1548,7 +1605,6 @@ TEST_F(TranslateManagerRenderViewHostTest, BeforeTranslateExtraButtons) {
if (i < 7) {
EXPECT_FALSE(infobar->ShouldShowAlwaysTranslateShortcut());
infobar->Translate();
- process()->sink().ClearMessages();
} else {
EXPECT_TRUE(infobar->ShouldShowAlwaysTranslateShortcut());
}
@@ -1564,7 +1620,6 @@ TEST_F(TranslateManagerRenderViewHostTest, BeforeTranslateExtraButtons) {
// That should have triggered a page translate.
std::string original_lang, target_lang;
EXPECT_TRUE(GetTranslateMessage(&original_lang, &target_lang));
- process()->sink().ClearMessages();
// Now test that declining the translation causes a "never translate" button
// to be shown (in non incognito mode only).
@@ -1591,7 +1646,6 @@ TEST_F(TranslateManagerRenderViewHostTest, BeforeTranslateExtraButtons) {
EXPECT_TRUE(translate_prefs->IsBlockedLanguage("de"));
// No translation should have occured and the infobar should be gone.
EXPECT_FALSE(GetTranslateMessage(&original_lang, &target_lang));
- process()->sink().ClearMessages();
ASSERT_TRUE(GetTranslateInfoBar() == NULL);
}
@@ -1625,9 +1679,10 @@ TEST_F(TranslateManagerRenderViewHostTest, ScriptExpires) {
SimulateNavigation(GURL("http://www.google.fr"), "fr", true);
translate::TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
ASSERT_TRUE(infobar != NULL);
- process()->sink().ClearMessages();
infobar->Translate();
SimulateTranslateScriptURLFetch(true);
+ // The translate request should have been sent.
+ EXPECT_TRUE(GetTranslateMessage(NULL, NULL));
SimulateOnPageTranslated("fr", "en");
// A task should have been posted to clear the script, run it.
@@ -1637,12 +1692,10 @@ TEST_F(TranslateManagerRenderViewHostTest, ScriptExpires) {
SimulateNavigation(GURL("http://www.google.es"), "es", true);
infobar = GetTranslateInfoBar();
ASSERT_TRUE(infobar != NULL);
- process()->sink().ClearMessages();
infobar->Translate();
// If we don't simulate the URL fetch, the TranslateManager should be waiting
// for the script and no message should have been sent to the renderer.
- EXPECT_TRUE(process()->sink().GetFirstMessageMatching(
- ChromeFrameMsg_TranslatePage::ID) == NULL);
+ EXPECT_FALSE(GetTranslateMessage(NULL, NULL));
// Now simulate the URL fetch.
SimulateTranslateScriptURLFetch(true);
// Now the message should have been sent.
@@ -1679,7 +1732,6 @@ TEST_F(TranslateManagerRenderViewHostTest, BubbleNormalTranslate) {
bubble->GetViewState());
// Simulate clicking translate.
- process()->sink().ClearMessages();
bubble->Translate();
// Check the bubble shows "Translating...".
@@ -1722,7 +1774,6 @@ TEST_F(TranslateManagerRenderViewHostTest, BubbleTranslateScriptNotAvailable) {
bubble->GetViewState());
// Simulate clicking translate.
- process()->sink().ClearMessages();
bubble->Translate();
SimulateTranslateScriptURLFetch(false);
« no previous file with comments | « chrome/browser/translate/chrome_translate_client.cc ('k') | chrome/renderer/chrome_render_frame_observer_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698