1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "content/common/input/input_event_stream_validator.h" 6 7 #include "base/check.h" 8 #include "base/command_line.h" 9 #include "content/public/common/content_switches.h" 10 #include "third_party/blink/public/common/input/web_gesture_event.h" 11 #include "third_party/blink/public/common/input/web_input_event.h" 12 #include "ui/events/blink/web_input_event_traits.h" 13 14 using blink::WebInputEvent; 15 using blink::WebGestureEvent; 16 using blink::WebTouchEvent; 17 18 namespace content { 19 InputEventStreamValidator()20InputEventStreamValidator::InputEventStreamValidator() 21 : enabled_(base::CommandLine::ForCurrentProcess()->HasSwitch( 22 switches::kValidateInputEventStream)) { 23 } 24 ~InputEventStreamValidator()25InputEventStreamValidator::~InputEventStreamValidator() { 26 } 27 Validate(const WebInputEvent & event)28void InputEventStreamValidator::Validate(const WebInputEvent& event) { 29 if (!enabled_) 30 return; 31 32 DCHECK(ValidateImpl(event, &error_msg_)) 33 << error_msg_ 34 << "\nInvalid Event: " << ui::WebInputEventTraits::ToString(event); 35 } 36 ValidateImpl(const blink::WebInputEvent & event,std::string * error_msg)37bool InputEventStreamValidator::ValidateImpl( 38 const blink::WebInputEvent& event, 39 std::string* error_msg) { 40 DCHECK(error_msg); 41 if (WebInputEvent::IsGestureEventType(event.GetType())) { 42 const WebGestureEvent& gesture = static_cast<const WebGestureEvent&>(event); 43 // TODO(jdduke): Validate touchpad gesture streams. 44 if (gesture.SourceDevice() == blink::WebGestureDevice::kTouchscreen) 45 return gesture_validator_.Validate(gesture, error_msg); 46 } else if (WebInputEvent::IsTouchEventType(event.GetType())) { 47 const WebTouchEvent& touch = static_cast<const WebTouchEvent&>(event); 48 return touch_validator_.Validate(touch, error_msg); 49 } 50 return true; 51 } 52 53 } // namespace content 54