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

Side by Side Diff: content/browser/renderer_host/input/immediate_input_router_unittest.cc

Issue 16114003: Don't send touch move to renderer while scrolling (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: use ScrollBegin instead of ScrollUpdate as the indication of stop sending touch move & rebase Created 7 years, 4 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "content/browser/renderer_host/input/gesture_event_filter.h" 8 #include "content/browser/renderer_host/input/gesture_event_filter.h"
9 #include "content/browser/renderer_host/input/immediate_input_router.h" 9 #include "content/browser/renderer_host/input/immediate_input_router.h"
10 #include "content/browser/renderer_host/input/input_router_client.h" 10 #include "content/browser/renderer_host/input/input_router_client.h"
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 } 541 }
542 542
543 size_t TouchEventQueueSize() { 543 size_t TouchEventQueueSize() {
544 return touch_event_queue()->GetQueueSize(); 544 return touch_event_queue()->GetQueueSize();
545 } 545 }
546 546
547 const WebTouchEvent& latest_event() const { 547 const WebTouchEvent& latest_event() const {
548 return touch_event_queue()->GetLatestEvent().event; 548 return touch_event_queue()->GetLatestEvent().event;
549 } 549 }
550 550
551 void EnableNoTouchToRendererWhileScrolling() {
552 input_router_->enable_no_touch_to_renderer_while_scrolling_ = true;
553 }
554
555 bool no_touch_move_to_renderer() {
556 return touch_event_queue()->no_touch_move_to_renderer_;
557 }
558
551 TouchEventQueue* touch_event_queue() const { 559 TouchEventQueue* touch_event_queue() const {
552 return input_router_->touch_event_queue(); 560 return input_router_->touch_event_queue();
553 } 561 }
554 562
555 unsigned GestureEventLastQueueEventSize() { 563 unsigned GestureEventLastQueueEventSize() {
556 return gesture_event_filter()->coalesced_gesture_events_.size(); 564 return gesture_event_filter()->coalesced_gesture_events_.size();
557 } 565 }
558 566
559 WebGestureEvent GestureEventSecondFromLastQueueEvent() { 567 WebGestureEvent GestureEventSecondFromLastQueueEvent() {
560 return gesture_event_filter()->coalesced_gesture_events_.at( 568 return gesture_event_filter()->coalesced_gesture_events_.at(
(...skipping 1597 matching lines...) Expand 10 before | Expand all | Expand 10 after
2158 // Check that the second event was sent. 2166 // Check that the second event was sent.
2159 EXPECT_EQ(1U, process_->sink().message_count()); 2167 EXPECT_EQ(1U, process_->sink().message_count());
2160 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( 2168 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
2161 InputMsg_HandleInputEvent::ID)); 2169 InputMsg_HandleInputEvent::ID));
2162 process_->sink().ClearMessages(); 2170 process_->sink().ClearMessages();
2163 2171
2164 // Check that the correct unhandled wheel event was received. 2172 // Check that the correct unhandled wheel event was received.
2165 EXPECT_EQ(client_->acked_wheel_event().deltaY, -5); 2173 EXPECT_EQ(client_->acked_wheel_event().deltaY, -5);
2166 } 2174 }
2167 2175
2176 // Tests that no touch move events are sent to renderer during scrolling.
2177 TEST_F(ImmediateInputRouterTest, NoTouchMoveWhileScroll) {
2178 EnableNoTouchToRendererWhileScrolling();
2179 set_debounce_interval_time_ms(0);
2180 input_router_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, true));
2181 process_->sink().ClearMessages();
2182
2183 // First touch press.
2184 PressTouchPoint(0, 1);
2185 SendTouchEvent();
2186 EXPECT_EQ(1U, process_->sink().message_count());
2187 process_->sink().ClearMessages();
2188 SendInputEventACK(WebInputEvent::TouchStart,
2189 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2190
2191 // Touch move will trigger scroll.
2192 MoveTouchPoint(0, 20, 5);
2193 SendTouchEvent();
2194 EXPECT_EQ(1U, process_->sink().message_count());
2195 process_->sink().ClearMessages();
2196 SendInputEventACK(WebInputEvent::TouchMove,
2197 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2198
2199 SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
2200 WebGestureEvent::Touchscreen);
2201 EXPECT_EQ(1U, process_->sink().message_count());
2202 EXPECT_TRUE(no_touch_move_to_renderer());
2203 process_->sink().ClearMessages();
2204 SendInputEventACK(WebInputEvent::GestureScrollBegin,
2205 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2206
2207 // Touch move should not be sent to renderer.
2208 MoveTouchPoint(0, 30, 5);
2209 SendTouchEvent();
2210 EXPECT_EQ(0U, process_->sink().message_count());
2211 process_->sink().ClearMessages();
2212
2213 // Touch moves become ScrollUpdate.
2214 SimulateGestureScrollUpdateEvent(20, 4, 0);
2215 EXPECT_TRUE(no_touch_move_to_renderer());
2216 process_->sink().ClearMessages();
2217 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
2218 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2219
2220 // Touch move should not be sent to renderer.
2221 MoveTouchPoint(0, 65, 10);
2222 SendTouchEvent();
2223 EXPECT_EQ(0U, process_->sink().message_count());
2224 process_->sink().ClearMessages();
2225
2226 // Touch end should still be sent to renderer.
2227 ReleaseTouchPoint(0);
2228 SendTouchEvent();
2229 EXPECT_EQ(1U, process_->sink().message_count());
2230 process_->sink().ClearMessages();
2231 SendInputEventACK(WebInputEvent::TouchEnd,
2232 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2233
2234 // On GestureScrollEnd, resume sending touch moves to renderer.
2235 SimulateGestureEvent(WebKit::WebInputEvent::GestureScrollEnd,
2236 WebGestureEvent::Touchscreen);
2237 EXPECT_EQ(1U, process_->sink().message_count());
2238 EXPECT_FALSE(no_touch_move_to_renderer());
2239 process_->sink().ClearMessages();
2240 SendInputEventACK(WebInputEvent::GestureScrollEnd,
2241 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2242
2243 // Now touch events should come through to renderer.
2244 PressTouchPoint(80, 10);
2245 SendTouchEvent();
2246 EXPECT_EQ(1U, process_->sink().message_count());
2247 process_->sink().ClearMessages();
2248 SendInputEventACK(WebInputEvent::TouchStart,
2249 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2250
2251 MoveTouchPoint(0, 80, 20);
2252 SendTouchEvent();
2253 EXPECT_EQ(1U, process_->sink().message_count());
2254 process_->sink().ClearMessages();
2255 SendInputEventACK(WebInputEvent::TouchMove,
2256 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2257
2258 ReleaseTouchPoint(0);
2259 SendTouchEvent();
2260 EXPECT_EQ(1U, process_->sink().message_count());
2261 process_->sink().ClearMessages();
2262 SendInputEventACK(WebInputEvent::TouchEnd,
2263 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
2264 }
2168 } // namespace content 2265 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698