| 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, ¶ms);
|
| - 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, ¶ms);
|
| - 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, ¶ms);
|
| - 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, ¶ms);
|
| - 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, ¶ms);
|
| - 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, ¶ms);
|
| - 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, ¶ms);
|
| - 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, ¶ms);
|
| - 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, ¶ms);
|
| - 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, ¶ms);
|
| - 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, ¶ms);
|
| - 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, ¶ms);
|
| - 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);
|
| }
|
|
|