| 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 1610 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |