summaryrefslogtreecommitdiffstats
path: root/chromium/content/common/input/gesture_event_stream_validator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/common/input/gesture_event_stream_validator.cc')
-rw-r--r--chromium/content/common/input/gesture_event_stream_validator.cc78
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