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 |