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); |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |