Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(276)

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc

Issue 997283002: Coalesce async touch move events until the ack back from render (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Change the unittests Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/memory/scoped_vector.h" 9 #include "base/memory/scoped_vector.h"
10 #include "base/memory/shared_memory.h" 10 #include "base/memory/shared_memory.h"
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 // which uses ObserverListThreadSafe, which furthermore remembers the 438 // which uses ObserverListThreadSafe, which furthermore remembers the
439 // message loop for the thread it was created in. Between tests, the 439 // message loop for the thread it was created in. Between tests, the
440 // RendererFrameManager singleton survives and and the MessageLoop gets 440 // RendererFrameManager singleton survives and and the MessageLoop gets
441 // destroyed. The correct fix would be to have ObserverListThreadSafe look 441 // destroyed. The correct fix would be to have ObserverListThreadSafe look
442 // up the proper message loop every time (see crbug.com/443824.) 442 // up the proper message loop every time (see crbug.com/443824.)
443 RendererFrameManager::GetInstance()->OnMemoryPressure(level); 443 RendererFrameManager::GetInstance()->OnMemoryPressure(level);
444 } 444 }
445 445
446 void SendInputEventACK(WebInputEvent::Type type, 446 void SendInputEventACK(WebInputEvent::Type type,
447 InputEventAckState ack_result) { 447 InputEventAckState ack_result) {
448 InputHostMsg_HandleInputEvent_ACK_Params ack; 448 DCHECK(!WebInputEvent::isTouchEventType(type));
449 ack.type = type; 449 InputEventAck ack(type, ack_result);
450 ack.state = ack_result;
451 InputHostMsg_HandleInputEvent_ACK response(0, ack); 450 InputHostMsg_HandleInputEvent_ACK response(0, ack);
452 widget_host_->OnMessageReceived(response); 451 widget_host_->OnMessageReceived(response);
453 } 452 }
453
454 void SendTouchEventACK(WebInputEvent::Type type,
455 InputEventAckState ack_result,
456 uint32 event_id) {
457 DCHECK(WebInputEvent::isTouchEventType(type));
458 InputEventAck ack(type, ack_result, event_id);
459 InputHostMsg_HandleInputEvent_ACK response(0, ack);
460 widget_host_->OnMessageReceived(response);
461 }
454 462
455 size_t GetSentMessageCountAndResetSink() { 463 size_t GetSentMessageCountAndResetSink() {
456 size_t count = sink_->message_count(); 464 size_t count = sink_->message_count();
457 sink_->ClearMessages(); 465 sink_->ClearMessages();
458 return count; 466 return count;
459 } 467 }
460 468
461 void AckLastSentInputEventIfNecessary(InputEventAckState ack_result) { 469 void AckLastSentInputEventIfNecessary(InputEventAckState ack_result,
470 uint32 event_id) {
462 if (!sink_->message_count()) 471 if (!sink_->message_count())
463 return; 472 return;
464 473
465 InputMsg_HandleInputEvent::Param params; 474 InputMsg_HandleInputEvent::Param params;
466 if (!InputMsg_HandleInputEvent::Read( 475 if (!InputMsg_HandleInputEvent::Read(
467 sink_->GetMessageAt(sink_->message_count() - 1), &params)) { 476 sink_->GetMessageAt(sink_->message_count() - 1), &params)) {
468 return; 477 return;
469 } 478 }
470 479
471 if (WebInputEventTraits::IgnoresAckDisposition(*get<0>(params))) 480 if (!WebInputEventTraits::WillReceiveAckFromRenderer(*get<0>(params)))
472 return; 481 return;
473 482
474 SendInputEventACK(get<0>(params)->type, ack_result); 483 SendTouchEventACK(get<0>(params)->type, ack_result, event_id);
jdduke (slow) 2015/05/14 21:00:06 Since we're already extracting the event from the
475 } 484 }
476 485
477 protected: 486 protected:
478 // If true, then calls RWH::Shutdown() instead of deleting RWH. 487 // If true, then calls RWH::Shutdown() instead of deleting RWH.
479 bool widget_host_uses_shutdown_to_destroy_; 488 bool widget_host_uses_shutdown_to_destroy_;
480 489
481 bool is_guest_view_hack_; 490 bool is_guest_view_hack_;
482 491
483 base::MessageLoopForUI message_loop_; 492 base::MessageLoopForUI message_loop_;
484 BrowserThreadImpl browser_thread_for_ui_; 493 BrowserThreadImpl browser_thread_for_ui_;
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 } 700 }
692 701
693 float overscroll_delta_y() const { 702 float overscroll_delta_y() const {
694 return view_->overscroll_controller()->overscroll_delta_y_; 703 return view_->overscroll_controller()->overscroll_delta_y_;
695 } 704 }
696 705
697 TestOverscrollDelegate* overscroll_delegate() { 706 TestOverscrollDelegate* overscroll_delegate() {
698 return overscroll_delegate_.get(); 707 return overscroll_delegate_.get();
699 } 708 }
700 709
701 void SendTouchEvent() { 710 uint32 SendTouchEvent() {
711 uint32 touch_event_id = touch_event_.uniqueTouchEventId;
702 widget_host_->ForwardTouchEventWithLatencyInfo(touch_event_, 712 widget_host_->ForwardTouchEventWithLatencyInfo(touch_event_,
703 ui::LatencyInfo()); 713 ui::LatencyInfo());
704 touch_event_.ResetPoints(); 714 touch_event_.ResetPoints();
715 return touch_event_id;
705 } 716 }
706 717
707 void PressTouchPoint(int x, int y) { 718 void PressTouchPoint(int x, int y) {
708 touch_event_.PressPoint(x, y); 719 touch_event_.PressPoint(x, y);
709 SendTouchEvent();
710 } 720 }
711 721
712 void MoveTouchPoint(int index, int x, int y) { 722 void MoveTouchPoint(int index, int x, int y) {
713 touch_event_.MovePoint(index, x, y); 723 touch_event_.MovePoint(index, x, y);
714 SendTouchEvent();
715 } 724 }
716 725
717 void ReleaseTouchPoint(int index) { 726 void ReleaseTouchPoint(int index) {
718 touch_event_.ReleasePoint(index); 727 touch_event_.ReleasePoint(index);
719 SendTouchEvent();
720 } 728 }
721 729
722 SyntheticWebTouchEvent touch_event_; 730 SyntheticWebTouchEvent touch_event_;
723 731
724 scoped_ptr<TestOverscrollDelegate> overscroll_delegate_; 732 scoped_ptr<TestOverscrollDelegate> overscroll_delegate_;
725 733
726 private: 734 private:
727 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAuraOverscrollTest); 735 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAuraOverscrollTest);
728 }; 736 };
729 737
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
1097 view_->OnTouchEvent(&press); 1105 view_->OnTouchEvent(&press);
1098 EXPECT_TRUE(press.synchronous_handling_disabled()); 1106 EXPECT_TRUE(press.synchronous_handling_disabled());
1099 EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type); 1107 EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type);
1100 EXPECT_EQ(1U, view_->touch_event_->touchesLength); 1108 EXPECT_EQ(1U, view_->touch_event_->touchesLength);
1101 EXPECT_EQ(blink::WebTouchPoint::StatePressed, 1109 EXPECT_EQ(blink::WebTouchPoint::StatePressed,
1102 view_->touch_event_->touches[0].state); 1110 view_->touch_event_->touches[0].state);
1103 1111
1104 widget_host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, false)); 1112 widget_host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, false));
1105 1113
1106 // Ack'ing the outstanding event should flush the pending touch queue. 1114 // Ack'ing the outstanding event should flush the pending touch queue.
1107 InputHostMsg_HandleInputEvent_ACK_Params ack; 1115 InputEventAck ack(blink::WebInputEvent::TouchStart,
1108 ack.type = blink::WebInputEvent::TouchStart; 1116 INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS,
1109 ack.state = INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS; 1117 press.unique_event_id());
1110 widget_host_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack)); 1118 widget_host_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack));
1111 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1119 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1112 1120
1113 ui::TouchEvent move2(ui::ET_TOUCH_MOVED, gfx::Point(20, 20), 0, 1121 ui::TouchEvent move2(ui::ET_TOUCH_MOVED, gfx::Point(20, 20), 0,
1114 base::Time::NowFromSystemTime() - base::Time()); 1122 base::Time::NowFromSystemTime() - base::Time());
1115 view_->OnTouchEvent(&move2); 1123 view_->OnTouchEvent(&move2);
1116 EXPECT_TRUE(press.synchronous_handling_disabled()); 1124 EXPECT_TRUE(press.synchronous_handling_disabled());
1117 EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type); 1125 EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type);
1118 EXPECT_EQ(1U, view_->touch_event_->touchesLength); 1126 EXPECT_EQ(1U, view_->touch_event_->touchesLength);
1119 EXPECT_EQ(blink::WebTouchPoint::StateMoved, 1127 EXPECT_EQ(blink::WebTouchPoint::StateMoved,
(...skipping 11 matching lines...) Expand all
1131 TEST_F(RenderWidgetHostViewAuraTest, MultiTouchPointsStates) { 1139 TEST_F(RenderWidgetHostViewAuraTest, MultiTouchPointsStates) {
1132 view_->InitAsFullscreen(parent_view_); 1140 view_->InitAsFullscreen(parent_view_);
1133 view_->Show(); 1141 view_->Show();
1134 view_->UseFakeDispatcher(); 1142 view_->UseFakeDispatcher();
1135 GetSentMessageCountAndResetSink(); 1143 GetSentMessageCountAndResetSink();
1136 1144
1137 ui::TouchEvent press0(ui::ET_TOUCH_PRESSED, gfx::Point(30, 30), 0, 1145 ui::TouchEvent press0(ui::ET_TOUCH_PRESSED, gfx::Point(30, 30), 0,
1138 ui::EventTimeForNow()); 1146 ui::EventTimeForNow());
1139 1147
1140 view_->OnTouchEvent(&press0); 1148 view_->OnTouchEvent(&press0);
1141 SendInputEventACK(blink::WebInputEvent::TouchStart, 1149 SendTouchEventACK(blink::WebInputEvent::TouchStart,
1142 INPUT_EVENT_ACK_STATE_CONSUMED); 1150 INPUT_EVENT_ACK_STATE_CONSUMED,
1151 press0.unique_event_id());
1143 EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type); 1152 EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type);
1144 EXPECT_EQ(1U, view_->touch_event_->touchesLength); 1153 EXPECT_EQ(1U, view_->touch_event_->touchesLength);
1145 EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount()); 1154 EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount());
1146 1155
1147 ui::TouchEvent move0(ui::ET_TOUCH_MOVED, gfx::Point(20, 20), 0, 1156 ui::TouchEvent move0(ui::ET_TOUCH_MOVED, gfx::Point(20, 20), 0,
1148 ui::EventTimeForNow()); 1157 ui::EventTimeForNow());
1149 1158
1150 view_->OnTouchEvent(&move0); 1159 view_->OnTouchEvent(&move0);
1151 SendInputEventACK(blink::WebInputEvent::TouchMove, 1160 SendTouchEventACK(blink::WebInputEvent::TouchMove,
1152 INPUT_EVENT_ACK_STATE_CONSUMED); 1161 INPUT_EVENT_ACK_STATE_CONSUMED,
1162 move0.unique_event_id());
1153 EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type); 1163 EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type);
1154 EXPECT_EQ(1U, view_->touch_event_->touchesLength); 1164 EXPECT_EQ(1U, view_->touch_event_->touchesLength);
1155 EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount()); 1165 EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount());
1156 1166
1157 // For the second touchstart, only the state of the second touch point is 1167 // For the second touchstart, only the state of the second touch point is
1158 // StatePressed, the state of the first touch point is StateStationary. 1168 // StatePressed, the state of the first touch point is StateStationary.
1159 ui::TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), 1, 1169 ui::TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), 1,
1160 ui::EventTimeForNow()); 1170 ui::EventTimeForNow());
1161 1171
1162 view_->OnTouchEvent(&press1); 1172 view_->OnTouchEvent(&press1);
1163 SendInputEventACK(blink::WebInputEvent::TouchStart, 1173 SendTouchEventACK(blink::WebInputEvent::TouchStart,
1164 INPUT_EVENT_ACK_STATE_CONSUMED); 1174 INPUT_EVENT_ACK_STATE_CONSUMED,
1175 press1.unique_event_id());
1165 EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type); 1176 EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type);
1166 EXPECT_EQ(2U, view_->touch_event_->touchesLength); 1177 EXPECT_EQ(2U, view_->touch_event_->touchesLength);
1167 EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount()); 1178 EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount());
1168 1179
1169 // For the touchmove of second point, the state of the second touch point is 1180 // For the touchmove of second point, the state of the second touch point is
1170 // StateMoved, the state of the first touch point is StateStationary. 1181 // StateMoved, the state of the first touch point is StateStationary.
1171 ui::TouchEvent move1(ui::ET_TOUCH_MOVED, gfx::Point(30, 30), 1, 1182 ui::TouchEvent move1(ui::ET_TOUCH_MOVED, gfx::Point(30, 30), 1,
1172 ui::EventTimeForNow()); 1183 ui::EventTimeForNow());
1173 1184
1174 view_->OnTouchEvent(&move1); 1185 view_->OnTouchEvent(&move1);
1175 SendInputEventACK(blink::WebInputEvent::TouchMove, 1186 SendTouchEventACK(blink::WebInputEvent::TouchMove,
1176 INPUT_EVENT_ACK_STATE_CONSUMED); 1187 INPUT_EVENT_ACK_STATE_CONSUMED,
1188 move1.unique_event_id());
1177 EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type); 1189 EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type);
1178 EXPECT_EQ(2U, view_->touch_event_->touchesLength); 1190 EXPECT_EQ(2U, view_->touch_event_->touchesLength);
1179 EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount()); 1191 EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount());
1180 1192
1181 // For the touchmove of first point, the state of the first touch point is 1193 // For the touchmove of first point, the state of the first touch point is
1182 // StateMoved, the state of the second touch point is StateStationary. 1194 // StateMoved, the state of the second touch point is StateStationary.
1183 ui::TouchEvent move2(ui::ET_TOUCH_MOVED, gfx::Point(10, 10), 0, 1195 ui::TouchEvent move2(ui::ET_TOUCH_MOVED, gfx::Point(10, 10), 0,
1184 ui::EventTimeForNow()); 1196 ui::EventTimeForNow());
1185 1197
1186 view_->OnTouchEvent(&move2); 1198 view_->OnTouchEvent(&move2);
1187 SendInputEventACK(blink::WebInputEvent::TouchMove, 1199 SendTouchEventACK(blink::WebInputEvent::TouchMove,
1188 INPUT_EVENT_ACK_STATE_CONSUMED); 1200 INPUT_EVENT_ACK_STATE_CONSUMED,
1201 move2.unique_event_id());
1189 EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type); 1202 EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type);
1190 EXPECT_EQ(2U, view_->touch_event_->touchesLength); 1203 EXPECT_EQ(2U, view_->touch_event_->touchesLength);
1191 EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount()); 1204 EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount());
1192 1205
1193 ui::TouchEvent cancel0(ui::ET_TOUCH_CANCELLED, gfx::Point(10, 10), 0, 1206 ui::TouchEvent cancel0(ui::ET_TOUCH_CANCELLED, gfx::Point(10, 10), 0,
1194 ui::EventTimeForNow()); 1207 ui::EventTimeForNow());
1195 1208
1196 // For the touchcancel, only the state of the current touch point is 1209 // For the touchcancel, only the state of the current touch point is
1197 // StateCancelled, the state of the other touch point is StateStationary. 1210 // StateCancelled, the state of the other touch point is StateStationary.
1198 view_->OnTouchEvent(&cancel0); 1211 view_->OnTouchEvent(&cancel0);
(...skipping 1658 matching lines...) Expand 10 before | Expand all | Expand 10 after
2857 2870
2858 // Tests that when touch-events are dispatched to the renderer, the overscroll 2871 // Tests that when touch-events are dispatched to the renderer, the overscroll
2859 // gesture deals with them correctly. 2872 // gesture deals with them correctly.
2860 TEST_F(RenderWidgetHostViewAuraOverscrollTest, OverscrollWithTouchEvents) { 2873 TEST_F(RenderWidgetHostViewAuraOverscrollTest, OverscrollWithTouchEvents) {
2861 SetUpOverscrollEnvironmentWithDebounce(10); 2874 SetUpOverscrollEnvironmentWithDebounce(10);
2862 widget_host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); 2875 widget_host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true));
2863 sink_->ClearMessages(); 2876 sink_->ClearMessages();
2864 2877
2865 // The test sends an intermingled sequence of touch and gesture events. 2878 // The test sends an intermingled sequence of touch and gesture events.
2866 PressTouchPoint(0, 1); 2879 PressTouchPoint(0, 1);
2867 SendInputEventACK(WebInputEvent::TouchStart, 2880 uint32 touch_press_event_id1 = SendTouchEvent();
2868 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 2881 SendTouchEventACK(WebInputEvent::TouchStart,
2882 INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_press_event_id1);
2869 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 2883 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
2870 2884
2871 MoveTouchPoint(0, 20, 5); 2885 MoveTouchPoint(0, 20, 5);
2886 uint32 touch_move_event_id1 = SendTouchEvent();
2887 SendTouchEventACK(WebInputEvent::TouchMove,
2888 INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_move_event_id1);
2872 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 2889 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
2873 SendInputEventACK(WebInputEvent::TouchMove,
2874 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2875 2890
2876 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 2891 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
2877 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); 2892 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
2878 2893
2879 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 2894 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
2880 blink::WebGestureDeviceTouchscreen); 2895 blink::WebGestureDeviceTouchscreen);
2881 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 2896 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
2882 SimulateGestureScrollUpdateEvent(20, 0, 0); 2897 SimulateGestureScrollUpdateEvent(20, 0, 0);
2883 SendInputEventACK(WebInputEvent::GestureScrollUpdate, 2898 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
2884 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 2899 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2885 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 2900 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
2886 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 2901 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
2887 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); 2902 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
2888 2903
2889 // Another touch move event should reach the renderer since overscroll hasn't 2904 // Another touch move event should reach the renderer since overscroll hasn't
2890 // started yet. Note that touch events sent during the scroll period may 2905 // started yet. Note that touch events sent during the scroll period may
2891 // not require an ack (having been marked uncancelable). 2906 // not require an ack (having been marked uncancelable).
2892 MoveTouchPoint(0, 65, 10); 2907 MoveTouchPoint(0, 65, 10);
2893 AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 2908 uint32 touch_move_event_id2 = SendTouchEvent();
2909 AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
2910 touch_move_event_id2);
2894 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 2911 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
2895 2912
2896 SimulateGestureScrollUpdateEvent(45, 0, 0); 2913 SimulateGestureScrollUpdateEvent(45, 0, 0);
2897 SendInputEventACK(WebInputEvent::GestureScrollUpdate, 2914 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
2898 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 2915 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2899 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode()); 2916 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
2900 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode()); 2917 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode());
2901 EXPECT_EQ(65.f, overscroll_delta_x()); 2918 EXPECT_EQ(65.f, overscroll_delta_x());
2902 EXPECT_EQ(15.f, overscroll_delegate()->delta_x()); 2919 EXPECT_EQ(15.f, overscroll_delegate()->delta_x());
2903 EXPECT_EQ(0.f, overscroll_delegate()->delta_y()); 2920 EXPECT_EQ(0.f, overscroll_delegate()->delta_y());
2904 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 2921 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
2905 2922
2906 // Send another touch event. The page should get the touch-move event, even 2923 // Send another touch event. The page should get the touch-move event, even
2907 // though overscroll has started. 2924 // though overscroll has started.
2908 MoveTouchPoint(0, 55, 5); 2925 MoveTouchPoint(0, 55, 5);
2926 uint32 touch_move_event_id3 = SendTouchEvent();
2909 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode()); 2927 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
2910 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode()); 2928 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode());
2911 EXPECT_EQ(65.f, overscroll_delta_x()); 2929 EXPECT_EQ(65.f, overscroll_delta_x());
2912 EXPECT_EQ(15.f, overscroll_delegate()->delta_x()); 2930 EXPECT_EQ(15.f, overscroll_delegate()->delta_x());
2913 EXPECT_EQ(0.f, overscroll_delegate()->delta_y()); 2931 EXPECT_EQ(0.f, overscroll_delegate()->delta_y());
2914 AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 2932 AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
2933 touch_move_event_id3);
2915 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 2934 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
2916 2935
2917 SimulateGestureScrollUpdateEvent(-10, 0, 0); 2936 SimulateGestureScrollUpdateEvent(-10, 0, 0);
2918 EXPECT_EQ(0U, sink_->message_count()); 2937 EXPECT_EQ(0U, sink_->message_count());
2919 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode()); 2938 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
2920 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode()); 2939 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode());
2921 EXPECT_EQ(55.f, overscroll_delta_x()); 2940 EXPECT_EQ(55.f, overscroll_delta_x());
2922 EXPECT_EQ(5.f, overscroll_delegate()->delta_x()); 2941 EXPECT_EQ(5.f, overscroll_delegate()->delta_x());
2923 EXPECT_EQ(0.f, overscroll_delegate()->delta_y()); 2942 EXPECT_EQ(0.f, overscroll_delegate()->delta_y());
2924 2943
2925 PressTouchPoint(255, 5); 2944 PressTouchPoint(255, 5);
2926 AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 2945 uint32 touch_press_event_id2 = SendTouchEvent();
2946 AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
2947 touch_press_event_id2);
2927 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 2948 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
2928 2949
2929 SimulateGestureScrollUpdateEvent(200, 0, 0); 2950 SimulateGestureScrollUpdateEvent(200, 0, 0);
2930 EXPECT_EQ(0U, sink_->message_count()); 2951 EXPECT_EQ(0U, sink_->message_count());
2931 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode()); 2952 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
2932 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode()); 2953 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode());
2933 EXPECT_EQ(255.f, overscroll_delta_x()); 2954 EXPECT_EQ(255.f, overscroll_delta_x());
2934 EXPECT_EQ(205.f, overscroll_delegate()->delta_x()); 2955 EXPECT_EQ(205.f, overscroll_delegate()->delta_x());
2935 EXPECT_EQ(0.f, overscroll_delegate()->delta_y()); 2956 EXPECT_EQ(0.f, overscroll_delegate()->delta_y());
2936 2957
2937 // The touch-end/cancel event should always reach the renderer if the page has 2958 // The touch-end/cancel event should always reach the renderer if the page has
2938 // touch handlers. 2959 // touch handlers.
2939 ReleaseTouchPoint(1); 2960 ReleaseTouchPoint(1);
2940 AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 2961 uint32 touch_release_event_id1 = SendTouchEvent();
2962 AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
2963 touch_release_event_id1);
2941 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 2964 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
2942 ReleaseTouchPoint(0); 2965 ReleaseTouchPoint(0);
2943 AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 2966 uint32 touch_release_event_id2 = SendTouchEvent();
2967 AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED,
2968 touch_release_event_id2);
2944 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 2969 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
2945 2970
2946 SimulateGestureEvent(blink::WebInputEvent::GestureScrollEnd, 2971 SimulateGestureEvent(blink::WebInputEvent::GestureScrollEnd,
2947 blink::WebGestureDeviceTouchscreen); 2972 blink::WebGestureDeviceTouchscreen);
2948 base::MessageLoop::current()->PostDelayedTask( 2973 base::MessageLoop::current()->PostDelayedTask(
2949 FROM_HERE, 2974 FROM_HERE,
2950 base::MessageLoop::QuitClosure(), 2975 base::MessageLoop::QuitClosure(),
2951 base::TimeDelta::FromMilliseconds(10)); 2976 base::TimeDelta::FromMilliseconds(10));
2952 base::MessageLoop::current()->Run(); 2977 base::MessageLoop::current()->Run();
2953 EXPECT_EQ(1U, sink_->message_count()); 2978 EXPECT_EQ(1U, sink_->message_count());
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
3298 ui::EventTimeForNow()); 3323 ui::EventTimeForNow());
3299 3324
3300 // Construct a move with a touch id which doesn't exist. 3325 // Construct a move with a touch id which doesn't exist.
3301 ui::TouchEvent invalid_move(ui::ET_TOUCH_MOVED, gfx::Point(30, 30), 1, 3326 ui::TouchEvent invalid_move(ui::ET_TOUCH_MOVED, gfx::Point(30, 30), 1,
3302 ui::EventTimeForNow()); 3327 ui::EventTimeForNow());
3303 3328
3304 // Valid press is handled asynchronously. 3329 // Valid press is handled asynchronously.
3305 view_->OnTouchEvent(&press); 3330 view_->OnTouchEvent(&press);
3306 EXPECT_TRUE(press.synchronous_handling_disabled()); 3331 EXPECT_TRUE(press.synchronous_handling_disabled());
3307 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 3332 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3308 AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_CONSUMED); 3333 AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_CONSUMED,
3334 press.unique_event_id());
3309 3335
3310 // Invalid move is handled synchronously, but is consumed. It should not 3336 // Invalid move is handled synchronously, but is consumed. It should not
3311 // be forwarded to the renderer. 3337 // be forwarded to the renderer.
3312 view_->OnTouchEvent(&invalid_move); 3338 view_->OnTouchEvent(&invalid_move);
3313 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 3339 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
3314 EXPECT_FALSE(invalid_move.synchronous_handling_disabled()); 3340 EXPECT_FALSE(invalid_move.synchronous_handling_disabled());
3315 EXPECT_TRUE(invalid_move.stopped_propagation()); 3341 EXPECT_TRUE(invalid_move.stopped_propagation());
3316 } 3342 }
3317 3343
3318 // Checks key event codes. 3344 // Checks key event codes.
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
3389 // lose track of the number of acks required. 3415 // lose track of the number of acks required.
3390 TEST_F(RenderWidgetHostViewAuraTest, CorrectNumberOfAcksAreDispatched) { 3416 TEST_F(RenderWidgetHostViewAuraTest, CorrectNumberOfAcksAreDispatched) {
3391 view_->InitAsFullscreen(parent_view_); 3417 view_->InitAsFullscreen(parent_view_);
3392 view_->Show(); 3418 view_->Show();
3393 view_->UseFakeDispatcher(); 3419 view_->UseFakeDispatcher();
3394 3420
3395 ui::TouchEvent press1( 3421 ui::TouchEvent press1(
3396 ui::ET_TOUCH_PRESSED, gfx::Point(30, 30), 0, ui::EventTimeForNow()); 3422 ui::ET_TOUCH_PRESSED, gfx::Point(30, 30), 0, ui::EventTimeForNow());
3397 3423
3398 view_->OnTouchEvent(&press1); 3424 view_->OnTouchEvent(&press1);
3399 SendInputEventACK(blink::WebInputEvent::TouchStart, 3425 SendTouchEventACK(blink::WebInputEvent::TouchStart,
3400 INPUT_EVENT_ACK_STATE_CONSUMED); 3426 INPUT_EVENT_ACK_STATE_CONSUMED, press1.unique_event_id());
3401 3427
3402 ui::TouchEvent press2( 3428 ui::TouchEvent press2(
3403 ui::ET_TOUCH_PRESSED, gfx::Point(20, 20), 1, ui::EventTimeForNow()); 3429 ui::ET_TOUCH_PRESSED, gfx::Point(20, 20), 1, ui::EventTimeForNow());
3404 view_->OnTouchEvent(&press2); 3430 view_->OnTouchEvent(&press2);
3405 SendInputEventACK(blink::WebInputEvent::TouchStart, 3431 SendTouchEventACK(blink::WebInputEvent::TouchStart,
3406 INPUT_EVENT_ACK_STATE_CONSUMED); 3432 INPUT_EVENT_ACK_STATE_CONSUMED, press2.unique_event_id());
3407 3433
3408 EXPECT_EQ(2U, view_->dispatcher_->GetAndResetProcessedTouchEventCount()); 3434 EXPECT_EQ(2U, view_->dispatcher_->GetAndResetProcessedTouchEventCount());
3409 } 3435 }
3410 3436
3411 // Tests that the scroll deltas stored within the overscroll controller get 3437 // Tests that the scroll deltas stored within the overscroll controller get
3412 // reset at the end of the overscroll gesture even if the overscroll threshold 3438 // reset at the end of the overscroll gesture even if the overscroll threshold
3413 // isn't surpassed and the overscroll mode stays OVERSCROLL_NONE. 3439 // isn't surpassed and the overscroll mode stays OVERSCROLL_NONE.
3414 TEST_F(RenderWidgetHostViewAuraOverscrollTest, ScrollDeltasResetOnEnd) { 3440 TEST_F(RenderWidgetHostViewAuraOverscrollTest, ScrollDeltasResetOnEnd) {
3415 SetUpOverscrollEnvironment(); 3441 SetUpOverscrollEnvironment();
3416 // Wheel event scroll ending with mouse move. 3442 // Wheel event scroll ending with mouse move.
(...skipping 30 matching lines...) Expand all
3447 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3473 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3448 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 3474 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3449 EXPECT_EQ(15.f, overscroll_delta_x()); 3475 EXPECT_EQ(15.f, overscroll_delta_x());
3450 EXPECT_EQ(-5.f, overscroll_delta_y()); 3476 EXPECT_EQ(-5.f, overscroll_delta_y());
3451 SimulateGestureFlingStartEvent(0.f, 0.1f, blink::WebGestureDeviceTouchpad); 3477 SimulateGestureFlingStartEvent(0.f, 0.1f, blink::WebGestureDeviceTouchpad);
3452 EXPECT_EQ(0.f, overscroll_delta_x()); 3478 EXPECT_EQ(0.f, overscroll_delta_x());
3453 EXPECT_EQ(0.f, overscroll_delta_y()); 3479 EXPECT_EQ(0.f, overscroll_delta_y());
3454 } 3480 }
3455 3481
3456 } // namespace content 3482 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698