|  | // Copyright 2013 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "content/browser/renderer_host/input/mock_input_disposition_handler.h" | 
|  |  | 
|  | #include "base/bind.h" | 
|  | #include "content/browser/renderer_host/input/input_router.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | using blink::WebInputEvent; | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | MockInputDispositionHandler::MockInputDispositionHandler() | 
|  | : input_router_(nullptr), | 
|  | ack_count_(0), | 
|  | ack_event_type_(WebInputEvent::Type::kUndefined), | 
|  | ack_state_(blink::mojom::InputEventResultState::kUnknown) {} | 
|  |  | 
|  | MockInputDispositionHandler::~MockInputDispositionHandler() {} | 
|  |  | 
|  | InputRouter::KeyboardEventCallback | 
|  | MockInputDispositionHandler::CreateKeyboardEventCallback() { | 
|  | return base::BindOnce(&MockInputDispositionHandler::OnKeyboardEventAck, | 
|  | base::Unretained(this)); | 
|  | } | 
|  |  | 
|  | InputRouter::MouseEventCallback | 
|  | MockInputDispositionHandler::CreateMouseEventCallback() { | 
|  | return base::BindOnce(&MockInputDispositionHandler::OnMouseEventAck, | 
|  | base::Unretained(this)); | 
|  | } | 
|  |  | 
|  | void MockInputDispositionHandler::OnWheelEventAck( | 
|  | const MouseWheelEventWithLatencyInfo& event, | 
|  | blink::mojom::InputEventResultSource ack_source, | 
|  | blink::mojom::InputEventResultState ack_result) { | 
|  | VLOG(1) << __FUNCTION__ << " called!"; | 
|  | acked_wheel_event_ = event.event; | 
|  | acked_wheel_event_state_ = ack_result; | 
|  | RecordAckCalled(event.event.GetType(), ack_result); | 
|  | } | 
|  |  | 
|  | void MockInputDispositionHandler::OnTouchEventAck( | 
|  | const TouchEventWithLatencyInfo& event, | 
|  | blink::mojom::InputEventResultSource ack_source, | 
|  | blink::mojom::InputEventResultState ack_result) { | 
|  | VLOG(1) << __FUNCTION__ << " called!"; | 
|  | acked_touch_event_ = event; | 
|  | RecordAckCalled(event.event.GetType(), ack_result); | 
|  | if (touch_followup_event_) | 
|  | input_router_->SendTouchEvent(*touch_followup_event_); | 
|  | if (gesture_followup_event_) | 
|  | input_router_->SendGestureEvent(*gesture_followup_event_); | 
|  | } | 
|  |  | 
|  | void MockInputDispositionHandler::OnGestureEventAck( | 
|  | const GestureEventWithLatencyInfo& event, | 
|  | blink::mojom::InputEventResultSource ack_source, | 
|  | blink::mojom::InputEventResultState ack_result, | 
|  | blink::mojom::ScrollResultDataPtr scroll_result_data) { | 
|  | VLOG(1) << __FUNCTION__ << " called!"; | 
|  | acked_gesture_event_ = event.event; | 
|  | RecordAckCalled(event.event.GetType(), ack_result); | 
|  | } | 
|  |  | 
|  | size_t MockInputDispositionHandler::GetAndResetAckCount() { | 
|  | size_t ack_count = ack_count_; | 
|  | ack_count_ = 0; | 
|  | return ack_count; | 
|  | } | 
|  |  | 
|  | void MockInputDispositionHandler::RecordAckCalled( | 
|  | blink::WebInputEvent::Type type, | 
|  | blink::mojom::InputEventResultState ack_result) { | 
|  | ack_event_type_ = type; | 
|  | ++ack_count_; | 
|  | ack_state_ = ack_result; | 
|  | } | 
|  |  | 
|  | void MockInputDispositionHandler::OnKeyboardEventAck( | 
|  | const NativeWebKeyboardEventWithLatencyInfo& event, | 
|  | blink::mojom::InputEventResultSource ack_source, | 
|  | blink::mojom::InputEventResultState ack_result) { | 
|  | VLOG(1) << __FUNCTION__ << " called!"; | 
|  | acked_key_event_ = std::make_unique<NativeWebKeyboardEvent>(event.event); | 
|  | RecordAckCalled(event.event.GetType(), ack_result); | 
|  | } | 
|  |  | 
|  | void MockInputDispositionHandler::OnMouseEventAck( | 
|  | const MouseEventWithLatencyInfo& event, | 
|  | blink::mojom::InputEventResultSource ack_source, | 
|  | blink::mojom::InputEventResultState ack_result) { | 
|  | VLOG(1) << __FUNCTION__ << " called!"; | 
|  | acked_mouse_event_ = event.event; | 
|  | RecordAckCalled(event.event.GetType(), ack_result); | 
|  | } | 
|  |  | 
|  | }  // namespace content |