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