1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
  126
  127
  128
  129
  130
  131
  132
  133

content / browser / renderer_host / input / mock_input_router_client.h [blame]

// 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.

#ifndef CONTENT_BROWSER_RENDERER_HOST_INPUT_MOCK_INPUT_ROUTER_CLIENT_H_
#define CONTENT_BROWSER_RENDERER_HOST_INPUT_MOCK_INPUT_ROUTER_CLIENT_H_

#include <stddef.h>

#include <memory>

#include "base/memory/raw_ptr.h"
#include "components/input/fling_controller.h"
#include "components/input/input_router.h"
#include "components/input/input_router_client.h"
#include "content/browser/renderer_host/input/mock_render_widget_host_view_for_stylus_writing.h"
#include "content/browser/scheduler/browser_ui_thread_scheduler.h"
#include "content/test/mock_widget_input_handler.h"
#include "ui/events/blink/did_overscroll_params.h"

namespace content {

class MockInputRouterClient : public input::InputRouterClient,
                              public input::FlingControllerSchedulerClient {
 public:
  MockInputRouterClient();
  ~MockInputRouterClient() override;

  // InputRouterClient
  blink::mojom::InputEventResultState FilterInputEvent(
      const blink::WebInputEvent& input_event,
      const ui::LatencyInfo& latency_info) override;
  void IncrementInFlightEventCount() override;
  void DecrementInFlightEventCount(
      blink::mojom::InputEventResultSource ack_source) override;
  void NotifyUISchedulerOfGestureEventUpdate(
      blink::WebInputEvent::Type gesture_event) override;
  void DidOverscroll(const ui::DidOverscrollParams& params) override;
  void OnSetCompositorAllowedTouchAction(cc::TouchAction touch_action) override;
  void DidStartScrollingViewport() override;
  void ForwardWheelEventWithLatencyInfo(
      const blink::WebMouseWheelEvent& wheel_event,
      const ui::LatencyInfo& latency_info) override;
  void ForwardGestureEventWithLatencyInfo(
      const blink::WebGestureEvent& gesture_event,
      const ui::LatencyInfo& latency_info) override;
  bool IsWheelScrollInProgress() override;
  bool IsAutoscrollInProgress() override;
  void SetMouseCapture(bool capture) override {}
  void SetAutoscrollSelectionActiveInMainFrame(
      bool autoscroll_selection) override {}
  void RequestMouseLock(
      bool user_gesture,
      bool unadjusted_movement,
      blink::mojom::WidgetInputHandlerHost::RequestMouseLockCallback response)
      override {}
  gfx::Size GetRootWidgetViewportSize() override;
  void OnInvalidInputEventSource() override {}
  blink::mojom::WidgetInputHandler* GetWidgetInputHandler() override;
  void OnImeCancelComposition() override {}
  void OnImeCompositionRangeChanged(
      const gfx::Range& range,
      const std::optional<std::vector<gfx::Rect>>& character_bounds,
      const std::optional<std::vector<gfx::Rect>>& line_bounds) override {}
  input::StylusInterface* GetStylusInterface() override;
  void OnStartStylusWriting() override;

  bool GetAndResetFilterEventCalled();
  ui::DidOverscrollParams GetAndResetOverscroll();
  cc::TouchAction GetAndResetCompositorAllowedTouchAction();

  void set_input_router(input::InputRouter* input_router) {
    input_router_ = input_router;
  }

  void set_filter_state(blink::mojom::InputEventResultState filter_state) {
    filter_state_ = filter_state;
  }
  int in_flight_event_count() const {
    return in_flight_event_count_;
  }
  blink::WebInputEvent::Type last_in_flight_event_type() const {
    return last_filter_event()->GetType();
  }
  void set_allow_send_event(bool allow) {
    filter_state_ = blink::mojom::InputEventResultState::kNoConsumerExists;
  }
  const blink::WebInputEvent* last_filter_event() const {
    return last_filter_event_.get();
  }
  bool on_start_stylus_writing_called() const {
    return on_start_stylus_writing_called_;
  }
  MockWidgetInputHandler::MessageVector GetAndResetDispatchedMessages() {
    return widget_input_handler_.GetAndResetDispatchedMessages();
  }
  void set_render_widget_host_view(
      MockRenderWidgetHostViewForStylusWriting* view) {
    render_widget_host_view_ = view;
  }

  // FlingControllerSchedulerClient
  void ScheduleFlingProgress(
      base::WeakPtr<input::FlingController> fling_controller) override {}
  void DidStopFlingingOnBrowser(
      base::WeakPtr<input::FlingController> fling_controller) override {}
  bool NeedsBeginFrameForFlingProgress() override;
  bool ShouldUseMobileFlingCurve() override;
  gfx::Vector2dF GetPixelsPerInch(
      const gfx::PointF& position_in_screen) override;

 private:
  raw_ptr<input::InputRouter, DanglingUntriaged> input_router_;
  int in_flight_event_count_ = 0;

  blink::mojom::InputEventResultState filter_state_;

  bool filter_input_event_called_;
  std::unique_ptr<blink::WebInputEvent> last_filter_event_;

  ui::DidOverscrollParams overscroll_;

  cc::TouchAction compositor_allowed_touch_action_;

  bool is_wheel_scroll_in_progress_ = false;
  MockWidgetInputHandler widget_input_handler_;
  raw_ptr<MockRenderWidgetHostViewForStylusWriting> render_widget_host_view_;
  bool on_start_stylus_writing_called_ = false;
};

}  // namespace content

#endif  // CONTENT_BROWSER_RENDERER_HOST_INPUT_MOCK_INPUT_ROUTER_CLIENT_H_