| Index: chrome/browser/renderer_host/render_widget_host_unittest.cc
|
| diff --git a/chrome/browser/renderer_host/render_widget_host_unittest.cc b/chrome/browser/renderer_host/render_widget_host_unittest.cc
|
| index dc411ddf94ec5b4330b06f8c4a2faae521dab1f4..e1038496e8dafd6dd7dd1584b6fe94fec90e9d92 100644
|
| --- a/chrome/browser/renderer_host/render_widget_host_unittest.cc
|
| +++ b/chrome/browser/renderer_host/render_widget_host_unittest.cc
|
| @@ -14,6 +14,7 @@
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| using WebKit::WebInputEvent;
|
| +using WebKit::WebMouseWheelEvent;
|
|
|
| // RenderWidgetHostProcess -----------------------------------------------------
|
|
|
| @@ -119,7 +120,7 @@ class TestView : public TestRenderWidgetHostView {
|
| DISALLOW_COPY_AND_ASSIGN(TestView);
|
| };
|
|
|
| -// MockRenderWidgetHostTest ----------------------------------------------------
|
| +// MockRenderWidgetHost ----------------------------------------------------
|
|
|
| class MockRenderWidgetHost : public RenderWidgetHost {
|
| public:
|
| @@ -220,6 +221,15 @@ class RenderWidgetHostTest : public testing::Test {
|
| host_->ForwardKeyboardEvent(key_event);
|
| }
|
|
|
| + void SimulateWheelEvent(float dX, float dY, int modifiers) {
|
| + WebMouseWheelEvent wheel_event;
|
| + wheel_event.type = WebInputEvent::MouseWheel;
|
| + wheel_event.deltaX = dX;
|
| + wheel_event.deltaY = dY;
|
| + wheel_event.modifiers = modifiers;
|
| + host_->ForwardWheelEvent(wheel_event);
|
| + }
|
| +
|
| MessageLoopForUI message_loop_;
|
|
|
| scoped_ptr<TestingProfile> profile_;
|
| @@ -556,3 +566,37 @@ TEST_F(RenderWidgetHostTest, PreHandleRawKeyDownEvent) {
|
| EXPECT_TRUE(host_->unhandled_keyboard_event_called());
|
| EXPECT_EQ(WebInputEvent::KeyUp, host_->unhandled_keyboard_event_type());
|
| }
|
| +
|
| +TEST_F(RenderWidgetHostTest, CoalescesWheelEvents) {
|
| + process_->sink().ClearMessages();
|
| +
|
| + // Simulate wheel events.
|
| + SimulateWheelEvent(0, -5, 0); // sent directly
|
| + SimulateWheelEvent(0, -10, 0); // enqueued
|
| + SimulateWheelEvent(8, -6, 0); // coalesced into previous event
|
| + SimulateWheelEvent(9, -7, 1); // enqueued, different modifiers
|
| +
|
| + // Check that only the first event was sent.
|
| + EXPECT_EQ(1U, process_->sink().message_count());
|
| + EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
|
| + ViewMsg_HandleInputEvent::ID));
|
| + process_->sink().ClearMessages();
|
| +
|
| + // Check that the ACK sends the second message.
|
| + SendInputEventACK(WebInputEvent::MouseWheel, true);
|
| + EXPECT_EQ(1U, process_->sink().message_count());
|
| + EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
|
| + ViewMsg_HandleInputEvent::ID));
|
| + process_->sink().ClearMessages();
|
| +
|
| + // One more time.
|
| + SendInputEventACK(WebInputEvent::MouseWheel, true);
|
| + EXPECT_EQ(1U, process_->sink().message_count());
|
| + EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
|
| + ViewMsg_HandleInputEvent::ID));
|
| + process_->sink().ClearMessages();
|
| +
|
| + // After the final ack, the queue should be empty.
|
| + SendInputEventACK(WebInputEvent::MouseWheel, true);
|
| + EXPECT_EQ(0U, process_->sink().message_count());
|
| +}
|
|
|