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