diff options
Diffstat (limited to 'chromium/content/common/input/gesture_event_stream_validator.cc')
-rw-r--r-- | chromium/content/common/input/gesture_event_stream_validator.cc | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/chromium/content/common/input/gesture_event_stream_validator.cc b/chromium/content/common/input/gesture_event_stream_validator.cc new file mode 100644 index 00000000000..a6229f98b69 --- /dev/null +++ b/chromium/content/common/input/gesture_event_stream_validator.cc @@ -0,0 +1,78 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/common/input/gesture_event_stream_validator.h" + +#include "base/logging.h" +#include "third_party/WebKit/public/web/WebInputEvent.h" + +using blink::WebInputEvent; + +namespace content { + +GestureEventStreamValidator::GestureEventStreamValidator() + : scrolling_(false), pinching_(false), waiting_for_tap_end_(false) { +} + +GestureEventStreamValidator::~GestureEventStreamValidator() { +} + +bool GestureEventStreamValidator::Validate(const blink::WebGestureEvent& event, + std::string* error_msg) { + DCHECK(error_msg); + error_msg->clear(); + switch (event.type) { + case WebInputEvent::GestureScrollBegin: + if (scrolling_ || pinching_) + error_msg->append("Scroll begin during scroll\n"); + scrolling_ = true; + break; + case WebInputEvent::GestureScrollUpdate: + case WebInputEvent::GestureScrollUpdateWithoutPropagation: + if (!scrolling_) + error_msg->append("Scroll update outside of scroll\n"); + break; + case WebInputEvent::GestureScrollEnd: + case WebInputEvent::GestureFlingStart: + if (!scrolling_) + error_msg->append("Scroll end outside of scroll\n"); + if (pinching_) + error_msg->append("Ending scroll while pinching\n"); + scrolling_ = false; + break; + case WebInputEvent::GesturePinchBegin: + if (!scrolling_) + error_msg->append("Pinch begin outside of scroll\n"); + if (pinching_) + error_msg->append("Pinch begin during pinch\n"); + pinching_ = true; + break; + case WebInputEvent::GesturePinchUpdate: + if (!pinching_ || !scrolling_) + error_msg->append("Pinch update outside of pinch\n"); + break; + case WebInputEvent::GesturePinchEnd: + if (!pinching_ || !scrolling_) + error_msg->append("Pinch end outside of pinch\n"); + pinching_ = false; + break; + case WebInputEvent::GestureTapDown: + if (waiting_for_tap_end_) + error_msg->append("Missing tap end event\n"); + waiting_for_tap_end_ = true; + break; + case WebInputEvent::GestureTap: + case WebInputEvent::GestureTapCancel: + case WebInputEvent::GestureDoubleTap: + if (!waiting_for_tap_end_) + error_msg->append("Missing GestureTapDown event\n"); + waiting_for_tap_end_ = false; + break; + default: + break; + } + return error_msg->empty(); +} + +} // namespace content |