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

Side by Side Diff: content/browser/renderer_host/input/input_router_impl_unittest.cc

Issue 835523006: Explicitly suppress scrolling for wheel events that will trigger zooming (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add DCHECK Created 5 years, 11 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <math.h> 5 #include <math.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_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 1610 matching lines...) Expand 10 before | Expand all | Expand 10 after
1621 EXPECT_EQ(25, wheel_event->y); 1621 EXPECT_EQ(25, wheel_event->y);
1622 EXPECT_EQ(20, wheel_event->globalX); 1622 EXPECT_EQ(20, wheel_event->globalX);
1623 EXPECT_EQ(25, wheel_event->globalY); 1623 EXPECT_EQ(25, wheel_event->globalY);
1624 EXPECT_EQ(20, wheel_event->windowX); 1624 EXPECT_EQ(20, wheel_event->windowX);
1625 EXPECT_EQ(25, wheel_event->windowY); 1625 EXPECT_EQ(25, wheel_event->windowY);
1626 EXPECT_EQ(PinchScaleToWheelDelta(1.5), wheel_event->deltaY); 1626 EXPECT_EQ(PinchScaleToWheelDelta(1.5), wheel_event->deltaY);
1627 EXPECT_EQ(0, wheel_event->deltaX); 1627 EXPECT_EQ(0, wheel_event->deltaX);
1628 EXPECT_TRUE(wheel_event->hasPreciseScrollingDeltas); 1628 EXPECT_TRUE(wheel_event->hasPreciseScrollingDeltas);
1629 EXPECT_EQ(1, wheel_event->wheelTicksY); 1629 EXPECT_EQ(1, wheel_event->wheelTicksY);
1630 EXPECT_EQ(0, wheel_event->wheelTicksX); 1630 EXPECT_EQ(0, wheel_event->wheelTicksX);
1631 EXPECT_FALSE(wheel_event->canScroll);
1631 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1632 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1632 1633
1633 // Indicate that the wheel event was unhandled. 1634 // Indicate that the wheel event was unhandled.
1634 SendInputEventACK(WebInputEvent::MouseWheel, 1635 SendInputEventACK(WebInputEvent::MouseWheel,
1635 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1636 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1636 1637
1637 // Check that the correct unhandled pinch event was received. 1638 // Check that the correct unhandled pinch event was received.
1638 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1639 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1639 ASSERT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type()); 1640 ASSERT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type());
1640 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_handler_->ack_state()); 1641 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, ack_handler_->ack_state());
1641 EXPECT_EQ(1.5f, ack_handler_->acked_gesture_event().data.pinchUpdate.scale); 1642 EXPECT_EQ(1.5f, ack_handler_->acked_gesture_event().data.pinchUpdate.scale);
1642 EXPECT_EQ(0, client_->in_flight_event_count()); 1643 EXPECT_EQ(0, client_->in_flight_event_count());
1643 1644
1644 // Second a second pinch event. 1645 // Second a second pinch event.
1645 SimulateGesturePinchUpdateEvent( 1646 SimulateGesturePinchUpdateEvent(
1646 0.3f, 20, 25, 0, blink::WebGestureDeviceTouchpad); 1647 0.3f, 20, 25, 0, blink::WebGestureDeviceTouchpad);
1647 input_event = GetInputEventFromMessage(*process_->sink().GetMessageAt(0)); 1648 input_event = GetInputEventFromMessage(*process_->sink().GetMessageAt(0));
1648 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type); 1649 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type);
1649 wheel_event = static_cast<const WebMouseWheelEvent*>(input_event); 1650 wheel_event = static_cast<const WebMouseWheelEvent*>(input_event);
1650 EXPECT_FLOAT_EQ(PinchScaleToWheelDelta(0.3f), wheel_event->deltaY); 1651 EXPECT_FLOAT_EQ(PinchScaleToWheelDelta(0.3f), wheel_event->deltaY);
1651 EXPECT_TRUE(wheel_event->hasPreciseScrollingDeltas); 1652 EXPECT_TRUE(wheel_event->hasPreciseScrollingDeltas);
1652 EXPECT_EQ(-1, wheel_event->wheelTicksY); 1653 EXPECT_EQ(-1, wheel_event->wheelTicksY);
1654 EXPECT_FALSE(wheel_event->canScroll);
1653 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1655 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1654 1656
1655 // Indicate that the wheel event was handled this time. 1657 // Indicate that the wheel event was handled this time.
1656 SendInputEventACK(WebInputEvent::MouseWheel, INPUT_EVENT_ACK_STATE_CONSUMED); 1658 SendInputEventACK(WebInputEvent::MouseWheel, INPUT_EVENT_ACK_STATE_CONSUMED);
1657 1659
1658 // Check that the correct HANDLED pinch event was received. 1660 // Check that the correct HANDLED pinch event was received.
1659 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1661 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1660 EXPECT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type()); 1662 EXPECT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type());
1661 EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, ack_handler_->ack_state()); 1663 EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, ack_handler_->ack_state());
1662 EXPECT_FLOAT_EQ(0.3f, 1664 EXPECT_FLOAT_EQ(0.3f,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1722 EXPECT_FLOAT_EQ(1.6f * 1.7f, 1724 EXPECT_FLOAT_EQ(1.6f * 1.7f,
1723 ack_handler_->acked_gesture_event().data.pinchUpdate.scale); 1725 ack_handler_->acked_gesture_event().data.pinchUpdate.scale);
1724 } 1726 }
1725 1727
1726 // Test interleaving pinch and wheel events. 1728 // Test interleaving pinch and wheel events.
1727 TEST_F(InputRouterImplTest, TouchpadPinchAndWheel) { 1729 TEST_F(InputRouterImplTest, TouchpadPinchAndWheel) {
1728 // Simulate queued wheel and pinch events events. 1730 // Simulate queued wheel and pinch events events.
1729 // Note that in practice interleaving pinch and wheel events should be rare 1731 // Note that in practice interleaving pinch and wheel events should be rare
1730 // (eg. requires the use of a mouse and trackpad at the same time). 1732 // (eg. requires the use of a mouse and trackpad at the same time).
1731 1733
1732 // Use the control modifier to match the synthetic wheel events so that 1734 // Synthetic wheel and real wheel events can never be coalesced together.
1733 // they're elligble for coalescing.
1734 int mod = WebInputEvent::ControlKey; 1735 int mod = WebInputEvent::ControlKey;
1735 1736
1736 // Event 1: sent directly. 1737 // Event 1: sent directly.
1737 SimulateWheelEvent(0, -5, mod, true); 1738 SimulateWheelEvent(0, -5, mod, true);
1738 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1739 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1739 1740
1740 // Event 2: enqueued in InputRouter. 1741 // Event 2: enqueued in InputRouter.
1741 SimulateWheelEvent(0, -10, mod, true); 1742 SimulateWheelEvent(0, -10, mod, true);
1742 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1743 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1743 1744
1744 // Event 3: enqueued in InputRouter, not coalesced into #2. 1745 // Event 3: enqueued in InputRouter, not coalesced into #2 because of
1746 // synthesized_from_pinch.
1745 SimulateGesturePinchUpdateEvent( 1747 SimulateGesturePinchUpdateEvent(
1746 1.5f, 20, 25, 0, blink::WebGestureDeviceTouchpad); 1748 1.5f, 20, 25, 0, blink::WebGestureDeviceTouchpad);
1747 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1749 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1748 1750
1749 // Event 4: enqueued in GestureEventQueue. 1751 // Event 4: enqueued in GestureEventQueue.
1750 SimulateGesturePinchUpdateEvent( 1752 SimulateGesturePinchUpdateEvent(
1751 1.2f, 20, 25, 0, blink::WebGestureDeviceTouchpad); 1753 1.2f, 20, 25, 0, blink::WebGestureDeviceTouchpad);
1752 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1754 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1753 1755
1754 // Event 5: coalesced into wheel event for #3. 1756 // Event 5: enqueued in InputRouter, not coalesced into #3 because of
1757 // synthesized_from_pinch.
1755 SimulateWheelEvent(2, 0, mod, true); 1758 SimulateWheelEvent(2, 0, mod, true);
1756 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1759 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1757 1760
1761 // Event 6: coalesced into #5.
1762 SimulateWheelEvent(0, 3, mod, true);
1763 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1764
1758 // Send ack for #1. 1765 // Send ack for #1.
1759 SendInputEventACK(WebInputEvent::MouseWheel, 1766 SendInputEventACK(WebInputEvent::MouseWheel,
1760 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1767 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1761 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1768 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1762 EXPECT_EQ(WebInputEvent::MouseWheel, ack_handler_->ack_event_type()); 1769 EXPECT_EQ(WebInputEvent::MouseWheel, ack_handler_->ack_event_type());
1763 1770
1764 // Verify we sent #2. 1771 // Verify we sent #2.
1765 ASSERT_EQ(1U, process_->sink().message_count()); 1772 ASSERT_EQ(1U, process_->sink().message_count());
1766 const WebInputEvent* input_event = 1773 const WebInputEvent* input_event =
1767 GetInputEventFromMessage(*process_->sink().GetMessageAt(0)); 1774 GetInputEventFromMessage(*process_->sink().GetMessageAt(0));
1768 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type); 1775 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type);
1769 const WebMouseWheelEvent* wheel_event = 1776 const WebMouseWheelEvent* wheel_event =
1770 static_cast<const WebMouseWheelEvent*>(input_event); 1777 static_cast<const WebMouseWheelEvent*>(input_event);
1771 EXPECT_EQ(0, wheel_event->deltaX); 1778 EXPECT_EQ(0, wheel_event->deltaX);
1772 EXPECT_EQ(-10, wheel_event->deltaY); 1779 EXPECT_EQ(-10, wheel_event->deltaY);
1773 EXPECT_EQ(mod, wheel_event->modifiers); 1780 EXPECT_EQ(mod, wheel_event->modifiers);
1781 EXPECT_TRUE(wheel_event->canScroll);
1774 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1782 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1775 1783
1776 // Send ack for #2. 1784 // Send ack for #2.
1777 SendInputEventACK(WebInputEvent::MouseWheel, 1785 SendInputEventACK(WebInputEvent::MouseWheel,
1778 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1786 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1779 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1787 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1780 EXPECT_EQ(WebInputEvent::MouseWheel, ack_handler_->ack_event_type()); 1788 EXPECT_EQ(WebInputEvent::MouseWheel, ack_handler_->ack_event_type());
1781 1789
1782 // Verify we sent #3 (with #5 coalesced in). 1790 // Verify we sent #3.
1783 ASSERT_EQ(1U, process_->sink().message_count()); 1791 ASSERT_EQ(1U, process_->sink().message_count());
1784 input_event = GetInputEventFromMessage(*process_->sink().GetMessageAt(0)); 1792 input_event = GetInputEventFromMessage(*process_->sink().GetMessageAt(0));
1785 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type); 1793 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type);
1786 wheel_event = static_cast<const WebMouseWheelEvent*>(input_event); 1794 wheel_event = static_cast<const WebMouseWheelEvent*>(input_event);
1787 EXPECT_EQ(2, wheel_event->deltaX); 1795 EXPECT_EQ(0, wheel_event->deltaX);
1788 EXPECT_EQ(PinchScaleToWheelDelta(1.5f), wheel_event->deltaY); 1796 EXPECT_EQ(PinchScaleToWheelDelta(1.5f), wheel_event->deltaY);
1789 EXPECT_EQ(mod, wheel_event->modifiers); 1797 EXPECT_EQ(mod, wheel_event->modifiers);
1798 EXPECT_FALSE(wheel_event->canScroll);
1790 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1799 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1791 1800
1801
1792 // Send ack for #3. 1802 // Send ack for #3.
1793 SendInputEventACK(WebInputEvent::MouseWheel, 1803 SendInputEventACK(WebInputEvent::MouseWheel,
1794 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1804 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1795 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1805 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1796 EXPECT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type()); 1806 EXPECT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type());
1797 1807
1808 // Verify we sent #5 with #6 coalesced into it.
1809 ASSERT_EQ(1U, process_->sink().message_count());
1810 input_event = GetInputEventFromMessage(*process_->sink().GetMessageAt(0));
1811 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type);
1812 wheel_event = static_cast<const WebMouseWheelEvent*>(input_event);
1813 EXPECT_EQ(2, wheel_event->deltaX);
1814 EXPECT_EQ(3, wheel_event->deltaY);
1815 EXPECT_EQ(mod, wheel_event->modifiers);
1816 EXPECT_TRUE(wheel_event->canScroll);
1817 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1818
1819 // Send ack for #5.
1820 SendInputEventACK(WebInputEvent::MouseWheel,
1821 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1822 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1823 EXPECT_EQ(WebInputEvent::MouseWheel, ack_handler_->ack_event_type());
1824
1798 // Verify we sent #4. 1825 // Verify we sent #4.
1799 ASSERT_EQ(1U, process_->sink().message_count()); 1826 ASSERT_EQ(1U, process_->sink().message_count());
1800 input_event = GetInputEventFromMessage(*process_->sink().GetMessageAt(0)); 1827 input_event = GetInputEventFromMessage(*process_->sink().GetMessageAt(0));
1801 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type); 1828 ASSERT_EQ(WebInputEvent::MouseWheel, input_event->type);
1802 wheel_event = static_cast<const WebMouseWheelEvent*>(input_event); 1829 wheel_event = static_cast<const WebMouseWheelEvent*>(input_event);
1803 EXPECT_EQ(0, wheel_event->deltaX); 1830 EXPECT_EQ(0, wheel_event->deltaX);
1804 EXPECT_FLOAT_EQ(PinchScaleToWheelDelta(1.2f), wheel_event->deltaY); 1831 EXPECT_FLOAT_EQ(PinchScaleToWheelDelta(1.2f), wheel_event->deltaY);
1805 EXPECT_EQ(mod, wheel_event->modifiers); 1832 EXPECT_EQ(mod, wheel_event->modifiers);
1833 EXPECT_FALSE(wheel_event->canScroll);
1806 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1834 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1807 1835
1808 // Send ack for #4. 1836 // Send ack for #4.
1809 SendInputEventACK(WebInputEvent::MouseWheel, 1837 SendInputEventACK(WebInputEvent::MouseWheel,
1810 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1838 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1811 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount()); 1839 EXPECT_EQ(1U, ack_handler_->GetAndResetAckCount());
1812 EXPECT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type()); 1840 EXPECT_EQ(WebInputEvent::GesturePinchUpdate, ack_handler_->ack_event_type());
1813 } 1841 }
1814 1842
1815 // Test proper handling of touchpad Gesture{Pinch,Scroll}Update sequences. 1843 // Test proper handling of touchpad Gesture{Pinch,Scroll}Update sequences.
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1898 client_overscroll = client_->GetAndResetOverscroll(); 1926 client_overscroll = client_->GetAndResetOverscroll();
1899 EXPECT_EQ(wheel_overscroll.accumulated_overscroll, 1927 EXPECT_EQ(wheel_overscroll.accumulated_overscroll,
1900 client_overscroll.accumulated_overscroll); 1928 client_overscroll.accumulated_overscroll);
1901 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta, 1929 EXPECT_EQ(wheel_overscroll.latest_overscroll_delta,
1902 client_overscroll.latest_overscroll_delta); 1930 client_overscroll.latest_overscroll_delta);
1903 EXPECT_EQ(wheel_overscroll.current_fling_velocity, 1931 EXPECT_EQ(wheel_overscroll.current_fling_velocity,
1904 client_overscroll.current_fling_velocity); 1932 client_overscroll.current_fling_velocity);
1905 } 1933 }
1906 1934
1907 } // namespace content 1935 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698