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

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

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

Powered by Google App Engine
This is Rietveld 408576698