Index: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
index d643e4f2f3b3decf0970a05973cacbc8c1734d2c..36cd2ebd934c23856d22046f585606493d966048 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
@@ -43,6 +43,7 @@ |
#include "ui/aura/env.h" |
#include "ui/aura/layout_manager.h" |
#include "ui/aura/test/aura_test_helper.h" |
+#include "ui/aura/test/aura_test_utils.h" |
#include "ui/aura/test/test_cursor_client.h" |
#include "ui/aura/test/test_screen.h" |
#include "ui/aura/test/test_window_delegate.h" |
@@ -208,6 +209,26 @@ class FakeFrameSubscriber : public RenderWidgetHostViewFrameSubscriber { |
base::Callback<void(bool)> callback_; |
}; |
+class FakeWindowEventDispatcher : public aura::WindowEventDispatcher { |
+ public: |
+ FakeWindowEventDispatcher(aura::WindowTreeHost* host) |
+ : WindowEventDispatcher(host), |
+ processed_touch_event_count_(0) {} |
+ |
+ void ProcessedTouchEvent(aura::Window* window, |
+ ui::EventResult result) override { |
+ WindowEventDispatcher::ProcessedTouchEvent(window, result); |
+ processed_touch_event_count_++; |
+ } |
+ |
+ size_t processed_touch_event_count() { |
+ return processed_touch_event_count_; |
+ } |
+ |
+ private: |
+ size_t processed_touch_event_count_; |
+}; |
+ |
class FakeRenderWidgetHostViewAura : public RenderWidgetHostViewAura { |
public: |
FakeRenderWidgetHostViewAura(RenderWidgetHost* widget, |
@@ -215,6 +236,11 @@ class FakeRenderWidgetHostViewAura : public RenderWidgetHostViewAura { |
: RenderWidgetHostViewAura(widget, is_guest_view_hack), |
has_resize_lock_(false) {} |
+ void UseFakeDispatcher() { |
+ dispatcher_ = new FakeWindowEventDispatcher(window()->GetHost()); |
+ aura::test::SetHostDispatcher(window()->GetHost(), dispatcher_); |
+ } |
+ |
~FakeRenderWidgetHostViewAura() override {} |
scoped_ptr<ResizeLock> DelegatedFrameHostCreateResizeLock( |
@@ -285,6 +311,7 @@ class FakeRenderWidgetHostViewAura : public RenderWidgetHostViewAura { |
scoped_ptr<cc::CopyOutputRequest> last_copy_request_; |
// null if there are 0 active touch points. |
scoped_ptr<blink::WebTouchEvent> touch_event_; |
+ FakeWindowEventDispatcher* dispatcher_; |
}; |
// A layout manager that always resizes a child to the root window size. |
@@ -3165,4 +3192,27 @@ TEST_F(RenderWidgetHostViewAuraTest, SetCanScrollForWebMouseWheelEvent) { |
EXPECT_TRUE(wheel_event->canScroll); |
} |
+// Ensures that the mapping from ui::TouchEvent to blink::WebTouchEvent doesn't |
+// lose track of the number of acks required. |
+TEST_F(RenderWidgetHostViewAuraTest, CorrectNumberOfAcksAreDispatched) { |
+ view_->InitAsFullscreen(parent_view_); |
+ view_->Show(); |
+ view_->UseFakeDispatcher(); |
+ |
+ ui::TouchEvent press1( |
+ ui::ET_TOUCH_PRESSED, gfx::Point(30, 30), 0, ui::EventTimeForNow()); |
+ |
+ view_->OnTouchEvent(&press1); |
+ SendInputEventACK(blink::WebInputEvent::TouchStart, |
+ INPUT_EVENT_ACK_STATE_CONSUMED); |
+ |
+ ui::TouchEvent press2( |
+ ui::ET_TOUCH_PRESSED, gfx::Point(20, 20), 1, ui::EventTimeForNow()); |
+ view_->OnTouchEvent(&press2); |
+ SendInputEventACK(blink::WebInputEvent::TouchStart, |
+ INPUT_EVENT_ACK_STATE_CONSUMED); |
+ |
+ EXPECT_EQ(2U, view_->dispatcher_->processed_touch_event_count()); |
+} |
+ |
} // namespace content |