Index: chrome/renderer/chrome_render_frame_observer_browsertest.cc |
diff --git a/chrome/renderer/chrome_render_frame_observer_browsertest.cc b/chrome/renderer/chrome_render_frame_observer_browsertest.cc |
index c297cd5bae61d300664fe0d1aa62a15595fa9a5f..0d0fa21bc03c2ab4da58893b7c49d76f3c916969 100644 |
--- a/chrome/renderer/chrome_render_frame_observer_browsertest.cc |
+++ b/chrome/renderer/chrome_render_frame_observer_browsertest.cc |
@@ -8,17 +8,66 @@ |
#include "base/test/histogram_tester.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 "mojo/public/cpp/bindings/binding_set.h" |
+#include "services/shell/public/cpp/interface_provider.h" |
#include "third_party/WebKit/public/web/WebView.h" |
+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; |
+ page_needs_translation_ = page_needs_translation; |
+ } |
+ |
+ bool called_new_page_; |
+ bool page_needs_translation_; |
+ |
+ private: |
+ mojo::BindingSet<translate::mojom::ContentTranslateDriver> bindings_; |
+}; |
+ |
+} // namespace |
+ |
// Constants for UMA statistic collection. |
static const char kTranslateCaptureText[] = "Translate.CaptureText"; |
-class ChromeRenderFrameObserverTest : public ChromeRenderViewTest {}; |
+class ChromeRenderFrameObserverTest : public ChromeRenderViewTest { |
+ protected: |
+ void SetUp() override { |
+ ChromeRenderViewTest::SetUp(); |
+ |
+ 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_))); |
+ } |
+ |
+ FakeContentTranslateDriver fake_translate_driver_; |
+}; |
TEST_F(ChromeRenderFrameObserverTest, SkipCapturingSubFrames) { |
base::HistogramTester histogram_tester; |
@@ -28,12 +77,11 @@ TEST_F(ChromeRenderFrameObserverTest, SkipCapturingSubFrames) { |
"<iframe srcdoc=\"This a document in an iframe.\">" |
"</body>"); |
view_->GetWebView()->updateAllLifecyclePhases(); |
- 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."; |
+ |
+ base::RunLoop().RunUntilIdle(); |
+ ASSERT_TRUE(fake_translate_driver_.called_new_page_); |
+ EXPECT_TRUE(fake_translate_driver_.page_needs_translation_) |
+ << "Page should be translatable."; |
// Should have 2 samples: one for preliminary capture, one for final capture. |
// If there are more, then subframes are being captured more than once. |
histogram_tester.ExpectTotalCount(kTranslateCaptureText, 2); |