Index: content/browser/renderer_host/render_widget_host_unittest.cc |
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc |
index d5975818aff9224b590ad8eb8b6c77a7687ac51c..3e6253a645ade54ab7c1d369bc1fb047fbe16ba9 100644 |
--- a/content/browser/renderer_host/render_widget_host_unittest.cc |
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc |
@@ -429,6 +429,7 @@ class TestView : public TestRenderWidgetHostView { |
public: |
explicit TestView(RenderWidgetHostImpl* rwh) |
: TestRenderWidgetHostView(rwh), |
+ unhandled_wheel_event_count_(0), |
acked_event_count_(0), |
gesture_event_type_(-1), |
use_fake_physical_backing_size_(false), |
@@ -450,6 +451,9 @@ class TestView : public TestRenderWidgetHostView { |
const WebMouseWheelEvent& unhandled_wheel_event() const { |
return unhandled_wheel_event_; |
} |
+ int unhandled_wheel_event_count() const { |
+ return unhandled_wheel_event_count_; |
+ } |
int gesture_event_type() const { return gesture_event_type_; } |
InputEventAckState ack_result() const { return ack_result_; } |
@@ -471,6 +475,7 @@ class TestView : public TestRenderWidgetHostView { |
++acked_event_count_; |
} |
virtual void UnhandledWheelEvent(const WebMouseWheelEvent& event) OVERRIDE { |
+ unhandled_wheel_event_count_++; |
unhandled_wheel_event_ = event; |
} |
virtual void GestureEventAck(const WebGestureEvent& event, |
@@ -486,6 +491,7 @@ class TestView : public TestRenderWidgetHostView { |
protected: |
WebMouseWheelEvent unhandled_wheel_event_; |
+ int unhandled_wheel_event_count_; |
WebTouchEvent acked_event_; |
int acked_event_count_; |
int gesture_event_type_; |
@@ -506,7 +512,9 @@ class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate { |
prehandle_keyboard_event_called_(false), |
prehandle_keyboard_event_type_(WebInputEvent::Undefined), |
unhandled_keyboard_event_called_(false), |
- unhandled_keyboard_event_type_(WebInputEvent::Undefined) { |
+ unhandled_keyboard_event_type_(WebInputEvent::Undefined), |
+ handle_wheel_event_(false), |
+ handle_wheel_event_called_(false) { |
} |
virtual ~MockRenderWidgetHostDelegate() {} |
@@ -532,6 +540,14 @@ class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate { |
prehandle_keyboard_event_ = handle; |
} |
+ void set_handle_wheel_event(bool handle) { |
+ handle_wheel_event_ = handle; |
+ } |
+ |
+ bool handle_wheel_event_called() { |
+ return handle_wheel_event_called_; |
+ } |
+ |
protected: |
virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, |
bool* is_keyboard_shortcut) OVERRIDE { |
@@ -546,6 +562,12 @@ class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate { |
unhandled_keyboard_event_called_ = true; |
} |
+ virtual bool HandleWheelEvent( |
+ const blink::WebMouseWheelEvent& event) OVERRIDE { |
+ handle_wheel_event_called_ = true; |
+ return handle_wheel_event_; |
+ } |
+ |
private: |
bool prehandle_keyboard_event_; |
bool prehandle_keyboard_event_called_; |
@@ -553,6 +575,9 @@ class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate { |
bool unhandled_keyboard_event_called_; |
WebInputEvent::Type unhandled_keyboard_event_type_; |
+ |
+ bool handle_wheel_event_; |
+ bool handle_wheel_event_called_; |
}; |
// RenderWidgetHostTest -------------------------------------------------------- |
@@ -1150,9 +1175,33 @@ TEST_F(RenderWidgetHostTest, UnhandledWheelEvent) { |
// Send the simulated response from the renderer back. |
SendInputEventACK(WebInputEvent::MouseWheel, |
INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
+ EXPECT_TRUE(delegate_->handle_wheel_event_called()); |
+ EXPECT_EQ(1, view_->unhandled_wheel_event_count()); |
EXPECT_EQ(-5, view_->unhandled_wheel_event().deltaX); |
} |
+TEST_F(RenderWidgetHostTest, HandleWheelEvent) { |
+ // Indicate that we're going to handle this wheel event |
+ delegate_->set_handle_wheel_event(true); |
+ |
+ SimulateWheelEvent(-5, 0, 0, true); |
+ |
+ // Make sure we sent the input event to the renderer. |
+ EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
+ InputMsg_HandleInputEvent::ID)); |
+ process_->sink().ClearMessages(); |
+ |
+ // Send the simulated response from the renderer back. |
+ SendInputEventACK(WebInputEvent::MouseWheel, |
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
+ |
+ // ensure the wheel event handler was invoked |
+ EXPECT_TRUE(delegate_->handle_wheel_event_called()); |
+ |
+ // and that it suppressed the unhandled wheel event handler. |
+ EXPECT_EQ(0, view_->unhandled_wheel_event_count()); |
+} |
+ |
TEST_F(RenderWidgetHostTest, UnhandledGestureEvent) { |
SimulateGestureEvent(WebInputEvent::GestureTwoFingerTap, |
WebGestureEvent::Touchscreen); |