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
|
// 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_VIZ_SERVICE_INPUT_RENDER_INPUT_ROUTER_SUPPORT_BASE_H_
#define COMPONENTS_VIZ_SERVICE_INPUT_RENDER_INPUT_ROUTER_SUPPORT_BASE_H_
#include "base/observer_list.h"
#include "components/input/render_widget_host_view_input.h"
#include "components/viz/common/hit_test/hit_test_data_provider.h"
#include "components/viz/common/quads/compositor_frame_metadata.h"
#include "components/viz/service/viz_service_export.h"
namespace viz {
class VIZ_SERVICE_EXPORT RenderInputRouterSupportBase
: public input::RenderWidgetHostViewInput {
public:
RenderInputRouterSupportBase(const RenderInputRouterSupportBase&) = delete;
RenderInputRouterSupportBase& operator=(const RenderInputRouterSupportBase&) =
delete;
~RenderInputRouterSupportBase() override;
class Delegate {
public:
virtual const DisplayHitTestQueryMap& GetDisplayHitTestQuery() const = 0;
virtual float GetDeviceScaleFactorForId(
const FrameSinkId& frame_sink_id) = 0;
virtual FrameSinkId GetRootCompositorFrameSinkId(
const FrameSinkId& child_frame_sink_id) = 0;
// The following Get(Parent/Root)RenderInputRouterSupport methods should be
// called only from RenderInputRouterSupportChildFrame.
virtual RenderInputRouterSupportBase* GetParentRenderInputRouterSupport(
const FrameSinkId& frame_sink_id) = 0;
virtual RenderInputRouterSupportBase* GetRootRenderInputRouterSupport(
const FrameSinkId& frame_sink_id) = 0;
virtual const CompositorFrameMetadata* GetLastActivatedFrameMetadata(
const FrameSinkId& frame_sink_id) = 0;
};
virtual bool IsRenderInputRouterSupportChildFrame() const = 0;
virtual void NotifySiteIsMobileOptimized(bool is_mobile_optimized) = 0;
// StylusInterface implementation.
bool ShouldInitiateStylusWriting() override;
void NotifyHoverActionStylusWritable(bool stylus_writable) override;
// RenderWidgetHostViewInput implementation
base::WeakPtr<input::RenderWidgetHostViewInput> GetInputWeakPtr() override;
input::RenderInputRouter* GetViewRenderInputRouter() override;
void ProcessMouseEvent(const blink::WebMouseEvent& event,
const ui::LatencyInfo& latency) override;
void ProcessMouseWheelEvent(const blink::WebMouseWheelEvent& event,
const ui::LatencyInfo& latency) override;
void ProcessTouchEvent(const blink::WebTouchEvent& event,
const ui::LatencyInfo& latency) override;
void ProcessGestureEvent(const blink::WebGestureEvent& event,
const ui::LatencyInfo& latency) override;
RenderInputRouterSupportBase* GetRootView() override;
const LocalSurfaceId& GetLocalSurfaceId() const override;
const FrameSinkId& GetFrameSinkId() const override;
gfx::Size GetVisibleViewportSize() override;
void OnAutoscrollStart() override;
void UpdateCursor(const ui::Cursor& cursor) override {}
const DisplayHitTestQueryMap& GetDisplayHitTestQuery() const override;
float GetDeviceScaleFactor() const final;
bool IsPointerLocked() override;
void StopFlingingOnViz();
Delegate* delegate() { return delegate_; }
protected:
explicit RenderInputRouterSupportBase(input::RenderInputRouter* rir,
Delegate* delegate,
const FrameSinkId& frame_sink_id);
void UpdateFrameSinkIdRegistration() override;
private:
const FrameSinkId frame_sink_id_;
// |delegate_| is the InputManager and outlives |this|.
raw_ptr<Delegate> delegate_;
// |rir_| is owned by InputManager and outlives it's associated
// RenderInputRouterSupportBase, so it's safe to keep a reference to it.
const raw_ref<input::RenderInputRouter> rir_;
base::WeakPtrFactory<RenderInputRouterSupportBase> weak_factory_{this};
};
} // namespace viz
#endif // COMPONENTS_VIZ_SERVICE_INPUT_RENDER_INPUT_ROUTER_SUPPORT_BASE_H_
|