| 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 |