Index: content/public/test/browser_test_utils.cc |
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc |
index b9a3011b3e9321b4dd11c57cc67f7c085808a229..35c79b06681701d48004462b0de9ec758776e8e3 100644 |
--- a/content/public/test/browser_test_utils.cc |
+++ b/content/public/test/browser_test_utils.cc |
@@ -93,6 +93,7 @@ |
#include "ui/resources/grit/webui_resources.h" |
#if defined(USE_AURA) |
+#include "content/browser/renderer_host/overscroll_controller.h" |
#include "content/browser/renderer_host/render_widget_host_view_aura.h" |
#include "ui/aura/test/window_event_dispatcher_test_api.h" |
#include "ui/aura/window.h" |
@@ -2055,4 +2056,60 @@ void PwnMessageHelper::LockMouse(RenderProcessHost* process, |
privileged)); |
} |
+#if defined(USE_AURA) |
+namespace { |
+class MockOverscrollControllerImpl : public OverscrollController, |
+ public MockOverscrollController { |
+ public: |
+ MockOverscrollControllerImpl() |
+ : content_scrolling_(false), |
+ message_loop_runner_(new MessageLoopRunner) {} |
+ ~MockOverscrollControllerImpl() override {} |
+ |
+ // OverscrollController: |
+ void ReceivedEventACK(const blink::WebInputEvent& event, |
+ bool processed) override { |
+ // Since we're only mocking this one method of OverscrollController and its |
+ // other methods are non-virtual, we'll delegate to it so that it doesn't |
+ // get into an inconsistent state. |
+ OverscrollController::ReceivedEventACK(event, processed); |
+ |
+ if (event.GetType() == blink::WebInputEvent::kGestureScrollUpdate && |
+ processed) { |
+ content_scrolling_ = true; |
+ if (message_loop_runner_->loop_running()) |
+ message_loop_runner_->Quit(); |
+ } |
+ } |
+ |
+ // MockOverscrollController: |
+ void WaitForConsumedScroll() override { |
+ if (!content_scrolling_) |
+ message_loop_runner_->Run(); |
+ } |
+ |
+ private: |
+ bool content_scrolling_; |
+ scoped_refptr<MessageLoopRunner> message_loop_runner_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MockOverscrollControllerImpl); |
+}; |
+} // namespace |
+ |
+// static |
+MockOverscrollController* MockOverscrollController::Create( |
+ RenderWidgetHostView* rwhv) { |
+ std::unique_ptr<MockOverscrollControllerImpl> mock = |
+ base::MakeUnique<MockOverscrollControllerImpl>(); |
+ MockOverscrollController* raw_mock = mock.get(); |
+ |
+ RenderWidgetHostViewAura* rwhva = |
+ static_cast<RenderWidgetHostViewAura*>(rwhv); |
+ rwhva->SetOverscrollControllerForTesting(std::move(mock)); |
+ |
+ return raw_mock; |
+} |
+ |
+#endif // defined(USE_AURA) |
+ |
} // namespace content |