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..9340e523960894e338dbf156100a991daed294bf 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,56 @@ void PwnMessageHelper::LockMouse(RenderProcessHost* process, |
privileged)); |
} |
+#if defined(USE_AURA) |
+namespace { |
+class OverscrollControllerSpyImpl : public OverscrollController, |
+ public OverscrollControllerSpy { |
+ public: |
+ OverscrollControllerSpyImpl() |
+ : content_scrolling_(false), |
+ message_loop_runner_(new MessageLoopRunner) {} |
+ ~OverscrollControllerSpyImpl() override {} |
+ |
+ // OverscrollController: |
+ void ReceivedEventACK(const blink::WebInputEvent& event, |
+ bool processed) override { |
+ OverscrollController::ReceivedEventACK(event, processed); |
+ |
+ if (scroll_state_ == STATE_CONTENT_SCROLLING) { |
+ content_scrolling_ = true; |
+ if (message_loop_runner_->loop_running()) |
+ message_loop_runner_->Quit(); |
+ } |
+ } |
+ |
+ // OverscrollControllerSpy: |
+ void WaitForScrollStateContentScrolling() override { |
+ if (!content_scrolling_) |
+ message_loop_runner_->Run(); |
+ } |
+ |
+ private: |
+ bool content_scrolling_; |
+ scoped_refptr<MessageLoopRunner> message_loop_runner_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(OverscrollControllerSpyImpl); |
+}; |
+} // namespace |
+ |
+// static |
+OverscrollControllerSpy* OverscrollControllerSpy::Create( |
+ RenderWidgetHostView* rwhv) { |
+ std::unique_ptr<OverscrollControllerSpyImpl> spy = |
+ base::MakeUnique<OverscrollControllerSpyImpl>(); |
+ OverscrollControllerSpy* spy_raw = spy.get(); |
+ |
+ RenderWidgetHostViewAura* rwhva = |
+ static_cast<RenderWidgetHostViewAura*>(rwhv); |
+ rwhva->SetOverscrollControllerForTesting(std::move(spy)); |
+ |
+ return spy_raw; |
+} |
+ |
+#endif // defined(USE_AURA) |
+ |
} // namespace content |