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

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

Issue 23801003: input: Make the OverscrollController less intrusive, and some code cleanup. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/memory/shared_memory.h" 8 #include "base/memory/shared_memory.h"
9 #include "base/timer/timer.h" 9 #include "base/timer/timer.h"
10 #include "content/browser/browser_thread_impl.h" 10 #include "content/browser/browser_thread_impl.h"
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 const GestureEventWithLatencyInfo& gesture_event) OVERRIDE {} 164 const GestureEventWithLatencyInfo& gesture_event) OVERRIDE {}
165 virtual const NativeWebKeyboardEvent* GetLastKeyboardEvent() const OVERRIDE { 165 virtual const NativeWebKeyboardEvent* GetLastKeyboardEvent() const OVERRIDE {
166 NOTREACHED(); 166 NOTREACHED();
167 return NULL; 167 return NULL;
168 } 168 }
169 virtual bool ShouldForwardTouchEvent() const OVERRIDE { return true; } 169 virtual bool ShouldForwardTouchEvent() const OVERRIDE { return true; }
170 virtual bool ShouldForwardGestureEvent( 170 virtual bool ShouldForwardGestureEvent(
171 const GestureEventWithLatencyInfo& gesture_event) const OVERRIDE { 171 const GestureEventWithLatencyInfo& gesture_event) const OVERRIDE {
172 return true; 172 return true;
173 } 173 }
174 virtual bool HasQueuedGestureEvents() const OVERRIDE { return true; }
175 174
176 // IPC::Listener 175 // IPC::Listener
177 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE { 176 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
178 message_received_ = true; 177 message_received_ = true;
179 return false; 178 return false;
180 } 179 }
181 180
182 bool flush_called_; 181 bool flush_called_;
183 bool send_event_called_; 182 bool send_event_called_;
184 bool sent_mouse_event_; 183 bool sent_mouse_event_;
(...skipping 1193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_delegate()->current_mode()); 1377 EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_delegate()->current_mode());
1379 EXPECT_EQ(-81.f, host_->overscroll_delta_x()); 1378 EXPECT_EQ(-81.f, host_->overscroll_delta_x());
1380 EXPECT_EQ(-31.f, host_->overscroll_delegate()->delta_x()); 1379 EXPECT_EQ(-31.f, host_->overscroll_delegate()->delta_x());
1381 EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); 1380 EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y());
1382 EXPECT_EQ(0U, process_->sink().message_count()); 1381 EXPECT_EQ(0U, process_->sink().message_count());
1383 1382
1384 // Send a mouse-move event. This should cancel the overscroll navigation. 1383 // Send a mouse-move event. This should cancel the overscroll navigation.
1385 SimulateMouseMove(5, 10, 0); 1384 SimulateMouseMove(5, 10, 0);
1386 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); 1385 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode());
1387 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); 1386 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode());
1387 EXPECT_EQ(1U, process_->sink().message_count());
1388 } 1388 }
1389 1389
1390 // Tests that if some scroll events are consumed towards the start, then 1390 // Tests that if some scroll events are consumed towards the start, then
1391 // subsequent scrolls do not horizontal overscroll. 1391 // subsequent scrolls do not horizontal overscroll.
1392 TEST_F(RenderWidgetHostTest, WheelScrollConsumedDoNotHorizOverscroll) { 1392 TEST_F(RenderWidgetHostTest, WheelScrollConsumedDoNotHorizOverscroll) {
1393 host_->SetupForOverscrollControllerTest(); 1393 host_->SetupForOverscrollControllerTest();
1394 process_->sink().ClearMessages(); 1394 process_->sink().ClearMessages();
1395 1395
1396 // Simulate wheel events. 1396 // Simulate wheel events.
1397 SimulateWheelEvent(-5, 0, 0, true); // sent directly 1397 SimulateWheelEvent(-5, 0, 0, true); // sent directly
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
1599 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); 1599 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode());
1600 EXPECT_EQ(60.f, host_->overscroll_delta_x()); 1600 EXPECT_EQ(60.f, host_->overscroll_delta_x());
1601 EXPECT_EQ(10.f, host_->overscroll_delegate()->delta_x()); 1601 EXPECT_EQ(10.f, host_->overscroll_delegate()->delta_x());
1602 EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); 1602 EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y());
1603 process_->sink().ClearMessages(); 1603 process_->sink().ClearMessages();
1604 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); 1604 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1605 1605
1606 // Send a fling start, but with a small velocity, so that the overscroll is 1606 // Send a fling start, but with a small velocity, so that the overscroll is
1607 // aborted. The fling should proceed to the renderer, through the gesture 1607 // aborted. The fling should proceed to the renderer, through the gesture
1608 // event filter. 1608 // event filter.
1609 SimulateGestureFlingStartEvent(0.f, 0.f, WebGestureEvent::Touchpad); 1609 SimulateGestureFlingStartEvent(10.f, 0.f, WebGestureEvent::Touchpad);
1610 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); 1610 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode());
1611 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); 1611 EXPECT_EQ(1U, host_->GestureEventLastQueueEventSize());
1612 EXPECT_EQ(0U, process_->sink().message_count()); 1612 EXPECT_EQ(1U, process_->sink().message_count());
1613 } 1613 }
1614 1614
1615 // Tests that a fling in the opposite direction of the overscroll cancels the 1615 // Tests that a fling in the opposite direction of the overscroll cancels the
1616 // overscroll nav instead of completing it. 1616 // overscroll nav instead of completing it.
1617 TEST_F(RenderWidgetHostTest, ReverseFlingCancelsOverscroll) { 1617 TEST_F(RenderWidgetHostTest, ReverseFlingCancelsOverscroll) {
1618 host_->SetupForOverscrollControllerTest(); 1618 host_->SetupForOverscrollControllerTest();
1619 host_->set_debounce_interval_time_ms(0); 1619 host_->set_debounce_interval_time_ms(0);
1620 process_->sink().ClearMessages(); 1620 process_->sink().ClearMessages();
1621 view_->set_bounds(gfx::Rect(0, 0, 400, 200)); 1621 view_->set_bounds(gfx::Rect(0, 0, 400, 200));
1622 view_->Show(); 1622 view_->Show();
1623 1623
1624 { 1624 {
1625 // Start and end a gesture in the same direction without processing the 1625 // Start and end a gesture in the same direction without processing the
1626 // gesture events in the renderer. This should initiate and complete an 1626 // gesture events in the renderer. This should initiate and complete an
1627 // overscroll navigation. 1627 // overscroll navigation.
1628 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1628 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1629 WebGestureEvent::Touchscreen); 1629 WebGestureEvent::Touchscreen);
1630 SimulateGestureScrollUpdateEvent(300, -5, 0); 1630 SimulateGestureScrollUpdateEvent(300, -5, 0);
1631 SendInputEventACK(WebInputEvent::GestureScrollBegin, 1631 SendInputEventACK(WebInputEvent::GestureScrollBegin,
1632 INPUT_EVENT_ACK_STATE_CONSUMED); 1632 INPUT_EVENT_ACK_STATE_CONSUMED);
1633 SendInputEventACK(WebInputEvent::GestureScrollUpdate, 1633 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
1634 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1634 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1635 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); 1635 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode());
1636 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); 1636 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode());
1637 process_->sink().ClearMessages();
1637 1638
1638 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, 1639 SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
1639 WebGestureEvent::Touchscreen); 1640 WebGestureEvent::Touchscreen);
1640 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->completed_mode()); 1641 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->completed_mode());
1641 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); 1642 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode());
1643 EXPECT_EQ(1U, process_->sink().message_count());
1642 SendInputEventACK(WebInputEvent::GestureScrollEnd, 1644 SendInputEventACK(WebInputEvent::GestureScrollEnd,
1643 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1645 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1644 } 1646 }
1645 1647
1646 { 1648 {
1647 // Start over, except instead of ending the gesture with ScrollEnd, end it 1649 // Start over, except instead of ending the gesture with ScrollEnd, end it
1648 // with a FlingStart, with velocity in the reverse direction. This should 1650 // with a FlingStart, with velocity in the reverse direction. This should
1649 // initiate an overscroll navigation, but it should be cancelled because of 1651 // initiate an overscroll navigation, but it should be cancelled because of
1650 // the fling in the opposite direction. 1652 // the fling in the opposite direction.
1651 host_->overscroll_delegate()->Reset(); 1653 host_->overscroll_delegate()->Reset();
1652 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1654 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1653 WebGestureEvent::Touchscreen); 1655 WebGestureEvent::Touchscreen);
1654 SimulateGestureScrollUpdateEvent(-300, -5, 0); 1656 SimulateGestureScrollUpdateEvent(-300, -5, 0);
1655 SendInputEventACK(WebInputEvent::GestureScrollBegin, 1657 SendInputEventACK(WebInputEvent::GestureScrollBegin,
1656 INPUT_EVENT_ACK_STATE_CONSUMED); 1658 INPUT_EVENT_ACK_STATE_CONSUMED);
1657 SendInputEventACK(WebInputEvent::GestureScrollUpdate, 1659 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
1658 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1660 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1659 EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_mode()); 1661 EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_mode());
1660 EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_delegate()->current_mode()); 1662 EXPECT_EQ(OVERSCROLL_WEST, host_->overscroll_delegate()->current_mode());
1663 process_->sink().ClearMessages();
1664
1661 SimulateGestureFlingStartEvent(100, 0, WebGestureEvent::Touchscreen); 1665 SimulateGestureFlingStartEvent(100, 0, WebGestureEvent::Touchscreen);
1662 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->completed_mode()); 1666 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->completed_mode());
1663 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); 1667 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode());
1668 EXPECT_EQ(1U, process_->sink().message_count());
1664 } 1669 }
1665 } 1670 }
1666 1671
1667 // Tests that touch-scroll events are handled correctly by the overscroll 1672 // Tests that touch-scroll events are handled correctly by the overscroll
1668 // controller. This also tests that the overscroll controller and the 1673 // controller. This also tests that the overscroll controller and the
1669 // gesture-event filter play nice with each other. 1674 // gesture-event filter play nice with each other.
1670 TEST_F(RenderWidgetHostTest, GestureScrollOverscrolls) { 1675 TEST_F(RenderWidgetHostTest, GestureScrollOverscrolls) {
1671 // Turn off debounce handling for test isolation. 1676 // Turn off debounce handling for test isolation.
1672 host_->SetupForOverscrollControllerTest(); 1677 host_->SetupForOverscrollControllerTest();
1673 host_->set_debounce_interval_time_ms(0); 1678 host_->set_debounce_interval_time_ms(0);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1731 WebGestureEvent::Touchscreen); 1736 WebGestureEvent::Touchscreen);
1732 SimulateGestureScrollUpdateEvent(10, 0, 0); 1737 SimulateGestureScrollUpdateEvent(10, 0, 0);
1733 1738
1734 // Start scrolling on content. ACK both events as being processed. 1739 // Start scrolling on content. ACK both events as being processed.
1735 SendInputEventACK(WebInputEvent::GestureScrollBegin, 1740 SendInputEventACK(WebInputEvent::GestureScrollBegin,
1736 INPUT_EVENT_ACK_STATE_CONSUMED); 1741 INPUT_EVENT_ACK_STATE_CONSUMED);
1737 SendInputEventACK(WebInputEvent::GestureScrollUpdate, 1742 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
1738 INPUT_EVENT_ACK_STATE_CONSUMED); 1743 INPUT_EVENT_ACK_STATE_CONSUMED);
1739 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); 1744 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode());
1740 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); 1745 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode());
1746 process_->sink().ClearMessages();
1741 1747
1742 // Send another gesture event and ACK as not being processed. This should 1748 // Send another gesture event and ACK as not being processed. This should
1743 // not initiate overscroll because the beginning of the scroll event did 1749 // not initiate overscroll because the beginning of the scroll event did
1744 // scroll some content on the page. 1750 // scroll some content on the page. Since there was no overscroll, the event
1751 // should reach the renderer.
1745 SimulateGestureScrollUpdateEvent(55, 0, 0); 1752 SimulateGestureScrollUpdateEvent(55, 0, 0);
1753 EXPECT_EQ(1U, process_->sink().message_count());
1746 SendInputEventACK(WebInputEvent::GestureScrollUpdate, 1754 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
1747 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1755 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1748 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); 1756 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode());
1749 } 1757 }
1750 1758
1751 // Tests that if the page is scrolled because of a scroll-gesture, then that 1759 // Tests that if the page is scrolled because of a scroll-gesture, then that
1752 // particular scroll sequence never generates overscroll if the scroll direction 1760 // particular scroll sequence never generates overscroll if the scroll direction
1753 // is vertical. 1761 // is vertical.
1754 TEST_F(RenderWidgetHostTest, GestureScrollConsumedVertical) { 1762 TEST_F(RenderWidgetHostTest, GestureScrollConsumedVertical) {
1755 // Turn off debounce handling for test isolation. 1763 // Turn off debounce handling for test isolation.
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after
2282 SendInputEventACK(WebInputEvent::GestureScrollBegin, 2290 SendInputEventACK(WebInputEvent::GestureScrollBegin,
2283 INPUT_EVENT_ACK_STATE_CONSUMED); 2291 INPUT_EVENT_ACK_STATE_CONSUMED);
2284 SendInputEventACK(WebInputEvent::GestureScrollUpdate, 2292 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
2285 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 2293 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2286 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode()); 2294 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_mode());
2287 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode()); 2295 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->current_mode());
2288 process_->sink().ClearMessages(); 2296 process_->sink().ClearMessages();
2289 2297
2290 // Overscroll gesture is in progress. Send a mouse-move now. This should 2298 // Overscroll gesture is in progress. Send a mouse-move now. This should
2291 // complete the gesture (because the amount overscrolled is above the 2299 // complete the gesture (because the amount overscrolled is above the
2292 // threshold), and consume the event. 2300 // threshold).
2293 SimulateMouseMove(5, 10, 0); 2301 SimulateMouseMove(5, 10, 0);
2294 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->completed_mode()); 2302 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->completed_mode());
2295 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); 2303 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode());
2296 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); 2304 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode());
2297 EXPECT_EQ(0U, process_->sink().message_count()); 2305 EXPECT_EQ(1U, process_->sink().message_count());
2306 process_->sink().ClearMessages();
2307 SendInputEventACK(WebInputEvent::MouseMove,
2308 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2298 2309
2299 SimulateGestureEvent(WebInputEvent::GestureScrollEnd, 2310 SimulateGestureEvent(WebInputEvent::GestureScrollEnd,
2300 WebGestureEvent::Touchscreen); 2311 WebGestureEvent::Touchscreen);
2301 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); 2312 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode());
2302 EXPECT_EQ(1U, process_->sink().message_count()); 2313 EXPECT_EQ(1U, process_->sink().message_count());
2303 process_->sink().ClearMessages(); 2314 process_->sink().ClearMessages();
2304 SendInputEventACK(WebInputEvent::GestureScrollEnd, 2315 SendInputEventACK(WebInputEvent::GestureScrollEnd,
2305 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 2316 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2306 2317
2307 // Move mouse some more. The mouse-move events should reach the renderer. 2318 // Move mouse some more. The mouse-move events should reach the renderer.
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
2570 2581
2571 TEST_F(RenderWidgetHostTest, InputRouterReceivesHasTouchEventHandlers) { 2582 TEST_F(RenderWidgetHostTest, InputRouterReceivesHasTouchEventHandlers) {
2572 host_->SetupForInputRouterTest(); 2583 host_->SetupForInputRouterTest();
2573 2584
2574 host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); 2585 host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true));
2575 2586
2576 EXPECT_TRUE(host_->mock_input_router()->message_received_); 2587 EXPECT_TRUE(host_->mock_input_router()->message_received_);
2577 } 2588 }
2578 2589
2579 } // namespace content 2590 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698