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

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

Issue 235003005: Consolidate all touch/gesture related constants in content (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updates Created 6 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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/shared_memory.h" 9 #include "base/memory/shared_memory.h"
10 #include "base/timer/timer.h" 10 #include "base/timer/timer.h"
11 #include "content/browser/browser_thread_impl.h" 11 #include "content/browser/browser_thread_impl.h"
12 #include "content/browser/renderer_host/input/gesture_event_queue.h" 12 #include "content/browser/renderer_host/input/gesture_event_queue.h"
13 #include "content/browser/renderer_host/input/input_router_impl.h" 13 #include "content/browser/renderer_host/input/input_router_impl.h"
14 #include "content/browser/renderer_host/input/tap_suppression_controller.h"
15 #include "content/browser/renderer_host/input/tap_suppression_controller_client. h"
16 #include "content/browser/renderer_host/input/touch_event_queue.h" 14 #include "content/browser/renderer_host/input/touch_event_queue.h"
17 #include "content/browser/renderer_host/overscroll_controller.h" 15 #include "content/browser/renderer_host/overscroll_controller.h"
18 #include "content/browser/renderer_host/overscroll_controller_delegate.h" 16 #include "content/browser/renderer_host/overscroll_controller_delegate.h"
19 #include "content/browser/renderer_host/render_widget_host_delegate.h" 17 #include "content/browser/renderer_host/render_widget_host_delegate.h"
20 #include "content/common/input/synthetic_web_input_event_builders.h" 18 #include "content/common/input/synthetic_web_input_event_builders.h"
21 #include "content/common/input_messages.h" 19 #include "content/common/input_messages.h"
22 #include "content/common/view_messages.h" 20 #include "content/common/view_messages.h"
23 #include "content/port/browser/render_widget_host_view_port.h" 21 #include "content/port/browser/render_widget_host_view_port.h"
24 #include "content/public/common/content_switches.h" 22 #include "content/public/common/content_switches.h"
25 #include "content/public/test/mock_render_process_host.h" 23 #include "content/public/test/mock_render_process_host.h"
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 // MockRenderWidgetHost ---------------------------------------------------- 189 // MockRenderWidgetHost ----------------------------------------------------
192 190
193 class MockRenderWidgetHost : public RenderWidgetHostImpl { 191 class MockRenderWidgetHost : public RenderWidgetHostImpl {
194 public: 192 public:
195 MockRenderWidgetHost( 193 MockRenderWidgetHost(
196 RenderWidgetHostDelegate* delegate, 194 RenderWidgetHostDelegate* delegate,
197 RenderProcessHost* process, 195 RenderProcessHost* process,
198 int routing_id) 196 int routing_id)
199 : RenderWidgetHostImpl(delegate, process, routing_id, false), 197 : RenderWidgetHostImpl(delegate, process, routing_id, false),
200 unresponsive_timer_fired_(false) { 198 unresponsive_timer_fired_(false) {
201 input_router_impl_ = static_cast<InputRouterImpl*>(input_router_.get());
202 acked_touch_event_type_ = blink::WebInputEvent::Undefined; 199 acked_touch_event_type_ = blink::WebInputEvent::Undefined;
203 } 200 }
204 201
205 // Allow poking at a few private members. 202 // Allow poking at a few private members.
206 using RenderWidgetHostImpl::OnUpdateRect; 203 using RenderWidgetHostImpl::OnUpdateRect;
207 using RenderWidgetHostImpl::RendererExited; 204 using RenderWidgetHostImpl::RendererExited;
208 using RenderWidgetHostImpl::last_requested_size_; 205 using RenderWidgetHostImpl::last_requested_size_;
209 using RenderWidgetHostImpl::is_hidden_; 206 using RenderWidgetHostImpl::is_hidden_;
210 using RenderWidgetHostImpl::resize_ack_pending_; 207 using RenderWidgetHostImpl::resize_ack_pending_;
211 using RenderWidgetHostImpl::input_router_; 208 using RenderWidgetHostImpl::input_router_;
(...skipping 30 matching lines...) Expand all
242 bool ScrollingInProgress() const { 239 bool ScrollingInProgress() const {
243 return gesture_event_queue().scrolling_in_progress_; 240 return gesture_event_queue().scrolling_in_progress_;
244 } 241 }
245 242
246 void SetupForOverscrollControllerTest() { 243 void SetupForOverscrollControllerTest() {
247 SetOverscrollControllerEnabled(true); 244 SetOverscrollControllerEnabled(true);
248 overscroll_delegate_.reset(new TestOverscrollDelegate(GetView())); 245 overscroll_delegate_.reset(new TestOverscrollDelegate(GetView()));
249 overscroll_controller_->set_delegate(overscroll_delegate_.get()); 246 overscroll_controller_->set_delegate(overscroll_delegate_.get());
250 } 247 }
251 248
249 void SetupForGestureDebouncing(int delay_ms) {
250 gesture_event_queue().set_debounce_enabled_for_testing(true);
251 gesture_event_queue().set_debounce_interval_time_ms_for_testing(delay_ms);
252 }
253
252 void DisableGestureDebounce() { 254 void DisableGestureDebounce() {
253 gesture_event_queue().set_debounce_enabled_for_testing(false); 255 gesture_event_queue().set_debounce_enabled_for_testing(false);
254 } 256 }
255 257
256 void set_debounce_interval_time_ms(int delay_ms) {
257 gesture_event_queue().
258 set_debounce_interval_time_ms_for_testing(delay_ms);
259 }
260
261 bool TouchEventQueueEmpty() const { 258 bool TouchEventQueueEmpty() const {
262 return touch_event_queue().empty(); 259 return touch_event_queue().empty();
263 } 260 }
264 261
265 virtual void OnTouchEventAck( 262 virtual void OnTouchEventAck(
266 const TouchEventWithLatencyInfo& event, 263 const TouchEventWithLatencyInfo& event,
267 InputEventAckState ack_result) OVERRIDE { 264 InputEventAckState ack_result) OVERRIDE {
268 // Sniff touch acks. 265 // Sniff touch acks.
269 acked_touch_event_type_ = event.event.type; 266 acked_touch_event_type_ = event.event.type;
270 RenderWidgetHostImpl::OnTouchEventAck(event, ack_result); 267 RenderWidgetHostImpl::OnTouchEventAck(event, ack_result);
(...skipping 29 matching lines...) Expand all
300 297
301 float overscroll_delta_y() const { 298 float overscroll_delta_y() const {
302 return overscroll_controller_->overscroll_delta_y_; 299 return overscroll_controller_->overscroll_delta_y_;
303 } 300 }
304 301
305 TestOverscrollDelegate* overscroll_delegate() { 302 TestOverscrollDelegate* overscroll_delegate() {
306 return overscroll_delegate_.get(); 303 return overscroll_delegate_.get();
307 } 304 }
308 305
309 void SetupForInputRouterTest() { 306 void SetupForInputRouterTest() {
310 mock_input_router_ = new MockInputRouter(this); 307 input_router_.reset(new MockInputRouter(this));
311 input_router_.reset(mock_input_router_);
312 } 308 }
313 309
314 MockInputRouter* mock_input_router() { 310 MockInputRouter* mock_input_router() {
315 return mock_input_router_; 311 return static_cast<MockInputRouter*>(input_router_.get());
316 } 312 }
317 313
318 protected: 314 protected:
319 virtual void NotifyRendererUnresponsive() OVERRIDE { 315 virtual void NotifyRendererUnresponsive() OVERRIDE {
320 unresponsive_timer_fired_ = true; 316 unresponsive_timer_fired_ = true;
321 } 317 }
322 318
323 const TouchEventQueue& touch_event_queue() const { 319 const TouchEventQueue& touch_event_queue() const {
324 return input_router_impl_->touch_event_queue_; 320 return input_router_impl()->touch_event_queue_;
325 } 321 }
326 322
327 const GestureEventQueue& gesture_event_queue() const { 323 const GestureEventQueue& gesture_event_queue() const {
328 return input_router_impl_->gesture_event_queue_; 324 return input_router_impl()->gesture_event_queue_;
329 } 325 }
330 326
331 GestureEventQueue& gesture_event_queue() { 327 GestureEventQueue& gesture_event_queue() {
332 return input_router_impl_->gesture_event_queue_; 328 return input_router_impl()->gesture_event_queue_;
329 }
330
331 const InputRouterImpl* input_router_impl() const {
332 return static_cast<InputRouterImpl*>(input_router_.get());
333 }
334
335 InputRouterImpl* input_router_impl() {
336 return static_cast<InputRouterImpl*>(input_router_.get());
333 } 337 }
334 338
335 private: 339 private:
336 bool unresponsive_timer_fired_; 340 bool unresponsive_timer_fired_;
337 WebInputEvent::Type acked_touch_event_type_; 341 WebInputEvent::Type acked_touch_event_type_;
338 342
339 // |input_router_impl_| and |mock_input_router_| are owned by
340 // RenderWidgetHostImpl. The handles below are provided for convenience so
341 // that we don't have to reinterpret_cast it all the time.
342 InputRouterImpl* input_router_impl_;
343 MockInputRouter* mock_input_router_;
344
345 scoped_ptr<TestOverscrollDelegate> overscroll_delegate_; 343 scoped_ptr<TestOverscrollDelegate> overscroll_delegate_;
346 344
347 DISALLOW_COPY_AND_ASSIGN(MockRenderWidgetHost); 345 DISALLOW_COPY_AND_ASSIGN(MockRenderWidgetHost);
348 }; 346 };
349 347
350 namespace { 348 namespace {
351 349
352 // RenderWidgetHostProcess ----------------------------------------------------- 350 // RenderWidgetHostProcess -----------------------------------------------------
353 351
354 class RenderWidgetHostProcess : public MockRenderProcessHost { 352 class RenderWidgetHostProcess : public MockRenderProcessHost {
(...skipping 1296 matching lines...) Expand 10 before | Expand all | Expand 10 after
1651 EXPECT_EQ(1U, process_->sink().message_count()); 1649 EXPECT_EQ(1U, process_->sink().message_count());
1652 SendInputEventACK(WebInputEvent::GestureScrollUpdate, 1650 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
1653 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1651 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1654 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); 1652 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode());
1655 } 1653 }
1656 1654
1657 // Tests that the overscroll controller plays nice with touch-scrolls and the 1655 // Tests that the overscroll controller plays nice with touch-scrolls and the
1658 // gesture event filter with debounce filtering turned on. 1656 // gesture event filter with debounce filtering turned on.
1659 TEST_F(RenderWidgetHostTest, GestureScrollDebounceOverscrolls) { 1657 TEST_F(RenderWidgetHostTest, GestureScrollDebounceOverscrolls) {
1660 host_->SetupForOverscrollControllerTest(); 1658 host_->SetupForOverscrollControllerTest();
1661 host_->set_debounce_interval_time_ms(100); 1659 host_->SetupForGestureDebouncing(100);
1662 process_->sink().ClearMessages(); 1660 process_->sink().ClearMessages();
1663 1661
1664 // Start scrolling. Receive ACK as it being processed. 1662 // Start scrolling. Receive ACK as it being processed.
1665 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1663 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1666 WebGestureEvent::Touchscreen); 1664 WebGestureEvent::Touchscreen);
1667 EXPECT_EQ(1U, process_->sink().message_count()); 1665 EXPECT_EQ(1U, process_->sink().message_count());
1668 process_->sink().ClearMessages(); 1666 process_->sink().ClearMessages();
1669 1667
1670 // Send update events. 1668 // Send update events.
1671 SimulateGestureScrollUpdateEvent(25, 0, 0); 1669 SimulateGestureScrollUpdateEvent(25, 0, 0);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1729 EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y()); 1727 EXPECT_EQ(0.f, host_->overscroll_delegate()->delta_y());
1730 EXPECT_EQ(0U, process_->sink().message_count()); 1728 EXPECT_EQ(0U, process_->sink().message_count());
1731 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); 1729 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1732 EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); 1730 EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize());
1733 } 1731 }
1734 1732
1735 // Tests that the gesture debounce timer plays nice with the overscroll 1733 // Tests that the gesture debounce timer plays nice with the overscroll
1736 // controller. 1734 // controller.
1737 TEST_F(RenderWidgetHostTest, GestureScrollDebounceTimerOverscroll) { 1735 TEST_F(RenderWidgetHostTest, GestureScrollDebounceTimerOverscroll) {
1738 host_->SetupForOverscrollControllerTest(); 1736 host_->SetupForOverscrollControllerTest();
1739 host_->set_debounce_interval_time_ms(10); 1737 host_->SetupForGestureDebouncing(10);
1740 process_->sink().ClearMessages(); 1738 process_->sink().ClearMessages();
1741 1739
1742 // Start scrolling. Receive ACK as it being processed. 1740 // Start scrolling. Receive ACK as it being processed.
1743 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1741 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1744 WebGestureEvent::Touchscreen); 1742 WebGestureEvent::Touchscreen);
1745 EXPECT_EQ(1U, process_->sink().message_count()); 1743 EXPECT_EQ(1U, process_->sink().message_count());
1746 process_->sink().ClearMessages(); 1744 process_->sink().ClearMessages();
1747 1745
1748 // Send update events. 1746 // Send update events.
1749 SimulateGestureScrollUpdateEvent(55, 0, 0); 1747 SimulateGestureScrollUpdateEvent(55, 0, 0);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1789 // router. 1787 // router.
1790 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); 1788 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
1791 EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); 1789 EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize());
1792 EXPECT_EQ(1U, process_->sink().message_count()); 1790 EXPECT_EQ(1U, process_->sink().message_count());
1793 } 1791 }
1794 1792
1795 // Tests that when touch-events are dispatched to the renderer, the overscroll 1793 // Tests that when touch-events are dispatched to the renderer, the overscroll
1796 // gesture deals with them correctly. 1794 // gesture deals with them correctly.
1797 TEST_F(RenderWidgetHostTest, OverscrollWithTouchEvents) { 1795 TEST_F(RenderWidgetHostTest, OverscrollWithTouchEvents) {
1798 host_->SetupForOverscrollControllerTest(); 1796 host_->SetupForOverscrollControllerTest();
1799 host_->set_debounce_interval_time_ms(10); 1797 host_->SetupForGestureDebouncing(10);
1800 host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); 1798 host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true));
1801 process_->sink().ClearMessages(); 1799 process_->sink().ClearMessages();
1802 view_->set_bounds(gfx::Rect(0, 0, 400, 200)); 1800 view_->set_bounds(gfx::Rect(0, 0, 400, 200));
1803 view_->Show(); 1801 view_->Show();
1804 1802
1805 // The test sends an intermingled sequence of touch and gesture events. 1803 // The test sends an intermingled sequence of touch and gesture events.
1806 1804
1807 PressTouchPoint(0, 1); 1805 PressTouchPoint(0, 1);
1808 SendTouchEvent(); 1806 SendTouchEvent();
1809 EXPECT_EQ(1U, process_->sink().message_count()); 1807 EXPECT_EQ(1U, process_->sink().message_count());
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1917 EXPECT_TRUE(host_->TouchEventQueueEmpty()); 1915 EXPECT_TRUE(host_->TouchEventQueueEmpty());
1918 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode()); 1916 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_mode());
1919 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode()); 1917 EXPECT_EQ(OVERSCROLL_NONE, host_->overscroll_delegate()->current_mode());
1920 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->completed_mode()); 1918 EXPECT_EQ(OVERSCROLL_EAST, host_->overscroll_delegate()->completed_mode());
1921 } 1919 }
1922 1920
1923 // Tests that touch-gesture end is dispatched to the renderer at the end of a 1921 // Tests that touch-gesture end is dispatched to the renderer at the end of a
1924 // touch-gesture initiated overscroll. 1922 // touch-gesture initiated overscroll.
1925 TEST_F(RenderWidgetHostTest, TouchGestureEndDispatchedAfterOverscrollComplete) { 1923 TEST_F(RenderWidgetHostTest, TouchGestureEndDispatchedAfterOverscrollComplete) {
1926 host_->SetupForOverscrollControllerTest(); 1924 host_->SetupForOverscrollControllerTest();
1927 host_->set_debounce_interval_time_ms(10); 1925 host_->SetupForGestureDebouncing(10);
1928 host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true)); 1926 host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true));
1929 process_->sink().ClearMessages(); 1927 process_->sink().ClearMessages();
1930 view_->set_bounds(gfx::Rect(0, 0, 400, 200)); 1928 view_->set_bounds(gfx::Rect(0, 0, 400, 200));
1931 view_->Show(); 1929 view_->Show();
1932 1930
1933 // Start scrolling. Receive ACK as it being processed. 1931 // Start scrolling. Receive ACK as it being processed.
1934 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 1932 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
1935 WebGestureEvent::Touchscreen); 1933 WebGestureEvent::Touchscreen);
1936 EXPECT_EQ(1U, process_->sink().message_count()); 1934 EXPECT_EQ(1U, process_->sink().message_count());
1937 // The scroll begin event will have received a synthetic ack from the input 1935 // The scroll begin event will have received a synthetic ack from the input
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
2037 process_->sink().ClearMessages(); 2035 process_->sink().ClearMessages();
2038 // The scroll end event will have received a synthetic ack from the input 2036 // The scroll end event will have received a synthetic ack from the input
2039 // router. 2037 // router.
2040 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize()); 2038 EXPECT_EQ(0U, host_->GestureEventLastQueueEventSize());
2041 EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize()); 2039 EXPECT_EQ(0U, host_->GestureEventDebouncingQueueSize());
2042 EXPECT_EQ(0U, process_->sink().message_count()); 2040 EXPECT_EQ(0U, process_->sink().message_count());
2043 } 2041 }
2044 2042
2045 TEST_F(RenderWidgetHostTest, OverscrollDirectionChange) { 2043 TEST_F(RenderWidgetHostTest, OverscrollDirectionChange) {
2046 host_->SetupForOverscrollControllerTest(); 2044 host_->SetupForOverscrollControllerTest();
2047 host_->set_debounce_interval_time_ms(100); 2045 host_->SetupForGestureDebouncing(100);
2048 process_->sink().ClearMessages(); 2046 process_->sink().ClearMessages();
2049 2047
2050 // Start scrolling. Receive ACK as it being processed. 2048 // Start scrolling. Receive ACK as it being processed.
2051 SimulateGestureEvent(WebInputEvent::GestureScrollBegin, 2049 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
2052 WebGestureEvent::Touchscreen); 2050 WebGestureEvent::Touchscreen);
2053 EXPECT_EQ(1U, process_->sink().message_count()); 2051 EXPECT_EQ(1U, process_->sink().message_count());
2054 process_->sink().ClearMessages(); 2052 process_->sink().ClearMessages();
2055 2053
2056 // Send update events and receive ack as not consumed. 2054 // Send update events and receive ack as not consumed.
2057 SimulateGestureScrollUpdateEvent(125, -5, 0); 2055 SimulateGestureScrollUpdateEvent(125, -5, 0);
(...skipping 621 matching lines...) Expand 10 before | Expand all | Expand 10 after
2679 2677
2680 // Tests RWHI::ForwardTouchEventWithLatencyInfo(). 2678 // Tests RWHI::ForwardTouchEventWithLatencyInfo().
2681 PressTouchPoint(0, 1); 2679 PressTouchPoint(0, 1);
2682 SendTouchEvent(); 2680 SendTouchEvent();
2683 CheckLatencyInfoComponentInMessage( 2681 CheckLatencyInfoComponentInMessage(
2684 process_, GetLatencyComponentId(), WebInputEvent::TouchStart); 2682 process_, GetLatencyComponentId(), WebInputEvent::TouchStart);
2685 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED); 2683 SendInputEventACK(WebInputEvent::TouchStart, INPUT_EVENT_ACK_STATE_CONSUMED);
2686 } 2684 }
2687 2685
2688 } // namespace content 2686 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698