// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_INPUT_RENDER_INPUT_ROUTER_CLIENT_H_
#define COMPONENTS_INPUT_RENDER_INPUT_ROUTER_CLIENT_H_

#include <optional>

#include "base/component_export.h"
#include "build/build_config.h"
#include "components/input/input_router_client.h"
#include "third_party/blink/public/common/input/web_input_event.h"
#include "third_party/blink/public/mojom/widget/platform_widget.mojom.h"
#include "ui/latency/latency_info.h"

namespace input {

class COMPONENT_EXPORT(INPUT) RenderInputRouterClient {
 public:
  virtual void ForwardWheelEventWithLatencyInfo(
      const blink::WebMouseWheelEvent& wheel_event,
      const ui::LatencyInfo& latency_info) = 0;

  virtual bool IsAutoscrollInProgress() = 0;

  virtual void SetMouseCapture(bool capture) = 0;
  virtual void SetAutoscrollSelectionActiveInMainFrame(
      bool autoscroll_selection) = 0;
  virtual void RequestMouseLock(
      bool from_user_gesture,
      bool unadjusted_movement,
      blink::mojom::WidgetInputHandlerHost::RequestMouseLockCallback
          response) = 0;

  virtual void OnImeCancelComposition() = 0;
  virtual void OnImeCompositionRangeChanged(
      const gfx::Range& range,
      const std::optional<std::vector<gfx::Rect>>& character_bounds) = 0;
  // Initiate stylus handwriting.
  virtual void OnStartStylusWriting() = 0;
  // Update which editable element has focus for stylus writing. When
  // `focus_widget_rect_in_dips` is provided, sets focus and caret position
  // based on a hit test performed with that rect. Otherwise fallback to the
  // Element CurrentTouchDownElement() and use default focus caret position.
  // Caret position is only updated if the target element doesn't already have
  // focus.
  virtual void UpdateElementFocusForStylusWriting(
#if BUILDFLAG(IS_WIN)
      const gfx::Rect& focus_widget_rect_in_dips
#endif  // BUILDFLAG(IS_WIN)
      ) = 0;
};

}  // namespace input

#endif  // COMPONENTS_INPUT_RENDER_INPUT_ROUTER_CLIENT_H_
