158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/browser/renderer_host/input/mock_input_ack_handler.h"
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/browser/renderer_host/input/input_router.h"
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)using base::TimeDelta;
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebGestureEvent;
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebInputEvent;
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMouseEvent;
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMouseWheelEvent;
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebTouchEvent;
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebTouchPoint;
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace content {
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)MockInputAckHandler::MockInputAckHandler()
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    : input_router_(NULL),
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      ack_count_(0),
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      unexpected_event_ack_called_(false),
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      ack_event_type_(WebInputEvent::Undefined),
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      ack_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) {
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)MockInputAckHandler::~MockInputAckHandler() {}
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void MockInputAckHandler::OnKeyboardEventAck(
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    const NativeWebKeyboardEvent& event,
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    InputEventAckState ack_result)  {
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  VLOG(1) << __FUNCTION__ << " called!";
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  acked_key_event_ = event;
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  RecordAckCalled(event.type, ack_result);
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void MockInputAckHandler::OnWheelEventAck(
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const MouseWheelEventWithLatencyInfo& event,
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    InputEventAckState ack_result) {
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  VLOG(1) << __FUNCTION__ << " called!";
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  acked_wheel_event_ = event.event;
43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  RecordAckCalled(event.event.type, ack_result);
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void MockInputAckHandler::OnTouchEventAck(
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    const TouchEventWithLatencyInfo& event,
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    InputEventAckState ack_result) {
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  VLOG(1) << __FUNCTION__ << " called!";
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  acked_touch_event_ = event;
51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  RecordAckCalled(event.event.type, ack_result);
5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (touch_followup_event_)
5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    input_router_->SendTouchEvent(*touch_followup_event_);
5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (gesture_followup_event_)
5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    input_router_->SendGestureEvent(*gesture_followup_event_);
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void MockInputAckHandler::OnGestureEventAck(
594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    const GestureEventWithLatencyInfo& event,
604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    InputEventAckState ack_result) {
6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  VLOG(1) << __FUNCTION__ << " called!";
624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  acked_gesture_event_ = event.event;
63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  RecordAckCalled(event.event.type, ack_result);
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void MockInputAckHandler::OnUnexpectedEventAck(UnexpectedEventAckType type)  {
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  VLOG(1) << __FUNCTION__ << " called!";
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  unexpected_event_ack_called_ = true;
6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)size_t MockInputAckHandler::GetAndResetAckCount() {
724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  size_t ack_count = ack_count_;
7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ack_count_ = 0;
744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return ack_count;
7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void MockInputAckHandler::RecordAckCalled(blink::WebInputEvent::Type type,
78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                          InputEventAckState ack_result) {
79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ack_event_type_ = type;
8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ++ack_count_;
8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ack_state_ = ack_result;
8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace content
85