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

Unified Diff: content/browser/renderer_host/render_widget_host_unittest.cc

Issue 11411016: [Mac] Fix issue where rubber-banding may get sporadically stuck. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/render_widget_host_unittest.cc
===================================================================
--- content/browser/renderer_host/render_widget_host_unittest.cc (revision 167782)
+++ content/browser/renderer_host/render_widget_host_unittest.cc (working copy)
@@ -439,6 +439,13 @@
host_->ForwardWheelEvent(wheel_event);
}
+ void SimulateWheelEventWithPhase(WebMouseWheelEvent::Phase phase) {
+ WebMouseWheelEvent wheel_event;
+ wheel_event.type = WebInputEvent::MouseWheel;
+ wheel_event.phase = phase;
+ host_->ForwardWheelEvent(wheel_event);
+ }
+
// Inject simple synthetic WebGestureEvent instances.
void SimulateGestureEvent(WebInputEvent::Type type) {
WebGestureEvent gesture_event;
@@ -520,6 +527,15 @@
touch_event_.type = WebInputEvent::TouchEnd;
}
+ const WebInputEvent* GetInputEventFromMessage(const IPC::Message& message) {
+ PickleIterator iter(message);
+ const char* data;
+ int data_length;
+ if (!message.ReadData(&iter, &data, &data_length))
+ return NULL;
+ return reinterpret_cast<const WebInputEvent*>(data);
+ }
+
MessageLoopForUI message_loop_;
scoped_ptr<TestBrowserContext> browser_context_;
@@ -959,6 +975,41 @@
EXPECT_EQ(0U, process_->sink().message_count());
}
+TEST_F(RenderWidgetHostTest, CoalescesWheelEventsQueuedPhaseEndIsNotDropped) {
+ process_->sink().ClearMessages();
+
+ // Send an initial gesture begin and ACK it.
+ SimulateGestureEvent(WebInputEvent::GestureScrollBegin);
+ EXPECT_EQ(1U, process_->sink().message_count());
+ SendInputEventACK(WebInputEvent::GestureScrollBegin, true);
+ MessageLoop::current()->RunUntilIdle();
+
+ // Send a wheel event, should get sent directly.
+ SimulateWheelEvent(0, -5, 0);
+ EXPECT_EQ(2U, process_->sink().message_count());
+
+ // Send a wheel phase end event before an ACK is received for the previous
+ // wheel event, which should get queued.
+ SimulateWheelEventWithPhase(WebMouseWheelEvent::PhaseEnded);
+ EXPECT_EQ(2U, process_->sink().message_count());
+
+ // A gesture event should now result in the queued phase ended event being
+ // transmitted before it.
+ SimulateGestureEvent(WebInputEvent::GestureScrollEnd);
+ ASSERT_EQ(4U, process_->sink().message_count());
+
+ // Verify the events that were sent.
+ const WebInputEvent* input_event =
+ GetInputEventFromMessage(*process_->sink().GetMessageAt(2));
+ ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type);
+ const WebMouseWheelEvent* wheel_event =
+ static_cast<const WebMouseWheelEvent*>(input_event);
+ ASSERT_EQ(WebMouseWheelEvent::PhaseEnded, wheel_event->phase);
+
+ input_event = GetInputEventFromMessage(*process_->sink().GetMessageAt(3));
+ EXPECT_EQ(WebInputEvent::GestureScrollEnd, input_event->type);
+}
+
TEST_F(RenderWidgetHostTest, CoalescesGesturesEvents) {
// Turn off debounce handling for test isolation.
host_->set_debounce_interval_time_ms(0);
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698