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 8fa46d90ca99edc31a0cfab03bbe53d2715a83be..839bb474fd2f521272d8981cde40c9255e03b070 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 |
@@ -39,6 +39,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" |
@@ -217,11 +218,36 @@ 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) {} |
+ virtual 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) |
: RenderWidgetHostViewAura(widget), has_resize_lock_(false) {} |
+ void UseFakeDispatcher() { |
+ dispatcher_ = new FakeWindowEventDispatcher(window()->GetHost()); |
+ aura::test::WindowTreeHostTestApi host(window()->GetHost()); |
+ host.set_dispatcher(dispatcher_); |
+ } |
+ |
virtual ~FakeRenderWidgetHostViewAura() {} |
virtual scoped_ptr<ResizeLock> CreateResizeLock( |
@@ -273,6 +299,7 @@ class FakeRenderWidgetHostViewAura : public RenderWidgetHostViewAura { |
bool has_resize_lock_; |
gfx::Size last_frame_size_; |
scoped_ptr<cc::CopyOutputRequest> last_copy_request_; |
+ FakeWindowEventDispatcher* dispatcher_; |
}; |
// A layout manager that always resizes a child to the root window size. |
@@ -367,6 +394,15 @@ class RenderWidgetHostViewAuraTest : public testing::Test { |
virtual void TearDown() { TearDownEnvironment(); } |
+ void SendInputEventACK(WebInputEvent::Type type, |
+ InputEventAckState ack_result) { |
+ InputHostMsg_HandleInputEvent_ACK_Params ack; |
+ ack.type = type; |
+ ack.state = ack_result; |
+ InputHostMsg_HandleInputEvent_ACK response(0, ack); |
+ widget_host_->OnMessageReceived(response); |
+ } |
+ |
protected: |
base::MessageLoopForUI message_loop_; |
BrowserThreadImpl browser_thread_for_ui_; |
@@ -520,15 +556,6 @@ class RenderWidgetHostViewAuraOverscrollTest |
velocityX, velocityY, sourceDevice)); |
} |
- void SendInputEventACK(WebInputEvent::Type type, |
- InputEventAckState ack_result) { |
- InputHostMsg_HandleInputEvent_ACK_Params ack; |
- ack.type = type; |
- ack.state = ack_result; |
- InputHostMsg_HandleInputEvent_ACK response(0, ack); |
- widget_host_->OnMessageReceived(response); |
- } |
- |
bool ScrollStateIsContentScrolling() const { |
return scroll_state() == OverscrollController::STATE_CONTENT_SCROLLING; |
} |
@@ -2753,4 +2780,27 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, OverscrollResetsOnBlur) { |
EXPECT_EQ(3U, sink_->message_count()); |
} |
+// 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 |