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 9a6042d465f90a6d3ffdf256ae5523285aa42a6b..50ca24c1d63ced0fae9be199ea4a00397e660791 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 |
@@ -448,6 +448,28 @@ class RenderWidgetHostViewAuraTest : public testing::Test { |
widget_host_->OnMessageReceived(response); |
} |
+ size_t GetSentMessageCountAndResetSink() { |
+ size_t count = sink_->message_count(); |
+ sink_->ClearMessages(); |
+ return count; |
+ } |
+ |
+ void AckLastSentInputEventIfNecessary(InputEventAckState ack_result) { |
+ if (!sink_->message_count()) |
+ return; |
+ |
+ InputMsg_HandleInputEvent::Param params; |
+ if (!InputMsg_HandleInputEvent::Read( |
+ sink_->GetMessageAt(sink_->message_count() - 1), ¶ms)) { |
+ return; |
+ } |
+ |
+ if (WebInputEventTraits::IgnoresAckDisposition(*get<0>(params))) |
+ return; |
+ |
+ SendInputEventACK(get<0>(params)->type, ack_result); |
+ } |
+ |
protected: |
// If true, then calls RWH::Shutdown() instead of deleting RWH. |
bool widget_host_uses_shutdown_to_destroy_; |
@@ -693,28 +715,6 @@ class RenderWidgetHostViewAuraOverscrollTest |
SendTouchEvent(); |
} |
- size_t GetSentMessageCountAndResetSink() { |
- size_t count = sink_->message_count(); |
- sink_->ClearMessages(); |
- return count; |
- } |
- |
- void AckLastSentInputEventIfNecessary(InputEventAckState ack_result) { |
- if (!sink_->message_count()) |
- return; |
- |
- InputMsg_HandleInputEvent::Param params; |
- if (!InputMsg_HandleInputEvent::Read( |
- sink_->GetMessageAt(sink_->message_count() - 1), ¶ms)) { |
- return; |
- } |
- |
- if (WebInputEventTraits::IgnoresAckDisposition(*get<0>(params))) |
- return; |
- |
- SendInputEventACK(get<0>(params)->type, ack_result); |
- } |
- |
SyntheticWebTouchEvent touch_event_; |
scoped_ptr<TestOverscrollDelegate> overscroll_delegate_; |
@@ -1021,10 +1021,10 @@ TEST_F(RenderWidgetHostViewAuraTest, FinishCompositionByMouse) { |
TEST_F(RenderWidgetHostViewAuraTest, TouchEventState) { |
view_->InitAsChild(NULL); |
view_->Show(); |
+ GetSentMessageCountAndResetSink(); |
// Start with no touch-event handler in the renderer. |
widget_host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, false)); |
- EXPECT_FALSE(widget_host_->ShouldForwardTouchEvent()); |
ui::TouchEvent press(ui::ET_TOUCH_PRESSED, |
gfx::Point(30, 30), |
@@ -1039,8 +1039,11 @@ TEST_F(RenderWidgetHostViewAuraTest, TouchEventState) { |
0, |
ui::EventTimeForNow()); |
+ // The touch events should get forwared from the view, but they should not |
+ // reach the renderer. |
view_->OnTouchEvent(&press); |
- EXPECT_FALSE(press.handled()); |
+ EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
+ EXPECT_TRUE(press.synchronous_handling_disabled()); |
EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type); |
EXPECT_TRUE(view_->touch_event_->cancelable); |
EXPECT_EQ(1U, view_->touch_event_->touchesLength); |
@@ -1048,7 +1051,8 @@ TEST_F(RenderWidgetHostViewAuraTest, TouchEventState) { |
view_->touch_event_->touches[0].state); |
view_->OnTouchEvent(&move); |
- EXPECT_FALSE(move.handled()); |
+ EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
+ EXPECT_TRUE(press.synchronous_handling_disabled()); |
EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type); |
EXPECT_TRUE(view_->touch_event_->cancelable); |
EXPECT_EQ(1U, view_->touch_event_->touchesLength); |
@@ -1056,16 +1060,17 @@ TEST_F(RenderWidgetHostViewAuraTest, TouchEventState) { |
view_->touch_event_->touches[0].state); |
view_->OnTouchEvent(&release); |
- EXPECT_FALSE(release.handled()); |
+ EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
+ EXPECT_TRUE(press.synchronous_handling_disabled()); |
EXPECT_EQ(nullptr, view_->touch_event_); |
// Now install some touch-event handlers and do the same steps. The touch |
// events should now be consumed. However, the touch-event state should be |
// updated as before. |
widget_host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); |
- EXPECT_TRUE(widget_host_->ShouldForwardTouchEvent()); |
view_->OnTouchEvent(&press); |
+ EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
EXPECT_TRUE(press.synchronous_handling_disabled()); |
EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type); |
EXPECT_TRUE(view_->touch_event_->cancelable); |
@@ -1093,19 +1098,18 @@ TEST_F(RenderWidgetHostViewAuraTest, TouchEventState) { |
view_->touch_event_->touches[0].state); |
widget_host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, false)); |
- EXPECT_TRUE(widget_host_->ShouldForwardTouchEvent()); |
// Ack'ing the outstanding event should flush the pending touch queue. |
InputHostMsg_HandleInputEvent_ACK_Params ack; |
ack.type = blink::WebInputEvent::TouchStart; |
ack.state = INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS; |
widget_host_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack)); |
- EXPECT_FALSE(widget_host_->ShouldForwardTouchEvent()); |
+ EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
ui::TouchEvent move2(ui::ET_TOUCH_MOVED, gfx::Point(20, 20), 0, |
base::Time::NowFromSystemTime() - base::Time()); |
view_->OnTouchEvent(&move2); |
- EXPECT_FALSE(move2.handled()); |
+ EXPECT_TRUE(press.synchronous_handling_disabled()); |
EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type); |
EXPECT_EQ(1U, view_->touch_event_->touchesLength); |
EXPECT_EQ(blink::WebTouchPoint::StateMoved, |
@@ -1114,7 +1118,7 @@ TEST_F(RenderWidgetHostViewAuraTest, TouchEventState) { |
ui::TouchEvent release2(ui::ET_TOUCH_RELEASED, gfx::Point(20, 20), 0, |
base::Time::NowFromSystemTime() - base::Time()); |
view_->OnTouchEvent(&release2); |
- EXPECT_FALSE(release2.handled()); |
+ EXPECT_TRUE(press.synchronous_handling_disabled()); |
EXPECT_EQ(nullptr, view_->touch_event_); |
} |
@@ -1125,7 +1129,6 @@ TEST_F(RenderWidgetHostViewAuraTest, TouchEventSyncAsync) { |
view_->Show(); |
widget_host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); |
- EXPECT_TRUE(widget_host_->ShouldForwardTouchEvent()); |
ui::TouchEvent press(ui::ET_TOUCH_PRESSED, |
gfx::Point(30, 30), |
@@ -3102,9 +3105,9 @@ TEST_F(RenderWidgetHostViewAuraTest, |
InvalidEventsHaveSyncHandlingDisabled) { |
view_->InitAsChild(NULL); |
view_->Show(); |
+ GetSentMessageCountAndResetSink(); |
widget_host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); |
- EXPECT_TRUE(widget_host_->ShouldForwardTouchEvent()); |
ui::TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(30, 30), 0, |
ui::EventTimeForNow()); |
@@ -3113,11 +3116,16 @@ TEST_F(RenderWidgetHostViewAuraTest, |
ui::TouchEvent invalid_move(ui::ET_TOUCH_MOVED, gfx::Point(30, 30), 1, |
ui::EventTimeForNow()); |
- view_->OnTouchEvent(&press); |
- view_->OnTouchEvent(&invalid_move); |
// Valid press is handled asynchronously. |
+ view_->OnTouchEvent(&press); |
EXPECT_TRUE(press.synchronous_handling_disabled()); |
- // Invalid move is handled synchronously, but is consumed. |
+ EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); |
+ AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_CONSUMED); |
+ |
+ // Invalid move is handled synchronously, but is consumed. It should not |
+ // be forwarded to the renderer. |
+ view_->OnTouchEvent(&invalid_move); |
+ EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); |
EXPECT_FALSE(invalid_move.synchronous_handling_disabled()); |
EXPECT_TRUE(invalid_move.stopped_propagation()); |
} |