1558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "content/browser/renderer_host/input/touchscreen_tap_suppression_controller.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/browser/renderer_host/input/gesture_event_queue.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochusing blink::WebInputEvent; 10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TouchscreenTapSuppressionController::TouchscreenTapSuppressionController( 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GestureEventQueue* geq, 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const TapSuppressionController::Config& config) 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : gesture_event_queue_(geq), controller_(this, config) { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TouchscreenTapSuppressionController::~TouchscreenTapSuppressionController() {} 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TouchscreenTapSuppressionController::GestureFlingCancel() { 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) controller_.GestureFlingCancel(); 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TouchscreenTapSuppressionController::GestureFlingCancelAck( 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool processed) { 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) controller_.GestureFlingCancelAck(processed); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool TouchscreenTapSuppressionController::FilterTapEvent( 31b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const GestureEventWithLatencyInfo& event) { 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch switch (event.event.type) { 33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case WebInputEvent::GestureTapDown: 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (!controller_.ShouldDeferTapDown()) 35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return false; 36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch stashed_tap_down_.reset(new GestureEventWithLatencyInfo(event)); 37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case WebInputEvent::GestureShowPress: 40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!stashed_tap_down_) 41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return false; 42c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch stashed_show_press_.reset(new GestureEventWithLatencyInfo(event)); 43c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case WebInputEvent::GestureTapUnconfirmed: 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return stashed_tap_down_; 47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case WebInputEvent::GestureTapCancel: 49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case WebInputEvent::GestureTap: 50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case WebInputEvent::GestureDoubleTap: 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return controller_.ShouldSuppressTapEnd(); 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch default: 54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch break; 55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return false; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TouchscreenTapSuppressionController::DropStashedTapDown() { 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) stashed_tap_down_.reset(); 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) stashed_show_press_.reset(); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void TouchscreenTapSuppressionController::ForwardStashedTapDown() { 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(stashed_tap_down_); 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ScopedGestureEvent tap_down = stashed_tap_down_.Pass(); 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ScopedGestureEvent show_press = stashed_show_press_.Pass(); 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gesture_event_queue_->ForwardGestureEvent(*tap_down); 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (show_press) 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gesture_event_queue_->ForwardGestureEvent(*show_press); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 74