Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(729)

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc

Issue 2882443002: Tiimer based phase info generated for mouse wheel events. (Closed)
Patch Set: review comments addressed. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/renderer_host/render_widget_host_view_aura.h" 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <tuple> 10 #include <tuple>
(...skipping 725 matching lines...) Expand 10 before | Expand all | Expand 10 after
736 void EnableRafAlignedTouchInput() { 736 void EnableRafAlignedTouchInput() {
737 feature_list_.InitFromCommandLine( 737 feature_list_.InitFromCommandLine(
738 features::kRafAlignedTouchInputEvents.name, ""); 738 features::kRafAlignedTouchInputEvents.name, "");
739 } 739 }
740 740
741 void DisableRafAlignedTouchInput() { 741 void DisableRafAlignedTouchInput() {
742 feature_list_.InitFromCommandLine( 742 feature_list_.InitFromCommandLine(
743 "", features::kRafAlignedTouchInputEvents.name); 743 "", features::kRafAlignedTouchInputEvents.name);
744 } 744 }
745 745
746 void EnableWheelScrollLatching() {
747 feature_list_.InitFromCommandLine(
748 features::kTouchpadAndWheelScrollLatching.name, "");
749 }
750
751 void DisableWheelScrollLatching() {
752 feature_list_.InitFromCommandLine(
753 "", features::kTouchpadAndWheelScrollLatching.name);
754 }
755
746 void SetFeatureList(bool raf_aligned_touch, bool wheel_scroll_latching) { 756 void SetFeatureList(bool raf_aligned_touch, bool wheel_scroll_latching) {
747 if (raf_aligned_touch && wheel_scroll_latching) { 757 if (raf_aligned_touch && wheel_scroll_latching) {
748 feature_list_.InitWithFeatures( 758 feature_list_.InitWithFeatures(
749 {features::kRafAlignedTouchInputEvents, 759 {features::kRafAlignedTouchInputEvents,
750 features::kTouchpadAndWheelScrollLatching}, 760 features::kTouchpadAndWheelScrollLatching},
751 {}); 761 {});
752 } else if (raf_aligned_touch && !wheel_scroll_latching) { 762 } else if (raf_aligned_touch && !wheel_scroll_latching) {
753 feature_list_.InitWithFeatures( 763 feature_list_.InitWithFeatures(
754 {features::kRafAlignedTouchInputEvents}, 764 {features::kRafAlignedTouchInputEvents},
755 {features::kTouchpadAndWheelScrollLatching}); 765 {features::kTouchpadAndWheelScrollLatching});
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 850
841 class RenderWidgetHostViewAuraRafAlignedTouchDisabledTest 851 class RenderWidgetHostViewAuraRafAlignedTouchDisabledTest
842 : public RenderWidgetHostViewAuraTest { 852 : public RenderWidgetHostViewAuraTest {
843 public: 853 public:
844 void SetUp() override { 854 void SetUp() override {
845 DisableRafAlignedTouchInput(); 855 DisableRafAlignedTouchInput();
846 RenderWidgetHostViewAuraTest::SetUp(); 856 RenderWidgetHostViewAuraTest::SetUp();
847 } 857 }
848 }; 858 };
849 859
860 class RenderWidgetHostViewAuraWheelScrollLatchingEnabledTest
861 : public RenderWidgetHostViewAuraTest {
862 public:
863 void SetUp() override {
864 EnableWheelScrollLatching();
865 ui::GestureConfiguration::GetInstance()->set_scroll_debounce_interval_in_ms(
866 0);
867 RenderWidgetHostViewAuraTest::SetUp();
868 }
869 };
870
850 void InstallDelegatedFrameHostClient( 871 void InstallDelegatedFrameHostClient(
851 RenderWidgetHostViewAura* render_widget_host_view, 872 RenderWidgetHostViewAura* render_widget_host_view,
852 std::unique_ptr<DelegatedFrameHostClient> delegated_frame_host_client) { 873 std::unique_ptr<DelegatedFrameHostClient> delegated_frame_host_client) {
853 RenderWidgetHostViewAuraTest::InstallDelegatedFrameHostClient( 874 RenderWidgetHostViewAuraTest::InstallDelegatedFrameHostClient(
854 render_widget_host_view, std::move(delegated_frame_host_client)); 875 render_widget_host_view, std::move(delegated_frame_host_client));
855 } 876 }
856 877
857 // Helper class to instantiate RenderWidgetHostViewGuest which is backed 878 // Helper class to instantiate RenderWidgetHostViewGuest which is backed
858 // by an aura platform view. 879 // by an aura platform view.
859 class RenderWidgetHostViewGuestAuraTest : public RenderWidgetHostViewAuraTest { 880 class RenderWidgetHostViewGuestAuraTest : public RenderWidgetHostViewAuraTest {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
933 const ui::LatencyInfo& ui_latency) { 954 const ui::LatencyInfo& ui_latency) {
934 widget_host_->ForwardMouseEventWithLatencyInfo( 955 widget_host_->ForwardMouseEventWithLatencyInfo(
935 SyntheticWebMouseEventBuilder::Build(type), ui_latency); 956 SyntheticWebMouseEventBuilder::Build(type), ui_latency);
936 } 957 }
937 958
938 void SimulateWheelEvent(float dX, float dY, int modifiers, bool precise) { 959 void SimulateWheelEvent(float dX, float dY, int modifiers, bool precise) {
939 widget_host_->ForwardWheelEvent(SyntheticWebMouseWheelEventBuilder::Build( 960 widget_host_->ForwardWheelEvent(SyntheticWebMouseWheelEventBuilder::Build(
940 0, 0, dX, dY, modifiers, precise)); 961 0, 0, dX, dY, modifiers, precise));
941 } 962 }
942 963
964 void SimulateWheelEventWithPhase(float dX,
965 float dY,
966 int modifiers,
967 bool precise,
968 WebMouseWheelEvent::Phase phase) {
969 WebMouseWheelEvent wheel_event = SyntheticWebMouseWheelEventBuilder::Build(
970 0, 0, dX, dY, modifiers, precise);
971 wheel_event.phase = phase;
972 widget_host_->ForwardWheelEvent(wheel_event);
973 }
974
975 void SimulateWheelEventPossiblyIncludingPhase(
976 bool ignore_phase,
977 float dX,
978 float dY,
979 int modifiers,
980 bool precise,
981 WebMouseWheelEvent::Phase phase) {
982 if (ignore_phase) {
983 SimulateWheelEvent(dX, dY, modifiers, precise);
984 } else {
985 SimulateWheelEventWithPhase(dX, dY, modifiers, precise, phase);
986 }
987 }
988
943 void SimulateWheelEventWithLatencyInfo(float dX, 989 void SimulateWheelEventWithLatencyInfo(float dX,
944 float dY, 990 float dY,
945 int modifiers, 991 int modifiers,
946 bool precise, 992 bool precise,
947 const ui::LatencyInfo& ui_latency) { 993 const ui::LatencyInfo& ui_latency) {
948 widget_host_->ForwardWheelEventWithLatencyInfo( 994 widget_host_->ForwardWheelEventWithLatencyInfo(
949 SyntheticWebMouseWheelEventBuilder::Build(0, 0, dX, dY, modifiers, 995 SyntheticWebMouseWheelEventBuilder::Build(0, 0, dX, dY, modifiers,
950 precise), 996 precise),
951 ui_latency); 997 ui_latency);
952 } 998 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1070 void ReleaseTouchPoint(int index) { 1116 void ReleaseTouchPoint(int index) {
1071 touch_event_.ReleasePoint(index); 1117 touch_event_.ReleasePoint(index);
1072 } 1118 }
1073 1119
1074 void ExpectGestureScrollEndForWheelScrolling(bool is_last) { 1120 void ExpectGestureScrollEndForWheelScrolling(bool is_last) {
1075 if (wheel_scroll_latching_enabled_) { 1121 if (wheel_scroll_latching_enabled_) {
1076 if (!is_last) { 1122 if (!is_last) {
1077 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1123 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1078 return; 1124 return;
1079 } 1125 }
1080 // Let the ScrollEnd timer in mouseWheelEventQueue fire. This will cause
1081 // the mouseWheelEventQueue to send a GestureScrollEnd event.
1082 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
1083 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(),
1084 base::TimeDelta::FromMilliseconds(
1085 kDefaultWheelScrollLatchingTransactionMs));
1086 base::RunLoop().Run();
1087 } 1126 }
1088 1127
1089 EXPECT_EQ(1U, sink_->message_count()); 1128 EXPECT_EQ(1U, sink_->message_count());
1090 InputMsg_HandleInputEvent::Param params; 1129 InputMsg_HandleInputEvent::Param params;
1091 if (InputMsg_HandleInputEvent::Read(sink_->GetMessageAt(0), &params)) { 1130 if (InputMsg_HandleInputEvent::Read(sink_->GetMessageAt(0), &params)) {
1092 const blink::WebInputEvent* event = std::get<0>(params); 1131 const blink::WebInputEvent* event = std::get<0>(params);
1093 EXPECT_EQ(WebInputEvent::kGestureScrollEnd, event->GetType()); 1132 EXPECT_EQ(WebInputEvent::kGestureScrollEnd, event->GetType());
1094 } 1133 }
1095 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 1134 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
1096 } 1135 }
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after
1719 1758
1720 ui::TouchEvent release2( 1759 ui::TouchEvent release2(
1721 ui::ET_TOUCH_RELEASED, gfx::Point(20, 20), base::TimeTicks::Now(), 1760 ui::ET_TOUCH_RELEASED, gfx::Point(20, 20), base::TimeTicks::Now(),
1722 ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 0)); 1761 ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 0));
1723 view_->OnTouchEvent(&release2); 1762 view_->OnTouchEvent(&release2);
1724 EXPECT_TRUE(press.synchronous_handling_disabled()); 1763 EXPECT_TRUE(press.synchronous_handling_disabled());
1725 EXPECT_EQ(0U, pointer_state().GetPointerCount()); 1764 EXPECT_EQ(0U, pointer_state().GetPointerCount());
1726 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 1765 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
1727 } 1766 }
1728 1767
1768 TEST_F(RenderWidgetHostViewAuraWheelScrollLatchingEnabledTest,
1769 TimerBasedWheelEventPhaseInfo) {
1770 view_->InitAsChild(nullptr);
1771 view_->Show();
1772 sink_->ClearMessages();
1773
1774 ui::MouseWheelEvent event(gfx::Vector2d(0, 5), gfx::Point(2, 2),
1775 gfx::Point(2, 2), ui::EventTimeForNow(), 0, 0);
1776 view_->OnMouseEvent(&event);
1777 const WebInputEvent* input_event =
1778 GetInputEventFromMessage(*sink_->GetMessageAt(0));
1779 const WebMouseWheelEvent* wheel_event =
1780 static_cast<const WebMouseWheelEvent*>(input_event);
1781 EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, wheel_event->phase);
1782 SendInputEventACK(blink::WebInputEvent::kMouseWheel,
1783 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1784
1785 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(1));
1786 const WebGestureEvent* gesture_event =
1787 static_cast<const WebGestureEvent*>(input_event);
1788 EXPECT_EQ(WebInputEvent::kGestureScrollBegin, gesture_event->GetType());
1789
1790 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(2));
1791 gesture_event = static_cast<const WebGestureEvent*>(input_event);
1792 EXPECT_EQ(WebInputEvent::kGestureScrollUpdate, gesture_event->GetType());
1793 EXPECT_EQ(0U, gesture_event->data.scroll_update.delta_x);
1794 EXPECT_EQ(5U, gesture_event->data.scroll_update.delta_y);
1795 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
1796 INPUT_EVENT_ACK_STATE_CONSUMED);
1797 sink_->ClearMessages();
1798
1799 // Send a ui::ScrollEvent instead of ui::MouseWheel event, the timer based
1800 // phase info doesn't diffrentiate between the two types of events.
1801 ui::ScrollEvent scroll1(ui::ET_SCROLL, gfx::Point(2, 2),
1802 ui::EventTimeForNow(), 0, 0, 2, 0, 2, 2);
1803 view_->OnScrollEvent(&scroll1);
1804 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(0));
1805 wheel_event = static_cast<const WebMouseWheelEvent*>(input_event);
1806 EXPECT_EQ(WebMouseWheelEvent::kPhaseChanged, wheel_event->phase);
1807 SendInputEventACK(blink::WebInputEvent::kMouseWheel,
1808 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1809
1810 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(1));
1811 gesture_event = static_cast<const WebGestureEvent*>(input_event);
1812 EXPECT_EQ(WebInputEvent::kGestureScrollUpdate, gesture_event->GetType());
1813 EXPECT_EQ(0U, gesture_event->data.scroll_update.delta_x);
1814 EXPECT_EQ(2U, gesture_event->data.scroll_update.delta_y);
1815 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
1816 INPUT_EVENT_ACK_STATE_CONSUMED);
1817 sink_->ClearMessages();
1818
1819 // Let the RenderWidgetHostViewEventHandler::mouse_wheel_phase_timer_ fire. A
1820 // synthetic wheel event with zero deltas and kPhaseEnded will be sent.
1821 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
1822 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(),
1823 base::TimeDelta::FromMilliseconds(
1824 kDefaultMouseWheelLatchingTransactionMs));
1825 base::RunLoop().Run();
1826
1827 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(0));
1828 wheel_event = static_cast<const WebMouseWheelEvent*>(input_event);
1829 EXPECT_EQ(WebMouseWheelEvent::kPhaseEnded, wheel_event->phase);
1830 EXPECT_EQ(0U, wheel_event->delta_x);
1831 EXPECT_EQ(0U, wheel_event->delta_y);
1832 SendInputEventACK(blink::WebInputEvent::kMouseWheel,
1833 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1834
1835 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(1));
1836 gesture_event = static_cast<const WebGestureEvent*>(input_event);
1837 EXPECT_EQ(WebInputEvent::kGestureScrollEnd, gesture_event->GetType());
1838 sink_->ClearMessages();
1839 }
1840
1841 // Tests that a gesture fling start with touchpad source stops the
1842 // RenderWidgetHostViewEventHandler::mouse_wheel_phase_timer_ and no synthetic
1843 // wheel event will be sent.
1844 TEST_F(RenderWidgetHostViewAuraWheelScrollLatchingEnabledTest,
1845 TouchpadFlingStartStopsWheelPhaseTimer) {
1846 ui::ScrollEvent scroll0(ui::ET_SCROLL, gfx::Point(2, 2),
1847 ui::EventTimeForNow(), 0, 0, 5, 0, 5, 2);
1848 view_->OnScrollEvent(&scroll0);
1849 const WebInputEvent* input_event =
1850 GetInputEventFromMessage(*sink_->GetMessageAt(0));
1851 const WebMouseWheelEvent* wheel_event =
1852 static_cast<const WebMouseWheelEvent*>(input_event);
1853 EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, wheel_event->phase);
1854 SendInputEventACK(blink::WebInputEvent::kMouseWheel,
1855 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1856
1857 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(1));
1858 const WebGestureEvent* gesture_event =
1859 static_cast<const WebGestureEvent*>(input_event);
1860 EXPECT_EQ(WebInputEvent::kGestureScrollBegin, gesture_event->GetType());
1861
1862 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(2));
1863 gesture_event = static_cast<const WebGestureEvent*>(input_event);
1864 EXPECT_EQ(WebInputEvent::kGestureScrollUpdate, gesture_event->GetType());
1865 EXPECT_EQ(0U, gesture_event->data.scroll_update.delta_x);
1866 EXPECT_EQ(5U, gesture_event->data.scroll_update.delta_y);
1867 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
1868 INPUT_EVENT_ACK_STATE_CONSUMED);
1869 sink_->ClearMessages();
1870
1871 ui::ScrollEvent fling_start(ui::ET_SCROLL_FLING_START, gfx::Point(2, 2),
1872 ui::EventTimeForNow(), 0, 0, 10, 0, 10, 2);
1873 view_->OnScrollEvent(&fling_start);
1874 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(0));
1875 gesture_event = static_cast<const WebGestureEvent*>(input_event);
1876 EXPECT_EQ(WebInputEvent::kGestureFlingStart, gesture_event->GetType());
1877 SendInputEventACK(WebInputEvent::kGestureFlingStart,
1878 INPUT_EVENT_ACK_STATE_CONSUMED);
1879 sink_->ClearMessages();
1880
1881 // Let the RenderWidgetHostViewEventHandler::mouse_wheel_phase_timer_ fire. No
1882 // synthetic wheel event will be sent since the timer has stopped.
1883 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
1884 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(),
1885 base::TimeDelta::FromMilliseconds(
1886 kDefaultMouseWheelLatchingTransactionMs));
1887 base::RunLoop().Run();
1888
1889 EXPECT_EQ(0U, sink_->message_count());
1890
1891 // Handling the next ui::ET_SCROLL event will send a fling cancellation and a
1892 // mouse wheel with kPhaseBegan.
1893 ui::ScrollEvent scroll1(ui::ET_SCROLL, gfx::Point(2, 2),
1894 ui::EventTimeForNow(), 0, 0, 15, 0, 15, 2);
1895 view_->OnScrollEvent(&scroll1);
1896 EXPECT_EQ(2U, sink_->message_count());
1897 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(0));
1898 gesture_event = static_cast<const WebGestureEvent*>(input_event);
1899
1900 EXPECT_EQ(WebInputEvent::kGestureFlingCancel, gesture_event->GetType());
1901 SendInputEventACK(WebInputEvent::kGestureFlingCancel,
1902 INPUT_EVENT_ACK_STATE_CONSUMED);
1903
1904 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(1));
1905 wheel_event = static_cast<const WebMouseWheelEvent*>(input_event);
1906 EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, wheel_event->phase);
1907 sink_->ClearMessages();
1908 }
1909
1910 TEST_F(RenderWidgetHostViewAuraWheelScrollLatchingEnabledTest,
1911 GSBWithTouchSourceStopsWheelScrollSequence) {
1912 ui::ScrollEvent scroll0(ui::ET_SCROLL, gfx::Point(2, 2),
1913 ui::EventTimeForNow(), 0, 0, 5, 0, 5, 2);
1914 view_->OnScrollEvent(&scroll0);
1915 const WebInputEvent* input_event =
1916 GetInputEventFromMessage(*sink_->GetMessageAt(0));
1917 const WebMouseWheelEvent* wheel_event =
1918 static_cast<const WebMouseWheelEvent*>(input_event);
1919 EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, wheel_event->phase);
1920 SendInputEventACK(blink::WebInputEvent::kMouseWheel,
1921 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1922
1923 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(1));
1924 const WebGestureEvent* gesture_event =
1925 static_cast<const WebGestureEvent*>(input_event);
1926 EXPECT_EQ(WebInputEvent::kGestureScrollBegin, gesture_event->GetType());
1927
1928 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(2));
1929 gesture_event = static_cast<const WebGestureEvent*>(input_event);
1930 EXPECT_EQ(WebInputEvent::kGestureScrollUpdate, gesture_event->GetType());
1931 EXPECT_EQ(0U, gesture_event->data.scroll_update.delta_x);
1932 EXPECT_EQ(5U, gesture_event->data.scroll_update.delta_y);
1933 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
1934 INPUT_EVENT_ACK_STATE_CONSUMED);
1935 sink_->ClearMessages();
1936
1937 ui::GestureEventDetails event_details(ui::ET_GESTURE_SCROLL_BEGIN);
1938 event_details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHSCREEN);
1939 ui::GestureEvent scroll_begin(2, 2, 0, ui::EventTimeForNow(), event_details);
1940 view_->OnGestureEvent(&scroll_begin);
1941 EXPECT_EQ(3U, sink_->message_count());
1942
1943 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(0));
1944 wheel_event = static_cast<const WebMouseWheelEvent*>(input_event);
1945 EXPECT_EQ(WebMouseWheelEvent::kPhaseEnded, wheel_event->phase);
1946 EXPECT_EQ(0U, wheel_event->delta_x);
1947 EXPECT_EQ(0U, wheel_event->delta_y);
1948
1949 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(1));
1950 gesture_event = static_cast<const WebGestureEvent*>(input_event);
1951 EXPECT_EQ(WebInputEvent::kGestureScrollEnd, gesture_event->GetType());
1952 EXPECT_EQ(blink::kWebGestureDeviceTouchpad, gesture_event->source_device);
1953
1954 input_event = GetInputEventFromMessage(*sink_->GetMessageAt(2));
1955 gesture_event = static_cast<const WebGestureEvent*>(input_event);
1956 EXPECT_EQ(WebInputEvent::kGestureScrollBegin, gesture_event->GetType());
1957 EXPECT_EQ(blink::kWebGestureDeviceTouchscreen, gesture_event->source_device);
1958 sink_->ClearMessages();
1959 }
1960
1729 // Checks that touch-event state is maintained correctly for multiple touch 1961 // Checks that touch-event state is maintained correctly for multiple touch
1730 // points. 1962 // points.
1731 TEST_F(RenderWidgetHostViewAuraTest, MultiTouchPointsStates) { 1963 TEST_F(RenderWidgetHostViewAuraTest, MultiTouchPointsStates) {
1732 view_->InitAsFullscreen(parent_view_); 1964 view_->InitAsFullscreen(parent_view_);
1733 view_->Show(); 1965 view_->Show();
1734 view_->UseFakeDispatcher(); 1966 view_->UseFakeDispatcher();
1735 GetSentMessageCountAndResetSink(); 1967 GetSentMessageCountAndResetSink();
1736 1968
1737 ui::TouchEvent press0( 1969 ui::TouchEvent press0(
1738 ui::ET_TOUCH_PRESSED, gfx::Point(30, 30), ui::EventTimeForNow(), 1970 ui::ET_TOUCH_PRESSED, gfx::Point(30, 30), ui::EventTimeForNow(),
(...skipping 1782 matching lines...) Expand 10 before | Expand all | Expand 10 after
3521 EXPECT_EQ(ui::MotionEvent::ACTION_DOWN, pointer_state().GetAction()); 3753 EXPECT_EQ(ui::MotionEvent::ACTION_DOWN, pointer_state().GetAction());
3522 EXPECT_EQ(1U, pointer_state().GetPointerCount()); 3754 EXPECT_EQ(1U, pointer_state().GetPointerCount());
3523 EXPECT_EQ(kX, pointer_state().GetX(0)); 3755 EXPECT_EQ(kX, pointer_state().GetX(0));
3524 EXPECT_EQ(kY, pointer_state().GetY(0)); 3756 EXPECT_EQ(kY, pointer_state().GetY(0));
3525 } 3757 }
3526 3758
3527 void RenderWidgetHostViewAuraOverscrollTest::WheelNotPreciseScrollEvent() { 3759 void RenderWidgetHostViewAuraOverscrollTest::WheelNotPreciseScrollEvent() {
3528 SetUpOverscrollEnvironment(); 3760 SetUpOverscrollEnvironment();
3529 3761
3530 // Simulate wheel events. 3762 // Simulate wheel events.
3531 SimulateWheelEvent(-5, 0, 0, false); // sent directly 3763 SimulateWheelEventPossiblyIncludingPhase(
3532 SimulateWheelEvent(-60, 1, 0, false); // enqueued 3764 !wheel_scroll_latching_enabled_, -5, 0, 0, false,
3765 WebMouseWheelEvent::kPhaseBegan); // sent directly
3766 SimulateWheelEventPossiblyIncludingPhase(
3767 !wheel_scroll_latching_enabled_, -60, 1, 0, false,
3768 WebMouseWheelEvent::kPhaseChanged); // enqueued
3533 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 3769 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3534 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 3770 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3535 3771
3536 // Receive ACK the first wheel event as not processed. 3772 // Receive ACK the first wheel event as not processed.
3537 SendInputEventACK(WebInputEvent::kMouseWheel, 3773 SendInputEventACK(WebInputEvent::kMouseWheel,
3538 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3774 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3539 ExpectGestureScrollEventsAfterMouseWheelACK(true, true); 3775 ExpectGestureScrollEventsAfterMouseWheelACK(true, true);
3540 3776
3541 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 3777 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3542 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3778 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3543 ExpectGestureScrollEndForWheelScrolling(false); 3779 ExpectGestureScrollEndForWheelScrolling(false);
3544 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 3780 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3545 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); 3781 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
3546 3782
3547 SendInputEventACK(WebInputEvent::kMouseWheel, 3783 SendInputEventACK(WebInputEvent::kMouseWheel,
3548 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3784 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3549 ExpectGestureScrollEventsAfterMouseWheelACK(false, false); 3785 ExpectGestureScrollEventsAfterMouseWheelACK(false, false);
3550 3786
3551 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 3787 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3552 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3788 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3789 if (wheel_scroll_latching_enabled_) {
3790 SimulateWheelEventWithPhase(0, 0, 0, false,
3791 WebMouseWheelEvent::kPhaseEnded);
3792 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3793 SendInputEventACK(WebInputEvent::kMouseWheel,
3794 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3795 }
3553 ExpectGestureScrollEndForWheelScrolling(true); 3796 ExpectGestureScrollEndForWheelScrolling(true);
3554 3797
3555 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 3798 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3556 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); 3799 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
3557 } 3800 }
3558 TEST_F(RenderWidgetHostViewAuraOverscrollTest, WheelNotPreciseScrollEvent) { 3801 TEST_F(RenderWidgetHostViewAuraOverscrollTest, WheelNotPreciseScrollEvent) {
3559 WheelNotPreciseScrollEvent(); 3802 WheelNotPreciseScrollEvent();
3560 } 3803 }
3561 TEST_F(RenderWidgetHostViewAuraOverscrollWithoutWheelScrollLatchingTest, 3804 TEST_F(RenderWidgetHostViewAuraOverscrollWithoutWheelScrollLatchingTest,
3562 WheelNotPreciseScrollEvent) { 3805 WheelNotPreciseScrollEvent) {
3563 WheelNotPreciseScrollEvent(); 3806 WheelNotPreciseScrollEvent();
3564 } 3807 }
3565 3808
3566 void RenderWidgetHostViewAuraOverscrollTest::WheelScrollEventOverscrolls() { 3809 void RenderWidgetHostViewAuraOverscrollTest::WheelScrollEventOverscrolls() {
3567 SetUpOverscrollEnvironment(); 3810 SetUpOverscrollEnvironment();
3568 3811
3569 // Simulate wheel events. 3812 // Simulate wheel events.
3570 SimulateWheelEvent(-5, 0, 0, true); // sent directly 3813 SimulateWheelEventPossiblyIncludingPhase(
3571 SimulateWheelEvent(-1, 1, 0, true); // enqueued 3814 !wheel_scroll_latching_enabled_, -5, 0, 0, true,
3572 SimulateWheelEvent(-10, -3, 0, true); // coalesced into previous event 3815 WebMouseWheelEvent::kPhaseBegan); // sent directly
3573 SimulateWheelEvent(-15, -1, 0, true); // coalesced into previous event 3816 SimulateWheelEventPossiblyIncludingPhase(
3574 SimulateWheelEvent(-30, -3, 0, true); // coalesced into previous event 3817 !wheel_scroll_latching_enabled_, -1, 1, 0, true,
3575 SimulateWheelEvent(-20, 6, 1, true); // enqueued, different modifiers 3818 WebMouseWheelEvent::kPhaseChanged); // enqueued
3819 SimulateWheelEventPossiblyIncludingPhase(
3820 !wheel_scroll_latching_enabled_, -10, -3, 0, true,
3821 WebMouseWheelEvent::kPhaseChanged); // coalesced into previous event
3822 SimulateWheelEventPossiblyIncludingPhase(
3823 !wheel_scroll_latching_enabled_, -15, -1, 0, true,
3824 WebMouseWheelEvent::kPhaseChanged); // coalesced into previous event
3825 SimulateWheelEventPossiblyIncludingPhase(
3826 !wheel_scroll_latching_enabled_, -30, -3, 0, true,
3827 WebMouseWheelEvent::kPhaseChanged); // coalesced into previous event
3828 SimulateWheelEventPossiblyIncludingPhase(
3829 !wheel_scroll_latching_enabled_, -20, 6, 1, true,
3830 WebMouseWheelEvent::kPhaseChanged); // enqueued, different modifiers
3576 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 3831 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3577 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 3832 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3578 3833
3579 // Receive ACK the first wheel event as not processed. 3834 // Receive ACK the first wheel event as not processed.
3580 SendInputEventACK(WebInputEvent::kMouseWheel, 3835 SendInputEventACK(WebInputEvent::kMouseWheel,
3581 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3836 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3582 ExpectGestureScrollEventsAfterMouseWheelACK(true, true); 3837 ExpectGestureScrollEventsAfterMouseWheelACK(true, true);
3583 3838
3584 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 3839 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3585 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3840 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
3632 WheelScrollEventOverscrolls(); 3887 WheelScrollEventOverscrolls();
3633 } 3888 }
3634 3889
3635 // Tests that if some scroll events are consumed towards the start, then 3890 // Tests that if some scroll events are consumed towards the start, then
3636 // subsequent scrolls do not horizontal overscroll. 3891 // subsequent scrolls do not horizontal overscroll.
3637 void RenderWidgetHostViewAuraOverscrollTest:: 3892 void RenderWidgetHostViewAuraOverscrollTest::
3638 WheelScrollConsumedDoNotHorizOverscroll() { 3893 WheelScrollConsumedDoNotHorizOverscroll() {
3639 SetUpOverscrollEnvironment(); 3894 SetUpOverscrollEnvironment();
3640 3895
3641 // Simulate wheel events. 3896 // Simulate wheel events.
3642 SimulateWheelEvent(-5, 0, 0, true); // sent directly 3897 SimulateWheelEventPossiblyIncludingPhase(
3643 SimulateWheelEvent(-1, -1, 0, true); // enqueued 3898 !wheel_scroll_latching_enabled_, -5, 0, 0, true,
3644 SimulateWheelEvent(-10, -3, 0, true); // coalesced into previous event 3899 WebMouseWheelEvent::kPhaseBegan); // sent directly
3645 SimulateWheelEvent(-15, -1, 0, true); // coalesced into previous event 3900 SimulateWheelEventPossiblyIncludingPhase(
3646 SimulateWheelEvent(-30, -3, 0, true); // coalesced into previous event 3901 !wheel_scroll_latching_enabled_, -1, -1, 0, true,
3647 SimulateWheelEvent(-20, 6, 1, true); // enqueued, different modifiers 3902 WebMouseWheelEvent::kPhaseChanged); // enqueued
3903 SimulateWheelEventPossiblyIncludingPhase(
3904 !wheel_scroll_latching_enabled_, -10, -3, 0, true,
3905 WebMouseWheelEvent::kPhaseChanged); // coalesced into previous event
3906 SimulateWheelEventPossiblyIncludingPhase(
3907 !wheel_scroll_latching_enabled_, -15, -1, 0, true,
3908 WebMouseWheelEvent::kPhaseChanged); // coalesced into previous event
3909 SimulateWheelEventPossiblyIncludingPhase(
3910 !wheel_scroll_latching_enabled_, -30, -3, 0, true,
3911 WebMouseWheelEvent::kPhaseChanged); // coalesced into previous event
3912 SimulateWheelEventPossiblyIncludingPhase(
3913 !wheel_scroll_latching_enabled_, -20, 6, 1, true,
3914 WebMouseWheelEvent::kPhaseChanged); // enqueued, different modifiers
3915
3648 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 3916 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3649 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 3917 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3650 3918
3651 // Receive ACK the first wheel event as processed. 3919 // Receive ACK the first wheel event as processed.
3652 SendInputEventACK(WebInputEvent::kMouseWheel, 3920 SendInputEventACK(WebInputEvent::kMouseWheel,
3653 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3921 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3654 ExpectGestureScrollEventsAfterMouseWheelACK(true, true); 3922 ExpectGestureScrollEventsAfterMouseWheelACK(true, true);
3655 3923
3656 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 3924 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3657 INPUT_EVENT_ACK_STATE_CONSUMED); 3925 INPUT_EVENT_ACK_STATE_CONSUMED);
(...skipping 14 matching lines...) Expand all
3672 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 3940 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3673 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3941 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3674 ExpectGestureScrollEndForWheelScrolling(false); 3942 ExpectGestureScrollEndForWheelScrolling(false);
3675 3943
3676 SendInputEventACK(WebInputEvent::kMouseWheel, 3944 SendInputEventACK(WebInputEvent::kMouseWheel,
3677 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3945 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3678 ExpectGestureScrollEventsAfterMouseWheelACK(false, false); 3946 ExpectGestureScrollEventsAfterMouseWheelACK(false, false);
3679 3947
3680 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 3948 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3681 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3949 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3950 if (wheel_scroll_latching_enabled_) {
3951 SimulateWheelEventWithPhase(0, 0, 0, true, WebMouseWheelEvent::kPhaseEnded);
3952 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3953 SendInputEventACK(WebInputEvent::kMouseWheel,
3954 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3955 }
3956
3682 ExpectGestureScrollEndForWheelScrolling(true); 3957 ExpectGestureScrollEndForWheelScrolling(true);
3683 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 3958 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3684 } 3959 }
3685 TEST_F(RenderWidgetHostViewAuraOverscrollTest, 3960 TEST_F(RenderWidgetHostViewAuraOverscrollTest,
3686 WheelScrollConsumedDoNotHorizOverscroll) { 3961 WheelScrollConsumedDoNotHorizOverscroll) {
3687 WheelScrollConsumedDoNotHorizOverscroll(); 3962 WheelScrollConsumedDoNotHorizOverscroll();
3688 } 3963 }
3689 TEST_F(RenderWidgetHostViewAuraOverscrollWithoutWheelScrollLatchingTest, 3964 TEST_F(RenderWidgetHostViewAuraOverscrollWithoutWheelScrollLatchingTest,
3690 WheelScrollConsumedDoNotHorizOverscroll) { 3965 WheelScrollConsumedDoNotHorizOverscroll) {
3691 WheelScrollConsumedDoNotHorizOverscroll(); 3966 WheelScrollConsumedDoNotHorizOverscroll();
3692 } 3967 }
3693 3968
3694 // Tests that wheel-scrolling correctly turns overscroll on and off. 3969 // Tests that wheel-scrolling correctly turns overscroll on and off.
3695 void RenderWidgetHostViewAuraOverscrollTest::WheelScrollOverscrollToggle() { 3970 void RenderWidgetHostViewAuraOverscrollTest::WheelScrollOverscrollToggle() {
3696 SetUpOverscrollEnvironment(); 3971 SetUpOverscrollEnvironment();
3697 3972
3698 // Send a wheel event. ACK the event as not processed. This should not 3973 // Send a wheel event. ACK the event as not processed. This should not
3699 // initiate an overscroll gesture since it doesn't cross the threshold yet. 3974 // initiate an overscroll gesture since it doesn't cross the threshold yet.
3700 SimulateWheelEvent(10, 0, 0, true); 3975 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, 10,
3976 0, 0, true,
3977 WebMouseWheelEvent::kPhaseBegan);
3701 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 3978 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3702 SendInputEventACK(WebInputEvent::kMouseWheel, 3979 SendInputEventACK(WebInputEvent::kMouseWheel,
3703 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3980 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3704 ExpectGestureScrollEventsAfterMouseWheelACK(true, false); 3981 ExpectGestureScrollEventsAfterMouseWheelACK(true, false);
3705 3982
3706 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 3983 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3707 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3984 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3708 ExpectGestureScrollEndForWheelScrolling(false); 3985 ExpectGestureScrollEndForWheelScrolling(false);
3709 3986
3710 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 3987 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3711 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); 3988 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
3712 3989
3713 // Scroll some more so as to not overscroll. 3990 // Scroll some more so as to not overscroll.
3714 SimulateWheelEvent(10, 0, 0, true); 3991 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, 10,
3992 0, 0, true,
3993 WebMouseWheelEvent::kPhaseChanged);
3715 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 3994 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3716 SendInputEventACK(WebInputEvent::kMouseWheel, 3995 SendInputEventACK(WebInputEvent::kMouseWheel,
3717 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 3996 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3718 ExpectGestureScrollEventsAfterMouseWheelACK(false, false); 3997 ExpectGestureScrollEventsAfterMouseWheelACK(false, false);
3719 3998
3720 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 3999 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3721 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4000 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3722 ExpectGestureScrollEndForWheelScrolling(false); 4001 ExpectGestureScrollEndForWheelScrolling(false);
3723 4002
3724 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4003 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3725 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); 4004 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
3726 4005
3727 // Scroll some more to initiate an overscroll. 4006 // Scroll some more to initiate an overscroll.
3728 SimulateWheelEvent(40, 0, 0, true); 4007 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, 40,
4008 0, 0, true,
4009 WebMouseWheelEvent::kPhaseChanged);
3729 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4010 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3730 SendInputEventACK(WebInputEvent::kMouseWheel, 4011 SendInputEventACK(WebInputEvent::kMouseWheel,
3731 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4012 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3732 ExpectGestureScrollEventsAfterMouseWheelACK(false, false); 4013 ExpectGestureScrollEventsAfterMouseWheelACK(false, false);
3733 4014
3734 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4015 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3735 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4016 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3736 ExpectGestureScrollEndForWheelScrolling(false); 4017 ExpectGestureScrollEndForWheelScrolling(false);
3737 4018
3738 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode()); 4019 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
3739 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode()); 4020 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode());
3740 EXPECT_EQ(60.f, overscroll_delta_x()); 4021 EXPECT_EQ(60.f, overscroll_delta_x());
3741 EXPECT_EQ(10.f, overscroll_delegate()->delta_x()); 4022 EXPECT_EQ(10.f, overscroll_delegate()->delta_x());
3742 EXPECT_EQ(0.f, overscroll_delegate()->delta_y()); 4023 EXPECT_EQ(0.f, overscroll_delegate()->delta_y());
3743 4024
3744 // Scroll in the reverse direction enough to abort the overscroll. 4025 // Scroll in the reverse direction enough to abort the overscroll.
3745 SimulateWheelEvent(-20, 0, 0, true); 4026 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, -20,
4027 0, 0, true,
4028 WebMouseWheelEvent::kPhaseChanged);
3746 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4029 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3747 SendInputEventACK(WebInputEvent::kMouseWheel, 4030 SendInputEventACK(WebInputEvent::kMouseWheel,
3748 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4031 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3749 if (wheel_scroll_latching_enabled_) { 4032 if (wheel_scroll_latching_enabled_) {
3750 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 4033 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
3751 } else { 4034 } else {
3752 // ScrollBegin and ScrollEnd will be queued events. 4035 // ScrollBegin and ScrollEnd will be queued events.
3753 EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); 4036 EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
3754 } 4037 }
3755 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4038 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3756 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); 4039 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
3757 4040
3758 // Continue to scroll in the reverse direction. 4041 // Continue to scroll in the reverse direction.
3759 SimulateWheelEvent(-20, 0, 0, true); 4042 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, -20,
4043 0, 0, true,
4044 WebMouseWheelEvent::kPhaseChanged);
4045
3760 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4046 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3761 SendInputEventACK(WebInputEvent::kMouseWheel, 4047 SendInputEventACK(WebInputEvent::kMouseWheel,
3762 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4048 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3763 ExpectGestureScrollEventsAfterMouseWheelACK(false, false); 4049 ExpectGestureScrollEventsAfterMouseWheelACK(false, false);
3764 4050
3765 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4051 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3766 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4052 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3767 ExpectGestureScrollEndForWheelScrolling(false); 4053 ExpectGestureScrollEndForWheelScrolling(false);
3768 4054
3769 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4055 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3770 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); 4056 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
3771 4057
3772 // Continue to scroll in the reverse direction enough to initiate overscroll 4058 // Continue to scroll in the reverse direction enough to initiate overscroll
3773 // in that direction. 4059 // in that direction.
3774 SimulateWheelEvent(-55, 0, 0, true); 4060 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, -55,
4061 0, 0, true,
4062 WebMouseWheelEvent::kPhaseChanged);
3775 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4063 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3776 SendInputEventACK(WebInputEvent::kMouseWheel, 4064 SendInputEventACK(WebInputEvent::kMouseWheel,
3777 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4065 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3778 ExpectGestureScrollEventsAfterMouseWheelACK(false, false); 4066 ExpectGestureScrollEventsAfterMouseWheelACK(false, false);
3779 4067
3780 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4068 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3781 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4069 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4070 if (wheel_scroll_latching_enabled_) {
4071 SimulateWheelEventWithPhase(0, 0, 0, true, WebMouseWheelEvent::kPhaseEnded);
4072 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
4073 SendInputEventACK(WebInputEvent::kMouseWheel,
4074 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4075 }
3782 ExpectGestureScrollEndForWheelScrolling(true); 4076 ExpectGestureScrollEndForWheelScrolling(true);
3783 4077
3784 EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode()); 4078 EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode());
3785 EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode()); 4079 EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode());
3786 EXPECT_EQ(-75.f, overscroll_delta_x()); 4080 EXPECT_EQ(-75.f, overscroll_delta_x());
3787 EXPECT_EQ(-25.f, overscroll_delegate()->delta_x()); 4081 EXPECT_EQ(-25.f, overscroll_delegate()->delta_x());
3788 EXPECT_EQ(0.f, overscroll_delegate()->delta_y()); 4082 EXPECT_EQ(0.f, overscroll_delegate()->delta_y());
3789 } 4083 }
3790 TEST_F(RenderWidgetHostViewAuraOverscrollTest, WheelScrollOverscrollToggle) { 4084 TEST_F(RenderWidgetHostViewAuraOverscrollTest, WheelScrollOverscrollToggle) {
3791 WheelScrollOverscrollToggle(); 4085 WheelScrollOverscrollToggle();
3792 } 4086 }
3793 TEST_F(RenderWidgetHostViewAuraOverscrollWithoutWheelScrollLatchingTest, 4087 TEST_F(RenderWidgetHostViewAuraOverscrollWithoutWheelScrollLatchingTest,
3794 WheelScrollOverscrollToggle) { 4088 WheelScrollOverscrollToggle) {
3795 WheelScrollOverscrollToggle(); 4089 WheelScrollOverscrollToggle();
3796 } 4090 }
3797 4091
3798 void RenderWidgetHostViewAuraOverscrollTest::ScrollEventsOverscrollWithFling() { 4092 void RenderWidgetHostViewAuraOverscrollTest::ScrollEventsOverscrollWithFling() {
3799 SetUpOverscrollEnvironment(); 4093 SetUpOverscrollEnvironment();
3800 4094
3801 // Send a wheel event. ACK the event as not processed. This should not 4095 // Send a wheel event. ACK the event as not processed. This should not
3802 // initiate an overscroll gesture since it doesn't cross the threshold yet. 4096 // initiate an overscroll gesture since it doesn't cross the threshold yet.
3803 SimulateWheelEvent(10, 0, 0, true); 4097 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, 10,
4098 0, 0, true,
4099 WebMouseWheelEvent::kPhaseBegan);
3804 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4100 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3805 SendInputEventACK(WebInputEvent::kMouseWheel, 4101 SendInputEventACK(WebInputEvent::kMouseWheel,
3806 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4102 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3807 ExpectGestureScrollEventsAfterMouseWheelACK(true, false); 4103 ExpectGestureScrollEventsAfterMouseWheelACK(true, false);
3808 4104
3809 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4105 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3810 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4106 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3811 ExpectGestureScrollEndForWheelScrolling(false); 4107 ExpectGestureScrollEndForWheelScrolling(false);
3812 4108
3813 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4109 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3814 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); 4110 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
3815 4111
3816 // Scroll some more so as to not overscroll. 4112 // Scroll some more so as to not overscroll.
3817 SimulateWheelEvent(20, 0, 0, true); 4113 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, 20,
4114 0, 0, true,
4115 WebMouseWheelEvent::kPhaseChanged);
3818 EXPECT_EQ(1U, sink_->message_count()); 4116 EXPECT_EQ(1U, sink_->message_count());
3819 SendInputEventACK(WebInputEvent::kMouseWheel, 4117 SendInputEventACK(WebInputEvent::kMouseWheel,
3820 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4118 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3821 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4119 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3822 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4120 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3823 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4121 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3824 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); 4122 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
3825 sink_->ClearMessages(); 4123 sink_->ClearMessages();
3826 4124
3827 // Scroll some more to initiate an overscroll. 4125 // Scroll some more to initiate an overscroll.
3828 SimulateWheelEvent(30, 0, 0, true); 4126 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, 30,
4127 0, 0, true,
4128 WebMouseWheelEvent::kPhaseChanged);
3829 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4129 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3830 SendInputEventACK(WebInputEvent::kMouseWheel, 4130 SendInputEventACK(WebInputEvent::kMouseWheel,
3831 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4131 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3832 ExpectGestureScrollEventsAfterMouseWheelACK(false, false); 4132 ExpectGestureScrollEventsAfterMouseWheelACK(false, false);
3833 4133
3834 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4134 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3835 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4135 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3836 ExpectGestureScrollEndForWheelScrolling(false); 4136 ExpectGestureScrollEndForWheelScrolling(false);
3837 4137
3838 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode()); 4138 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
3839 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode()); 4139 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode());
3840 4140
3841 EXPECT_EQ(60.f, overscroll_delta_x()); 4141 EXPECT_EQ(60.f, overscroll_delta_x());
3842 EXPECT_EQ(10.f, overscroll_delegate()->delta_x()); 4142 EXPECT_EQ(10.f, overscroll_delegate()->delta_x());
3843 EXPECT_EQ(0.f, overscroll_delegate()->delta_y()); 4143 EXPECT_EQ(0.f, overscroll_delegate()->delta_y());
3844 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 4144 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
3845 4145
3846 // Send a fling start, but with a small velocity, so that the overscroll is 4146 // Send a fling start, but with a small velocity, so that the overscroll is
3847 // aborted. The fling should proceed to the renderer, through the gesture 4147 // aborted. The fling should proceed to the renderer, through the gesture
3848 // event filter. 4148 // event filter.
3849 SimulateGestureEvent(WebInputEvent::kGestureScrollBegin, 4149 SimulateGestureEvent(WebInputEvent::kGestureScrollBegin,
3850 blink::kWebGestureDeviceTouchscreen); 4150 blink::kWebGestureDeviceTouchscreen);
3851 SimulateGestureFlingStartEvent(0.f, 0.1f, blink::kWebGestureDeviceTouchpad); 4151 SimulateGestureFlingStartEvent(0.f, 0.1f, blink::kWebGestureDeviceTouchpad);
3852 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4152 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3853 4153
3854 if (!wheel_scroll_latching_enabled_) { 4154 // ScrollBegin and FlingStart will be queued events.
3855 // ScrollBegin and FlingStart will be queued events. 4155 EXPECT_EQ(2U, sink_->message_count());
3856 EXPECT_EQ(2U, sink_->message_count());
3857 } else {
3858 // ScrollEnd, ScrollBegin, and FlingStart will be queued events.
3859 EXPECT_EQ(3U, sink_->message_count());
3860 }
3861 } 4156 }
3862 TEST_F(RenderWidgetHostViewAuraOverscrollTest, 4157 TEST_F(RenderWidgetHostViewAuraOverscrollTest,
3863 ScrollEventsOverscrollWithFling) { 4158 ScrollEventsOverscrollWithFling) {
3864 ScrollEventsOverscrollWithFling(); 4159 ScrollEventsOverscrollWithFling();
3865 } 4160 }
3866 TEST_F(RenderWidgetHostViewAuraOverscrollWithoutWheelScrollLatchingTest, 4161 TEST_F(RenderWidgetHostViewAuraOverscrollWithoutWheelScrollLatchingTest,
3867 ScrollEventsOverscrollWithFling) { 4162 ScrollEventsOverscrollWithFling) {
3868 ScrollEventsOverscrollWithFling(); 4163 ScrollEventsOverscrollWithFling();
3869 } 4164 }
3870 4165
3871 // Same as ScrollEventsOverscrollWithFling, but with zero velocity. Checks that 4166 // Same as ScrollEventsOverscrollWithFling, but with zero velocity. Checks that
3872 // the zero-velocity fling does not reach the renderer. 4167 // the zero-velocity fling does not reach the renderer.
3873 void RenderWidgetHostViewAuraOverscrollTest:: 4168 void RenderWidgetHostViewAuraOverscrollTest::
3874 ScrollEventsOverscrollWithZeroFling() { 4169 ScrollEventsOverscrollWithZeroFling() {
3875 SetUpOverscrollEnvironment(); 4170 SetUpOverscrollEnvironment();
3876 4171
3877 // Send a wheel event. ACK the event as not processed. This should not 4172 // Send a wheel event. ACK the event as not processed. This should not
3878 // initiate an overscroll gesture since it doesn't cross the threshold yet. 4173 // initiate an overscroll gesture since it doesn't cross the threshold yet.
3879 SimulateWheelEvent(10, 0, 0, true); 4174 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, 10,
4175 0, 0, true,
4176 WebMouseWheelEvent::kPhaseBegan);
3880 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4177 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3881 SendInputEventACK(WebInputEvent::kMouseWheel, 4178 SendInputEventACK(WebInputEvent::kMouseWheel,
3882 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4179 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3883 ExpectGestureScrollEventsAfterMouseWheelACK(true, false); 4180 ExpectGestureScrollEventsAfterMouseWheelACK(true, false);
3884 4181
3885 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4182 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3886 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4183 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3887 ExpectGestureScrollEndForWheelScrolling(false); 4184 ExpectGestureScrollEndForWheelScrolling(false);
3888 4185
3889 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4186 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3890 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); 4187 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
3891 4188
3892 // Scroll some more so as to not overscroll. 4189 // Scroll some more so as to not overscroll.
3893 SimulateWheelEvent(20, 0, 0, true); 4190 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, 20,
4191 0, 0, true,
4192 WebMouseWheelEvent::kPhaseChanged);
3894 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4193 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3895 SendInputEventACK(WebInputEvent::kMouseWheel, 4194 SendInputEventACK(WebInputEvent::kMouseWheel,
3896 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4195 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3897 ExpectGestureScrollEventsAfterMouseWheelACK(false, false); 4196 ExpectGestureScrollEventsAfterMouseWheelACK(false, false);
3898 4197
3899 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4198 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3900 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4199 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3901 ExpectGestureScrollEndForWheelScrolling(false); 4200 ExpectGestureScrollEndForWheelScrolling(false);
3902 4201
3903 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4202 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3904 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode()); 4203 EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
3905 4204
3906 // Scroll some more to initiate an overscroll. 4205 // Scroll some more to initiate an overscroll.
3907 SimulateWheelEvent(30, 0, 0, true); 4206 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, 30,
4207 0, 0, true,
4208 WebMouseWheelEvent::kPhaseChanged);
3908 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4209 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
3909 SendInputEventACK(WebInputEvent::kMouseWheel, 4210 SendInputEventACK(WebInputEvent::kMouseWheel,
3910 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4211 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3911 ExpectGestureScrollEventsAfterMouseWheelACK(false, false); 4212 ExpectGestureScrollEventsAfterMouseWheelACK(false, false);
3912 4213
3913 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4214 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
3914 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4215 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
3915 ExpectGestureScrollEndForWheelScrolling(false); 4216 ExpectGestureScrollEndForWheelScrolling(false);
3916 4217
3917 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode()); 4218 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
3918 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode()); 4219 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode());
3919 4220
3920 EXPECT_EQ(60.f, overscroll_delta_x()); 4221 EXPECT_EQ(60.f, overscroll_delta_x());
3921 EXPECT_EQ(10.f, overscroll_delegate()->delta_x()); 4222 EXPECT_EQ(10.f, overscroll_delegate()->delta_x());
3922 EXPECT_EQ(0.f, overscroll_delegate()->delta_y()); 4223 EXPECT_EQ(0.f, overscroll_delegate()->delta_y());
3923 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 4224 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
3924 4225
3925 // Send a fling start, but with a small velocity, so that the overscroll is 4226 // Send a fling start, but with a small velocity, so that the overscroll is
3926 // aborted. The fling should proceed to the renderer, through the gesture 4227 // aborted. The fling should proceed to the renderer, through the gesture
3927 // event filter. 4228 // event filter.
3928 SimulateGestureEvent(WebInputEvent::kGestureScrollBegin, 4229 SimulateGestureEvent(WebInputEvent::kGestureScrollBegin,
3929 blink::kWebGestureDeviceTouchscreen); 4230 blink::kWebGestureDeviceTouchscreen);
3930 SimulateGestureFlingStartEvent(10.f, 0.f, blink::kWebGestureDeviceTouchpad); 4231 SimulateGestureFlingStartEvent(10.f, 0.f, blink::kWebGestureDeviceTouchpad);
3931 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4232 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
3932 4233
3933 if (!wheel_scroll_latching_enabled_) {
3934 // ScrollBegin and FlingStart will be queued events. 4234 // ScrollBegin and FlingStart will be queued events.
3935 EXPECT_EQ(2U, sink_->message_count()); 4235 EXPECT_EQ(2U, sink_->message_count());
3936 } else {
3937 // ScrollEnd, ScrollBegin, and FlingStart will be queued events.
3938 EXPECT_EQ(3U, sink_->message_count());
3939 }
3940 } 4236 }
3941 TEST_F(RenderWidgetHostViewAuraOverscrollTest, 4237 TEST_F(RenderWidgetHostViewAuraOverscrollTest,
3942 ScrollEventsOverscrollWithZeroFling) { 4238 ScrollEventsOverscrollWithZeroFling) {
3943 ScrollEventsOverscrollWithZeroFling(); 4239 ScrollEventsOverscrollWithZeroFling();
3944 } 4240 }
3945 TEST_F(RenderWidgetHostViewAuraOverscrollWithoutWheelScrollLatchingTest, 4241 TEST_F(RenderWidgetHostViewAuraOverscrollWithoutWheelScrollLatchingTest,
3946 ScrollEventsOverscrollWithZeroFling) { 4242 ScrollEventsOverscrollWithZeroFling) {
3947 ScrollEventsOverscrollWithZeroFling(); 4243 ScrollEventsOverscrollWithZeroFling();
3948 } 4244 }
3949 4245
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after
4390 SimulateGestureScrollUpdateEvent(-20, 0, 0); 4686 SimulateGestureScrollUpdateEvent(-20, 0, 0);
4391 EXPECT_EQ(1U, sink_->message_count()); 4687 EXPECT_EQ(1U, sink_->message_count());
4392 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4688 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
4393 } 4689 }
4394 4690
4395 void RenderWidgetHostViewAuraOverscrollTest:: 4691 void RenderWidgetHostViewAuraOverscrollTest::
4396 OverscrollDirectionChangeMouseWheel() { 4692 OverscrollDirectionChangeMouseWheel() {
4397 SetUpOverscrollEnvironment(); 4693 SetUpOverscrollEnvironment();
4398 4694
4399 // Send wheel event and receive ack as not consumed. 4695 // Send wheel event and receive ack as not consumed.
4400 SimulateWheelEvent(125, -5, 0, true); 4696 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, 125,
4697 -5, 0, true,
4698 WebMouseWheelEvent::kPhaseBegan);
4401 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4699 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
4402 SendInputEventACK(WebInputEvent::kMouseWheel, 4700 SendInputEventACK(WebInputEvent::kMouseWheel,
4403 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4701 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4404 ExpectGestureScrollEventsAfterMouseWheelACK(true, false); 4702 ExpectGestureScrollEventsAfterMouseWheelACK(true, false);
4405 4703
4406 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4704 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
4407 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4705 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4408 ExpectGestureScrollEndForWheelScrolling(false); 4706 ExpectGestureScrollEndForWheelScrolling(false);
4409 4707
4410 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode()); 4708 EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
4411 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode()); 4709 EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode());
4412 4710
4413 // Send another wheel event, but in the reverse direction. The overscroll 4711 // Send another wheel event, but in the reverse direction. The overscroll
4414 // controller will not consume the event, because it is not triggering 4712 // controller will not consume the event, because it is not triggering
4415 // gesture-nav. 4713 // gesture-nav.
4416 4714
4417 SimulateWheelEvent(-260, 0, 0, true); 4715 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_,
4716 -260, 0, 0, true,
4717 WebMouseWheelEvent::kPhaseChanged);
4418 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4718 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
4419 SendInputEventACK(WebInputEvent::kMouseWheel, 4719 SendInputEventACK(WebInputEvent::kMouseWheel,
4420 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4720 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4421 ExpectGestureScrollEventsAfterMouseWheelACK(false, false); 4721 ExpectGestureScrollEventsAfterMouseWheelACK(false, false);
4422 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4722 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
4423 4723
4424 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4724 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
4425 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4725 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4426 ExpectGestureScrollEndForWheelScrolling(false); 4726 ExpectGestureScrollEndForWheelScrolling(false);
4427 4727
4428 // Since it was unhandled; the overscroll should now be west 4728 // Since it was unhandled; the overscroll should now be west
4429 EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode()); 4729 EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode());
4430 EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode()); 4730 EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode());
4431 4731
4432 SimulateWheelEvent(-20, 0, 0, true); 4732 SimulateWheelEventPossiblyIncludingPhase(!wheel_scroll_latching_enabled_, -20,
4733 0, 0, true,
4734 WebMouseWheelEvent::kPhaseChanged);
4433 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4735 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
4434 SendInputEventACK(WebInputEvent::kMouseWheel, 4736 SendInputEventACK(WebInputEvent::kMouseWheel,
4435 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4737 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4436 4738
4437 // wheel event ack generates gesture scroll update; which gets consumed 4739 // wheel event ack generates gesture scroll update; which gets consumed
4438 // solely by the overflow controller. 4740 // solely by the overflow controller.
4439 if (!wheel_scroll_latching_enabled_) { 4741 if (!wheel_scroll_latching_enabled_) {
4440 // No ScrollUpdates, only ScrollBegin and ScrollEnd will be queued events. 4742 // No ScrollUpdates, only ScrollBegin and ScrollEnd will be queued events.
4441 EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); 4743 EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
4442 } else { 4744 } else {
4443 EXPECT_EQ(0U, GetSentMessageCountAndResetSink()); 4745 EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
4444 } 4746 }
4445 4747
4446 EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode()); 4748 EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode());
4447 EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode()); 4749 EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode());
4448 } 4750 }
4449 TEST_F(RenderWidgetHostViewAuraOverscrollTest, 4751 TEST_F(RenderWidgetHostViewAuraOverscrollTest,
4450 OverscrollDirectionChangeMouseWheel) { 4752 OverscrollDirectionChangeMouseWheel) {
4451 OverscrollDirectionChangeMouseWheel(); 4753 OverscrollDirectionChangeMouseWheel();
4452 } 4754 }
4453 TEST_F(RenderWidgetHostViewAuraOverscrollWithoutWheelScrollLatchingTest, 4755 TEST_F(RenderWidgetHostViewAuraOverscrollWithoutWheelScrollLatchingTest,
4454 OverscrollDirectionChangeMouseWheel) { 4756 OverscrollDirectionChangeMouseWheel) {
4455 OverscrollDirectionChangeMouseWheel(); 4757 OverscrollDirectionChangeMouseWheel();
4456 } 4758 }
4457 4759
4458 void RenderWidgetHostViewAuraOverscrollTest::OverscrollMouseMoveCompletion() { 4760 void RenderWidgetHostViewAuraOverscrollTest::OverscrollMouseMoveCompletion() {
4459 SetUpOverscrollEnvironment(); 4761 SetUpOverscrollEnvironment();
4460 4762
4461 SimulateWheelEvent(5, 0, 0, true); // sent directly 4763 SimulateWheelEventPossiblyIncludingPhase(
4462 SimulateWheelEvent(-1, 0, 0, true); // enqueued 4764 !wheel_scroll_latching_enabled_, 5, 0, 0, true,
4463 SimulateWheelEvent(-10, -3, 0, true); // coalesced into previous event 4765 WebMouseWheelEvent::kPhaseBegan); // sent directly
4464 SimulateWheelEvent(-15, -1, 0, true); // coalesced into previous event 4766 SimulateWheelEventPossiblyIncludingPhase(
4465 SimulateWheelEvent(-30, -3, 0, true); // coalesced into previous event 4767 !wheel_scroll_latching_enabled_, -1, 0, 0, true,
4768 WebMouseWheelEvent::kPhaseChanged); // enqueued
4769 SimulateWheelEventPossiblyIncludingPhase(
4770 !wheel_scroll_latching_enabled_, -10, -3, 0, true,
4771 WebMouseWheelEvent::kPhaseChanged); // coalesced into previous event
4772 SimulateWheelEventPossiblyIncludingPhase(
4773 !wheel_scroll_latching_enabled_, -15, -1, 0, true,
4774 WebMouseWheelEvent::kPhaseChanged); // coalesced into previous event
4775 SimulateWheelEventPossiblyIncludingPhase(
4776 !wheel_scroll_latching_enabled_, -30, -3, 0, true,
4777 WebMouseWheelEvent::kPhaseChanged); // coalesced into previous event
4778
4466 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4779 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
4467 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4780 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
4468 4781
4469 // Receive ACK the first wheel event as not processed. 4782 // Receive ACK the first wheel event as not processed.
4470 SendInputEventACK(WebInputEvent::kMouseWheel, 4783 SendInputEventACK(WebInputEvent::kMouseWheel,
4471 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4784 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4472 ExpectGestureScrollEventsAfterMouseWheelACK(true, true); 4785 ExpectGestureScrollEventsAfterMouseWheelACK(true, true);
4473 4786
4474 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4787 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
4475 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4788 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
4549 OverscrollMouseMoveCompletion) { 4862 OverscrollMouseMoveCompletion) {
4550 OverscrollMouseMoveCompletion(); 4863 OverscrollMouseMoveCompletion();
4551 } 4864 }
4552 4865
4553 // Tests that if a page scrolled, then the overscroll controller's states are 4866 // Tests that if a page scrolled, then the overscroll controller's states are
4554 // reset after the end of the scroll. 4867 // reset after the end of the scroll.
4555 void RenderWidgetHostViewAuraOverscrollTest:: 4868 void RenderWidgetHostViewAuraOverscrollTest::
4556 OverscrollStateResetsAfterScroll() { 4869 OverscrollStateResetsAfterScroll() {
4557 SetUpOverscrollEnvironment(); 4870 SetUpOverscrollEnvironment();
4558 4871
4559 SimulateWheelEvent(0, 5, 0, true); // sent directly 4872 SimulateWheelEventPossiblyIncludingPhase(
4560 SimulateWheelEvent(0, 30, 0, true); // enqueued 4873 !wheel_scroll_latching_enabled_, 0, 5, 0, true,
4561 SimulateWheelEvent(0, 40, 0, true); // coalesced into previous event 4874 WebMouseWheelEvent::kPhaseBegan); // sent directly
4562 SimulateWheelEvent(0, 10, 0, true); // coalesced into previous event 4875 SimulateWheelEventPossiblyIncludingPhase(
4876 !wheel_scroll_latching_enabled_, 0, 30, 0, true,
4877 WebMouseWheelEvent::kPhaseChanged); // enqueued
4878 SimulateWheelEventPossiblyIncludingPhase(
4879 !wheel_scroll_latching_enabled_, 0, 40, 0, true,
4880 WebMouseWheelEvent::kPhaseChanged); // coalesced into previous event
4881 SimulateWheelEventPossiblyIncludingPhase(
4882 !wheel_scroll_latching_enabled_, 0, 10, 0, true,
4883 WebMouseWheelEvent::kPhaseChanged); // coalesced into previous event
4563 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4884 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
4564 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4885 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
4565 4886
4566 // The first wheel event is consumed. Dispatches the queued wheel event. 4887 // The first wheel event is consumed. Dispatches the queued wheel event.
4567 SendInputEventACK(WebInputEvent::kMouseWheel, 4888 SendInputEventACK(WebInputEvent::kMouseWheel,
4568 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4889 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4569 ExpectGestureScrollEventsAfterMouseWheelACK(true, true); 4890 ExpectGestureScrollEventsAfterMouseWheelACK(true, true);
4570 4891
4571 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4892 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
4572 INPUT_EVENT_ACK_STATE_CONSUMED); 4893 INPUT_EVENT_ACK_STATE_CONSUMED);
4573 ExpectGestureScrollEndForWheelScrolling(false); 4894 ExpectGestureScrollEndForWheelScrolling(false);
4574 EXPECT_TRUE(ScrollStateIsContentScrolling()); 4895 EXPECT_TRUE(ScrollStateIsContentScrolling());
4575 4896
4576 // The second wheel event is consumed. 4897 // The second wheel event is consumed.
4577 SendInputEventACK(WebInputEvent::kMouseWheel, 4898 SendInputEventACK(WebInputEvent::kMouseWheel,
4578 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4899 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4579 ExpectGestureScrollEventsAfterMouseWheelACK(false, false); 4900 ExpectGestureScrollEventsAfterMouseWheelACK(false, false);
4580 4901
4581 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4902 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
4582 INPUT_EVENT_ACK_STATE_CONSUMED); 4903 INPUT_EVENT_ACK_STATE_CONSUMED);
4904
4905 if (wheel_scroll_latching_enabled_) {
4906 SimulateWheelEventWithPhase(0, 0, 0, true, WebMouseWheelEvent::kPhaseEnded);
4907 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
4908 SendInputEventACK(WebInputEvent::kMouseWheel,
4909 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4910 }
4583 ExpectGestureScrollEndForWheelScrolling(true); 4911 ExpectGestureScrollEndForWheelScrolling(true);
4584 EXPECT_TRUE(ScrollStateIsContentScrolling()); 4912 EXPECT_TRUE(ScrollStateIsContentScrolling());
4585 4913
4586 // Touchpad scroll can end with a zero-velocity fling. But it is not 4914 // Touchpad scroll can end with a zero-velocity fling. But it is not
4587 // dispatched, but it should still reset the overscroll controller state. 4915 // dispatched, but it should still reset the overscroll controller state.
4588 SimulateGestureEvent(WebInputEvent::kGestureScrollBegin, 4916 SimulateGestureEvent(WebInputEvent::kGestureScrollBegin,
4589 blink::kWebGestureDeviceTouchscreen); 4917 blink::kWebGestureDeviceTouchscreen);
4590 SimulateGestureFlingStartEvent(0.f, 0.f, blink::kWebGestureDeviceTouchpad); 4918 SimulateGestureFlingStartEvent(0.f, 0.f, blink::kWebGestureDeviceTouchpad);
4591 EXPECT_TRUE(ScrollStateIsUnknown()); 4919 EXPECT_TRUE(ScrollStateIsUnknown());
4592 // ScrollBegin will be queued events. 4920 // ScrollBegin will be queued events.
4593 EXPECT_EQ(1U, sink_->message_count()); 4921 EXPECT_EQ(1U, sink_->message_count());
4594 4922
4595 // Dropped flings should neither propagate *nor* indicate that they were 4923 // Dropped flings should neither propagate *nor* indicate that they were
4596 // consumed and have triggered a fling animation (as tracked by the router). 4924 // consumed and have triggered a fling animation (as tracked by the router).
4597 EXPECT_FALSE(parent_host_->input_router()->HasPendingEvents()); 4925 EXPECT_FALSE(parent_host_->input_router()->HasPendingEvents());
4598 4926
4599 SimulateGestureEvent(WebInputEvent::kGestureScrollEnd, 4927 SimulateGestureEvent(WebInputEvent::kGestureScrollEnd,
4600 blink::kWebGestureDeviceTouchscreen); 4928 blink::kWebGestureDeviceTouchscreen);
4601 // ScrollBegin, and ScrollEnd will be queued events. 4929 // ScrollBegin, and ScrollEnd will be queued events.
4602 EXPECT_EQ(2U, GetSentMessageCountAndResetSink()); 4930 EXPECT_EQ(2U, GetSentMessageCountAndResetSink());
4603 4931
4604 SimulateWheelEvent(-5, 0, 0, true); // sent directly 4932 SimulateWheelEventPossiblyIncludingPhase(
4605 SimulateWheelEvent(-60, 0, 0, true); // enqueued 4933 !wheel_scroll_latching_enabled_, -5, 0, 0, true,
4606 SimulateWheelEvent(-100, 0, 0, true); // coalesced into previous event 4934 WebMouseWheelEvent::kPhaseBegan); // sent directly
4935 SimulateWheelEventPossiblyIncludingPhase(
4936 !wheel_scroll_latching_enabled_, -60, 0, 0, true,
4937 WebMouseWheelEvent::kPhaseChanged); // enqueued
4938 SimulateWheelEventPossiblyIncludingPhase(
4939 !wheel_scroll_latching_enabled_, -100, 0, 0, true,
4940 WebMouseWheelEvent::kPhaseChanged); // coalesced into previous event
4941
4607 EXPECT_TRUE(ScrollStateIsUnknown()); 4942 EXPECT_TRUE(ScrollStateIsUnknown());
4608 EXPECT_EQ(1U, GetSentMessageCountAndResetSink()); 4943 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
4609 4944
4610 // The first wheel scroll did not scroll content. Overscroll should not start 4945 // The first wheel scroll did not scroll content. Overscroll should not start
4611 // yet, since enough hasn't been scrolled. 4946 // yet, since enough hasn't been scrolled.
4612 SendInputEventACK(WebInputEvent::kMouseWheel, 4947 SendInputEventACK(WebInputEvent::kMouseWheel,
4613 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4948 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4614 ExpectGestureScrollEventsAfterMouseWheelACK(true, true); 4949 ExpectGestureScrollEventsAfterMouseWheelACK(true, true);
4615 4950
4616 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4951 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
4617 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4952 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4618 ExpectGestureScrollEndForWheelScrolling(false); 4953 ExpectGestureScrollEndForWheelScrolling(false);
4619 EXPECT_TRUE(ScrollStateIsUnknown()); 4954 EXPECT_TRUE(ScrollStateIsUnknown());
4620 4955
4621 SendInputEventACK(WebInputEvent::kMouseWheel, 4956 SendInputEventACK(WebInputEvent::kMouseWheel,
4622 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4957 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4623 ExpectGestureScrollEventsAfterMouseWheelACK(false, false); 4958 ExpectGestureScrollEventsAfterMouseWheelACK(false, false);
4624 4959
4625 SendInputEventACK(WebInputEvent::kGestureScrollUpdate, 4960 SendInputEventACK(WebInputEvent::kGestureScrollUpdate,
4626 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 4961 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4962
4963 if (wheel_scroll_latching_enabled_) {
4964 SimulateWheelEventWithPhase(0, 0, 0, true, WebMouseWheelEvent::kPhaseEnded);
4965 EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
4966 SendInputEventACK(WebInputEvent::kMouseWheel,
4967 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
4968 }
4969
4627 ExpectGestureScrollEndForWheelScrolling(true); 4970 ExpectGestureScrollEndForWheelScrolling(true);
4628 EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode()); 4971 EXPECT_EQ(OVERSCROLL_WEST, overscroll_mode());
4629 EXPECT_TRUE(ScrollStateIsOverscrolling()); 4972 EXPECT_TRUE(ScrollStateIsOverscrolling());
4630 4973
4631 // The GestureScrollBegin will reset the delegate's mode, so check it here. 4974 // The GestureScrollBegin will reset the delegate's mode, so check it here.
4632 EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode()); 4975 EXPECT_EQ(OVERSCROLL_WEST, overscroll_delegate()->current_mode());
4633 SimulateGestureEvent(WebInputEvent::kGestureScrollBegin, 4976 SimulateGestureEvent(WebInputEvent::kGestureScrollBegin,
4634 blink::kWebGestureDeviceTouchscreen); 4977 blink::kWebGestureDeviceTouchscreen);
4635 SimulateGestureFlingStartEvent(0.f, 0.f, blink::kWebGestureDeviceTouchpad); 4978 SimulateGestureFlingStartEvent(0.f, 0.f, blink::kWebGestureDeviceTouchpad);
4636 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode()); 4979 EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
(...skipping 910 matching lines...) Expand 10 before | Expand all | Expand 10 after
5547 // There is no composition in the beginning. 5890 // There is no composition in the beginning.
5548 EXPECT_FALSE(has_composition_text()); 5891 EXPECT_FALSE(has_composition_text());
5549 SetHasCompositionTextToTrue(); 5892 SetHasCompositionTextToTrue();
5550 view->ImeCancelComposition(); 5893 view->ImeCancelComposition();
5551 // The composition must have been canceled. 5894 // The composition must have been canceled.
5552 EXPECT_FALSE(has_composition_text()); 5895 EXPECT_FALSE(has_composition_text());
5553 } 5896 }
5554 } 5897 }
5555 5898
5556 } // namespace content 5899 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698