chromium/content/browser/renderer_host/render_widget_host_impl.cc

// Copyright 2012 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/render_widget_host_impl.h"

#include <math.h>

#include <algorithm>
#include <optional>
#include <set>
#include <tuple>
#include <unordered_map>
#include <utility>
#include <vector>

#include "base/auto_reset.h"
#include "base/check.h"
#include "base/command_line.h"
#include "base/containers/contains.h"
#include "base/debug/alias.h"
#include "base/debug/dump_without_crashing.h"
#include "base/feature_list.h"
#include "base/files/file_path.h"
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "base/hash/hash.h"
#include "base/i18n/rtl.h"
#include "base/lazy_instance.h"
#include "base/location.h"
#include "base/memory/ptr_util.h"
#include "base/metrics/field_trial.h"
#include "base/metrics/histogram_macros.h"
#include "base/observer_list.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/task/current_thread.h"
#include "base/task/single_thread_task_runner.h"
#include "base/time/default_tick_clock.h"
#include "base/trace_event/optional_trace_event.h"
#include "base/trace_event/trace_event.h"
#include "build/build_config.h"
#include "cc/base/switches.h"
#include "cc/input/browser_controls_offset_tags_info.h"
#include "cc/trees/browser_controls_params.h"
#include "cc/trees/render_frame_metadata.h"
#include "components/input/input_router_config_helper.h"
#include "components/input/native_web_keyboard_event.h"
#include "components/input/render_input_router.mojom.h"
#include "components/input/render_widget_host_input_event_router.h"
#include "components/input/timeout_monitor.h"
#include "components/input/utils.h"
#include "components/viz/common/features.h"
#include "components/viz/host/host_frame_sink_manager.h"
#include "content/browser/accessibility/browser_accessibility_state_impl.h"
#include "content/browser/bad_message.h"
#include "content/browser/browser_main_loop.h"
#include "content/browser/child_process_security_policy_impl.h"
#include "content/browser/compositor/surface_utils.h"
#include "content/browser/devtools/devtools_instrumentation.h"
#include "content/browser/file_system/browser_file_system_helper.h"
#include "content/browser/file_system_access/file_system_access_manager_impl.h"
#include "content/browser/gpu/compositor_util.h"
#include "content/browser/renderer_host/agent_scheduling_group_host.h"
#include "content/browser/renderer_host/data_transfer_util.h"
#include "content/browser/renderer_host/dip_util.h"
#include "content/browser/renderer_host/display_feature.h"
#include "content/browser/renderer_host/frame_token_message_queue.h"
#include "content/browser/renderer_host/frame_tree.h"
#include "content/browser/renderer_host/input/fling_scheduler.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/renderer_host/render_view_host_delegate.h"
#include "content/browser/renderer_host/render_view_host_delegate_view.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/renderer_host/render_widget_helper.h"
#include "content/browser/renderer_host/render_widget_host_owner_delegate.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
#include "content/browser/renderer_host/render_widget_host_view_child_frame.h"
#include "content/browser/renderer_host/visible_time_request_trigger.h"
#include "content/browser/scheduler/browser_task_executor.h"
#include "content/browser/scheduler/browser_ui_thread_scheduler.h"
#include "content/browser/storage_partition_impl.h"
#include "content/common/content_constants_internal.h"
#include "content/common/frame.mojom.h"
#include "content/common/input/synthetic_gesture.h"
#include "content/common/input/synthetic_gesture_controller.h"
#include "content/common/input/synthetic_gesture_target.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/device_service.h"
#include "content/public/browser/keyboard_event_processing_result.h"
#include "content/public/browser/peak_gpu_memory_tracker_factory.h"
#include "content/public/browser/render_frame_metadata_provider.h"
#include "content/public/browser/render_process_host_priority_client.h"
#include "content/public/browser/render_widget_host_iterator.h"
#include "content/public/browser/render_widget_host_observer.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/common/content_constants.h"
#include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/drop_data.h"
#include "content/public/common/result_codes.h"
#include "gpu/GLES2/gl2extchromium.h"
#include "gpu/command_buffer/service/gpu_switches.h"
#include "mojo/public/cpp/bindings/callback_helpers.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/system/platform_handle.h"
#include "net/base/filename_util.h"
#include "services/network/public/mojom/referrer_policy.mojom-shared.h"
#include "skia/ext/image_operations.h"
#include "skia/ext/platform_canvas.h"
#include "skia/ext/skia_utils_base.h"
#include "storage/browser/file_system/isolated_context.h"
#include "third_party/blink/public/common/input/synthetic_web_input_event_builders.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "third_party/blink/public/common/web_preferences/web_preferences.h"
#include "third_party/blink/public/common/widget/constants.h"
#include "third_party/blink/public/common/widget/visual_properties.h"
#include "third_party/blink/public/mojom/drag/drag.mojom.h"
#include "third_party/blink/public/mojom/frame/intrinsic_sizing_info.mojom.h"
#include "third_party/blink/public/mojom/input/touch_event.mojom.h"
#include "ui/accessibility/platform/browser_accessibility_manager.h"
#include "ui/base/clipboard/clipboard_constants.h"
#include "ui/base/cursor/cursor.h"
#include "ui/base/dragdrop/mojom/drag_drop_types.mojom.h"
#include "ui/base/ime/mojom/text_input_state.mojom.h"
#include "ui/base/ui_base_features.h"
#include "ui/base/ui_base_switches.h"
#include "ui/compositor/compositor.h"
#include "ui/display/display_switches.h"
#include "ui/display/display_util.h"
#include "ui/display/screen.h"
#include "ui/events/blink/web_input_event_traits.h"
#include "ui/events/event.h"
#include "ui/events/keycodes/dom/dom_code.h"
#include "ui/gfx/color_space.h"
#include "ui/gfx/geometry/size_conversions.h"
#include "ui/gfx/geometry/vector2d_conversions.h"
#include "ui/gfx/geometry/vector2d_f.h"
#include "ui/gfx/image/image.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/skbitmap_operations.h"
#include "ui/snapshot/snapshot.h"

#if BUILDFLAG(IS_ANDROID)
#include "content/browser/renderer_host/input/fling_scheduler_android.h"
#include "ui/android/view_android.h"
#endif

#if BUILDFLAG(IS_MAC)
#include "content/browser/renderer_host/input/fling_scheduler_mac.h"
#include "services/device/public/mojom/wake_lock_provider.mojom.h"
#include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
#include "ui/base/cocoa/cursor_accessibility_scale_factor.h"
#endif

DragOperationsMask;
WebGestureEvent;
WebInputEvent;
WebKeyboardEvent;
WebMouseEvent;
WebMouseWheelEvent;

namespace content {
namespace {

constexpr gfx::Rect kInvalidScreenRect(std::numeric_limits<int>::max(),
                                       std::numeric_limits<int>::max(),
                                       0,
                                       0);

bool g_check_for_pending_visual_properties_ack =;

// <process id, routing id>
RenderWidgetHostID;
RoutingIDWidgetMap;
base::LazyInstance<RoutingIDWidgetMap>::DestructorAtExit
    g_routing_id_widget_map =;

// Implements the RenderWidgetHostIterator and RenderInputRouterIterator
// interface. It keeps a list of RenderWidgetHosts, and makes sure it returns a
// live RenderWidgetHost (or corresponding RenderInputRouter) at each iteration
// (or NULL if there isn't any left).
class RenderWidgetHostIteratorImpl : public RenderWidgetHostIterator,
                                     public input::RenderInputRouterIterator {};

std::vector<DropData::Metadata> DropDataToMetaData(const DropData& drop_data) {}

std::u16string GetWrappedTooltipText(
    const std::u16string& tooltip_text,
    base::i18n::TextDirection text_direction_hint) {}

BrowserUIThreadScheduler::ScrollState GetScrollStateUpdateFromGestureEvent(
    blink::WebInputEvent::Type gesture_event) {}

// Retrieve an iterator over any RenderWidgetHosts that are immediately
// embedded within this one. This does not return hosts that are embedded
// indirectly (i.e. nested within embedded hosts).
std::unique_ptr<RenderWidgetHostIteratorImpl> GetEmbeddedRenderWidgetHosts(
    RenderWidgetHostViewBase* parent_view) {}

}  // namespace

///////////////////////////////////////////////////////////////////////////////
// RenderWidgetHostImpl

// static
std::unique_ptr<RenderWidgetHostImpl> RenderWidgetHostImpl::Create(
    base::PassKey<RenderWidgetHostFactory>,
    FrameTree* frame_tree,
    RenderWidgetHostDelegate* delegate,
    viz::FrameSinkId frame_sink_id,
    base::SafeRef<SiteInstanceGroup> site_instance_group,
    int32_t routing_id,
    bool hidden,
    bool renderer_initiated_creation,
    std::unique_ptr<FrameTokenMessageQueue> frame_token_message_queue) {}

// static
RenderWidgetHostImpl* RenderWidgetHostImpl::CreateSelfOwned(
    base::PassKey<RenderWidgetHostFactory>,
    FrameTree* frame_tree,
    RenderWidgetHostDelegate* delegate,
    base::SafeRef<SiteInstanceGroup> site_instance_group,
    int32_t routing_id,
    bool hidden,
    std::unique_ptr<FrameTokenMessageQueue> frame_token_message_queue) {}

RenderWidgetHostImpl::RenderWidgetHostImpl(
    FrameTree* frame_tree,
    bool self_owned,
    viz::FrameSinkId frame_sink_id,
    RenderWidgetHostDelegate* delegate,
    base::SafeRef<SiteInstanceGroup> site_instance_group,
    int32_t routing_id,
    bool hidden,
    bool renderer_initiated_creation,
    std::unique_ptr<FrameTokenMessageQueue> frame_token_message_queue)
    :{}

RenderWidgetHostImpl::~RenderWidgetHostImpl() {}

// static
RenderWidgetHost* RenderWidgetHost::FromID(int32_t process_id,
                                           int32_t routing_id) {}

// static
RenderWidgetHostImpl* RenderWidgetHostImpl::FromID(int32_t process_id,
                                                   int32_t routing_id) {}

// static
std::unique_ptr<RenderWidgetHostIterator>
RenderWidgetHost::GetRenderWidgetHosts() {}

// static
std::unique_ptr<RenderWidgetHostIterator>
RenderWidgetHostImpl::GetAllRenderWidgetHosts() {}

// static
RenderWidgetHostImpl* RenderWidgetHostImpl::From(RenderWidgetHost* rwh) {}

// static
viz::FrameSinkId RenderWidgetHostImpl::DefaultFrameSinkId(
    const SiteInstanceGroup& group,
    int routing_id) {}

void RenderWidgetHostImpl::SetView(RenderWidgetHostViewBase* view) {}

// static
const base::TimeDelta RenderWidgetHostImpl::kActivationNotificationExpireTime =;

RenderProcessHost* RenderWidgetHostImpl::GetProcess() {}

int RenderWidgetHostImpl::GetRoutingID() {}

RenderWidgetHostViewBase* RenderWidgetHostImpl::GetView() {}

VisibleTimeRequestTrigger&
RenderWidgetHostImpl::GetVisibleTimeRequestTrigger() {}

const viz::FrameSinkId& RenderWidgetHostImpl::GetFrameSinkId() {}

void RenderWidgetHostImpl::SendScreenRects() {}

void RenderWidgetHostImpl::SetFrameDepth(unsigned int depth) {}

void RenderWidgetHostImpl::SetIntersectsViewport(bool intersects) {}

void RenderWidgetHostImpl::UpdatePriority() {}

void RenderWidgetHostImpl::BindWidgetInterfaces(
    mojo::PendingAssociatedReceiver<blink::mojom::WidgetHost> widget_host,
    mojo::PendingAssociatedRemote<blink::mojom::Widget> widget) {}

void RenderWidgetHostImpl::BindPopupWidgetInterface(
    mojo::PendingAssociatedReceiver<blink::mojom::PopupWidgetHost>
        popup_widget_host) {}

void RenderWidgetHostImpl::BindFrameWidgetInterfaces(
    mojo::PendingAssociatedReceiver<blink::mojom::FrameWidgetHost>
        frame_widget_host,
    mojo::PendingAssociatedRemote<blink::mojom::FrameWidget> frame_widget) {}

void RenderWidgetHostImpl::RendererWidgetCreated(bool for_frame_widget) {}

void RenderWidgetHostImpl::Init() {}

bool RenderWidgetHostImpl::ShouldShowStaleContentOnEviction() {}

void RenderWidgetHostImpl::ShutdownAndDestroyWidget(bool also_delete) {}

void RenderWidgetHostImpl::SetIsLoading(bool is_loading) {}

void RenderWidgetHostImpl::WasHidden() {}

void RenderWidgetHostImpl::WasShown(
    blink::mojom::RecordContentToVisibleTimeRequestPtr
        record_tab_switch_time_request) {}

void RenderWidgetHostImpl::RequestSuccessfulPresentationTimeForNextFrame(
    blink::mojom::RecordContentToVisibleTimeRequestPtr visible_time_request) {}

void RenderWidgetHostImpl::CancelSuccessfulPresentationTimeRequest() {}

#if BUILDFLAG(IS_ANDROID)
void RenderWidgetHostImpl::SetImportance(ChildProcessImportance importance) {
  if (importance_ == importance) {
    return;
  }
  importance_ = importance;
  GetProcess()->UpdateClientPriority(this);
}

void RenderWidgetHostImpl::AddImeInputEventObserver(
    RenderWidgetHost::InputEventObserver* observer) {
  if (!ime_input_event_observers_.HasObserver(observer)) {
    ime_input_event_observers_.AddObserver(observer);
  }
}

void RenderWidgetHostImpl::RemoveImeInputEventObserver(
    RenderWidgetHost::InputEventObserver* observer) {
  ime_input_event_observers_.RemoveObserver(observer);
}
#endif

blink::VisualProperties RenderWidgetHostImpl::GetInitialVisualProperties() {}

blink::VisualProperties RenderWidgetHostImpl::GetVisualProperties() {}

void RenderWidgetHostImpl::ClearVisualProperties() {}

bool RenderWidgetHostImpl::UpdateVisualProperties(bool propagate) {}

bool RenderWidgetHostImpl::SynchronizeVisualProperties() {}

bool RenderWidgetHostImpl::SynchronizeVisualPropertiesIgnoringPendingAck() {}

bool RenderWidgetHostImpl::SynchronizeVisualProperties(
    bool scroll_focused_node_into_view,
    bool propagate) {}

void RenderWidgetHostImpl::GotFocus() {}

void RenderWidgetHostImpl::LostFocus() {}

void RenderWidgetHostImpl::Focus() {}

void RenderWidgetHostImpl::Blur() {}

void RenderWidgetHostImpl::FlushForTesting() {}

void RenderWidgetHostImpl::SetPageFocus(bool focused) {}

void RenderWidgetHostImpl::LostCapture() {}

void RenderWidgetHostImpl::SetActive(bool active) {}

void RenderWidgetHostImpl::LostPointerLock() {}

void RenderWidgetHostImpl::SendPointerLockLost() {}

void RenderWidgetHostImpl::ViewDestroyed() {}

bool RenderWidgetHostImpl::RequestRepaintForTesting() {}

void RenderWidgetHostImpl::RenderProcessBlockedStateChanged(bool blocked) {}

void RenderWidgetHostImpl::StartInputEventAckTimeout() {}

void RenderWidgetHostImpl::RestartInputEventAckTimeoutIfNecessary() {}

bool RenderWidgetHostImpl::IsCurrentlyUnresponsive() {}

void RenderWidgetHostImpl::StopInputEventAckTimeout() {}

void RenderWidgetHostImpl::DidNavigate() {}

void RenderWidgetHostImpl::StartNewContentRenderingTimeout() {}

void RenderWidgetHostImpl::SetNewContentRenderingTimeoutForTesting(
    base::TimeDelta timeout) {}

void RenderWidgetHostImpl::ForwardMouseEvent(const WebMouseEvent& mouse_event) {}

void RenderWidgetHostImpl::ForwardMouseEventWithLatencyInfo(
    const WebMouseEvent& mouse_event,
    const ui::LatencyInfo& latency) {}

void RenderWidgetHostImpl::ForwardWheelEvent(
    const WebMouseWheelEvent& wheel_event) {}

void RenderWidgetHostImpl::ForwardWheelEventWithLatencyInfo(
    const WebMouseWheelEvent& wheel_event,
    const ui::LatencyInfo& latency) {}

void RenderWidgetHostImpl::WaitForInputProcessed(
    SyntheticGestureParams::GestureType type,
    content::mojom::GestureSourceType source,
    base::OnceClosure callback) {}

void RenderWidgetHostImpl::WaitForInputProcessed(base::OnceClosure callback) {}

void RenderWidgetHostImpl::ForwardGestureEvent(
    const WebGestureEvent& gesture_event) {}

void RenderWidgetHostImpl::ForwardKeyboardEvent(
    const input::NativeWebKeyboardEvent& key_event) {}

void RenderWidgetHostImpl::ForwardKeyboardEventWithLatencyInfo(
    const input::NativeWebKeyboardEvent& key_event,
    const ui::LatencyInfo& latency) {}

void RenderWidgetHostImpl::ForwardKeyboardEventWithCommands(
    const input::NativeWebKeyboardEvent& key_event,
    const ui::LatencyInfo& latency,
    std::vector<blink::mojom::EditCommandPtr> commands,
    bool* update_event) {}

void RenderWidgetHostImpl::CreateSyntheticGestureControllerIfNecessary() {}

void RenderWidgetHostImpl::QueueSyntheticGesture(
    std::unique_ptr<SyntheticGesture> synthetic_gesture,
    base::OnceCallback<void(SyntheticGesture::Result)> on_complete) {}

void RenderWidgetHostImpl::QueueSyntheticGestureCompleteImmediately(
    std::unique_ptr<SyntheticGesture> synthetic_gesture) {}

void RenderWidgetHostImpl::EnsureReadyForSyntheticGestures(
    base::OnceClosure on_ready) {}

void RenderWidgetHostImpl::OnCursorVisibilityStateChanged(bool is_visible) {}

// static
void RenderWidgetHostImpl::DisableResizeAckCheckForTesting() {}

input::InputRouter* RenderWidgetHostImpl::input_router() {}

void RenderWidgetHostImpl::AddKeyPressEventCallback(
    const KeyPressEventCallback& callback) {}

void RenderWidgetHostImpl::RemoveKeyPressEventCallback(
    const KeyPressEventCallback& callback) {}

void RenderWidgetHostImpl::AddMouseEventCallback(
    const MouseEventCallback& callback) {}

void RenderWidgetHostImpl::RemoveMouseEventCallback(
    const MouseEventCallback& callback) {}

void RenderWidgetHostImpl::AddSuppressShowingImeCallback(
    const SuppressShowingImeCallback& callback) {}

void RenderWidgetHostImpl::RemoveSuppressShowingImeCallback(
    const SuppressShowingImeCallback& callback,
    bool trigger_ime) {}

void RenderWidgetHostImpl::AddInputEventObserver(
    RenderWidgetHost::InputEventObserver* observer) {}

void RenderWidgetHostImpl::RemoveInputEventObserver(
    RenderWidgetHost::InputEventObserver* observer) {}

void RenderWidgetHostImpl::AddObserver(RenderWidgetHostObserver* observer) {}

void RenderWidgetHostImpl::RemoveObserver(RenderWidgetHostObserver* observer) {}

display::ScreenInfo RenderWidgetHostImpl::GetScreenInfo() const {}

display::ScreenInfos RenderWidgetHostImpl::GetScreenInfos() const {}

float RenderWidgetHostImpl::GetDeviceScaleFactor() {}

std::optional<cc::TouchAction> RenderWidgetHostImpl::GetAllowedTouchAction() {}

void RenderWidgetHostImpl::WriteIntoTrace(perfetto::TracedValue context) {}

void RenderWidgetHostImpl::DragTargetDragEnter(
    const DropData& drop_data,
    const gfx::PointF& client_pt,
    const gfx::PointF& screen_pt,
    DragOperationsMask operations_allowed,
    int key_modifiers,
    DragOperationCallback callback) {}

void RenderWidgetHostImpl::DragTargetDragEnterWithMetaData(
    const std::vector<DropData::Metadata>& metadata,
    const gfx::PointF& client_pt,
    const gfx::PointF& screen_pt,
    DragOperationsMask operations_allowed,
    int key_modifiers,
    DragOperationCallback callback) {}

void RenderWidgetHostImpl::DragTargetDragOver(
    const gfx::PointF& client_point,
    const gfx::PointF& screen_point,
    DragOperationsMask operations_allowed,
    int key_modifiers,
    DragOperationCallback callback) {}

void RenderWidgetHostImpl::DragTargetDragLeave(
    const gfx::PointF& client_point,
    const gfx::PointF& screen_point) {}

void RenderWidgetHostImpl::DragTargetDrop(const DropData& drop_data,
                                          const gfx::PointF& client_point,
                                          const gfx::PointF& screen_point,
                                          int key_modifiers,
                                          base::OnceClosure callback) {}

void RenderWidgetHostImpl::DragSourceEndedAt(const gfx::PointF& client_point,
                                             const gfx::PointF& screen_point,
                                             ui::mojom::DragOperation operation,
                                             base::OnceClosure callback) {}

void RenderWidgetHostImpl::DragSourceSystemDragEnded() {}

void RenderWidgetHostImpl::FilterDropData(DropData* drop_data) {}

void RenderWidgetHostImpl::SetCursor(const ui::Cursor& cursor) {}

void RenderWidgetHostImpl::ShowContextMenuAtPoint(
    const gfx::Point& point,
    const ui::MenuSourceType source_type) {}

void RenderWidgetHostImpl::InsertVisualStateCallback(
    VisualStateCallback callback) {}

RenderProcessHostPriorityClient::Priority RenderWidgetHostImpl::GetPriority() {}

void RenderWidgetHostImpl::RenderProcessExited(
    RenderProcessHost* host,
    const ChildProcessTerminationInfo& info) {}

blink::mojom::WidgetInputHandler*
RenderWidgetHostImpl::GetWidgetInputHandler() {}

void RenderWidgetHostImpl::NotifyScreenInfoChanged() {}

void RenderWidgetHostImpl::GetSnapshotFromBrowser(
    GetSnapshotFromBrowserCallback callback,
    bool from_surface) {}

void RenderWidgetHostImpl::SelectionChanged(const std::u16string& text,
                                            uint32_t offset,
                                            const gfx::Range& range) {}

void RenderWidgetHostImpl::SelectionBoundsChanged(
    const gfx::Rect& anchor_rect,
    base::i18n::TextDirection anchor_dir,
    const gfx::Rect& focus_rect,
    base::i18n::TextDirection focus_dir,
    const gfx::Rect& bounding_box,
    bool is_anchor_first) {}

void RenderWidgetHostImpl::OnUpdateDragOperation(
    DragOperationCallback callback,
    ui::mojom::DragOperation current_op,
    bool document_is_handling_drag) {}

void RenderWidgetHostImpl::RendererExited() {}

void RenderWidgetHostImpl::ResetStateForCreatedRenderWidget(
    const blink::VisualProperties& initial_props) {}

void RenderWidgetHostImpl::UpdateTextDirection(
    base::i18n::TextDirection direction) {}

void RenderWidgetHostImpl::NotifyTextDirection() {}

void RenderWidgetHostImpl::ImeSetComposition(
    const std::u16string& text,
    const std::vector<ui::ImeTextSpan>& ime_text_spans,
    const gfx::Range& replacement_range,
    int selection_start,
    int selection_end) {}

void RenderWidgetHostImpl::ImeCommitText(
    const std::u16string& text,
    const std::vector<ui::ImeTextSpan>& ime_text_spans,
    const gfx::Range& replacement_range,
    int relative_cursor_pos) {}

void RenderWidgetHostImpl::ImeFinishComposingText(bool keep_selection) {}

void RenderWidgetHostImpl::ImeCancelComposition() {}

void RenderWidgetHostImpl::RejectPointerLockOrUnlockIfNecessary(
    blink::mojom::PointerLockResult reason) {}

bool RenderWidgetHostImpl::IsKeyboardLocked() const {}

bool RenderWidgetHostImpl::IsContentRenderingTimeoutRunning() const {}

void RenderWidgetHostImpl::OnMouseEventAck(
    const input::MouseEventWithLatencyInfo& mouse_event,
    blink::mojom::InputEventResultSource ack_source,
    blink::mojom::InputEventResultState ack_result) {}

bool RenderWidgetHostImpl::IsPointerLocked() const {}

void RenderWidgetHostImpl::SetVisualPropertiesFromParentFrame(
    float page_scale_factor,
    float compositing_scale_factor,
    bool is_pinch_gesture_active,
    const gfx::Size& visible_viewport_size,
    const gfx::Rect& compositor_viewport,
    std::vector<gfx::Rect> root_widget_viewport_segments) {}

void RenderWidgetHostImpl::SetAutoResize(bool enable,
                                         const gfx::Size& min_size,
                                         const gfx::Size& max_size) {}

void RenderWidgetHostImpl::Destroy(bool also_delete) {}

void RenderWidgetHostImpl::OnInputEventAckTimeout() {}

void RenderWidgetHostImpl::RendererIsUnresponsive(
    base::RepeatingClosure restart_hang_monitor_timeout) {}

void RenderWidgetHostImpl::RendererIsResponsive() {}

void RenderWidgetHostImpl::ClearDisplayedGraphics() {}

void RenderWidgetHostImpl::OnKeyboardEventAck(
    const input::NativeWebKeyboardEventWithLatencyInfo& event,
    blink::mojom::InputEventResultSource ack_source,
    blink::mojom::InputEventResultState ack_result) {}

void RenderWidgetHostImpl::RequestClosePopup() {}

void RenderWidgetHostImpl::SetPopupBounds(const gfx::Rect& bounds,
                                          SetPopupBoundsCallback callback) {}

input::RenderWidgetHostInputEventRouter*
RenderWidgetHostImpl::GetInputEventRouter() {}

input::RenderWidgetHostViewInput* RenderWidgetHostImpl::GetPointerLockView() {}

void RenderWidgetHostImpl::ForwardDelegatedInkPoint(
    gfx::DelegatedInkPoint& delegated_ink_point,
    bool& ended_delegated_ink_trail) {}

void RenderWidgetHostImpl::ResetDelegatedInkPointPrediction(
    bool& ended_delegated_ink_trail) {}

const cc::RenderFrameMetadata&
RenderWidgetHostImpl::GetLastRenderFrameMetadata() {}

void RenderWidgetHostImpl::NotifyObserversOfInputEvent(
    const WebInputEvent& event) {}

void RenderWidgetHostImpl::NotifyObserversOfInputEventAcks(
    blink::mojom::InputEventResultSource ack_source,
    blink::mojom::InputEventResultState ack_result,
    const WebInputEvent& event) {}

bool RenderWidgetHostImpl::PreHandleGestureEvent(
    const blink::WebGestureEvent& event) {}

std::unique_ptr<input::PeakGpuMemoryTracker>
RenderWidgetHostImpl::MakePeakGpuMemoryTracker(
    input::PeakGpuMemoryTracker::Usage usage) {}

bool RenderWidgetHostImpl::IsInitializedAndNotDead() {}

void RenderWidgetHostImpl::OnInputEventPreDispatch(
    const blink::WebInputEvent& event) {}

void RenderWidgetHostImpl::OnInvalidInputEventSource() {}

void RenderWidgetHostImpl::ShowPopup(const gfx::Rect& initial_screen_rect,
                                     const gfx::Rect& anchor_screen_rect,
                                     ShowPopupCallback callback) {}

void RenderWidgetHostImpl::UpdateTooltipUnderCursor(
    const std::u16string& tooltip_text,
    base::i18n::TextDirection text_direction_hint) {}

void RenderWidgetHostImpl::UpdateTooltipFromKeyboard(
    const std::u16string& tooltip_text,
    base::i18n::TextDirection text_direction_hint,
    const gfx::Rect& bounds) {}

void RenderWidgetHostImpl::ClearKeyboardTriggeredTooltip() {}

void RenderWidgetHostImpl::OnUpdateScreenRectsAck() {}

void RenderWidgetHostImpl::OnRenderFrameSubmission() {}

void RenderWidgetHostImpl::OnLocalSurfaceIdChanged(
    const cc::RenderFrameMetadata& metadata) {}

SiteInstanceGroup* RenderWidgetHostImpl::GetSiteInstanceGroup() {}

void RenderWidgetHostImpl::UpdateBrowserControlsState(
    cc::BrowserControlsState constraints,
    cc::BrowserControlsState current,
    bool animate,
    const std::optional<cc::BrowserControlsOffsetTagsInfo>& offset_tags_info) {}

void RenderWidgetHostImpl::StartDragging(
    blink::mojom::DragDataPtr drag_data,
    const url::Origin& source_origin,
    DragOperationsMask drag_operations_mask,
    const SkBitmap& bitmap,
    const gfx::Vector2d& cursor_offset_in_dip,
    const gfx::Rect& drag_obj_rect_in_dip,
    blink::mojom::DragEventSourceInfoPtr event_info) {}

// static
bool RenderWidgetHostImpl::DidVisualPropertiesSizeChange(
    const blink::VisualProperties& old_visual_properties,
    const blink::VisualProperties& new_visual_properties) {}

// static
bool RenderWidgetHostImpl::DoesVisualPropertiesNeedAck(
    const std::unique_ptr<blink::VisualProperties>& old_visual_properties,
    const blink::VisualProperties& new_visual_properties) {}

// static
bool RenderWidgetHostImpl::StoredVisualPropertiesNeedsUpdate(
    const std::unique_ptr<blink::VisualProperties>& old_visual_properties,
    const blink::VisualProperties& new_visual_properties) {}

void RenderWidgetHostImpl::AutoscrollStart(const gfx::PointF& position) {}

void RenderWidgetHostImpl::AutoscrollFling(const gfx::Vector2dF& velocity) {}

void RenderWidgetHostImpl::AutoscrollEnd() {}

bool RenderWidgetHostImpl::IsAutoscrollInProgress() {}

TouchEmulatorImpl* RenderWidgetHostImpl::GetTouchEmulator(
    bool create_if_necessary) {}

void RenderWidgetHostImpl::TextInputStateChanged(
    ui::mojom::TextInputStatePtr state) {}

void RenderWidgetHostImpl::OnImeCompositionRangeChanged(
    const gfx::Range& range,
    const std::optional<std::vector<gfx::Rect>>& character_bounds,
    const std::optional<std::vector<gfx::Rect>>& line_bounds) {}

void RenderWidgetHostImpl::OnImeCancelComposition() {}

RenderWidgetHostViewBase* RenderWidgetHostImpl::GetRenderWidgetHostViewBase() {}

input::StylusInterface* RenderWidgetHostImpl::GetStylusInterface() {}

void RenderWidgetHostImpl::OnStartStylusWriting() {}

void RenderWidgetHostImpl::OnEditElementFocusedForStylusWriting(
    const std::optional<gfx::Rect>& focused_edit_bounds,
    const std::optional<gfx::Rect>& caret_bounds) {}

void RenderWidgetHostImpl::PassImeRenderWidgetHost(
    mojo::PendingRemote<blink::mojom::ImeRenderWidgetHost> pending_remote) {}

void RenderWidgetHostImpl::SetMouseCapture(bool capture) {}

void RenderWidgetHostImpl::SetAutoscrollSelectionActiveInMainFrame(
    bool autoscroll_selection) {}

void RenderWidgetHostImpl::RequestMouseLock(
    bool from_user_gesture,
    bool unadjusted_movement,
    input::InputRouterImpl::RequestMouseLockCallback response) {}

void RenderWidgetHostImpl::RequestMouseLockChange(
    bool unadjusted_movement,
    PointerLockContext::RequestMouseLockChangeCallback response) {}

void RenderWidgetHostImpl::UnlockPointer() {}

void RenderWidgetHostImpl::OnInvalidFrameToken(uint32_t frame_token) {}

void RenderWidgetHostImpl::RequestKeyboardLock(
    std::optional<base::flat_set<ui::DomCode>> codes,
    base::OnceCallback<void(blink::mojom::KeyboardLockRequestResult)>
        keyboard_lock_request_callback) {}

void RenderWidgetHostImpl::CancelKeyboardLock() {}

base::flat_map<std::string, std::string>
RenderWidgetHostImpl::GetKeyboardLayoutMap() {}

void RenderWidgetHostImpl::RequestForceRedraw(int snapshot_id) {}

bool RenderWidgetHostImpl::KeyPressListenersHandleEvent(
    const input::NativeWebKeyboardEvent& event) {}

void RenderWidgetHostImpl::IncrementInFlightEventCount() {}

void RenderWidgetHostImpl::NotifyUISchedulerOfGestureEventUpdate(
    blink::WebInputEvent::Type gesture_event) {}

void RenderWidgetHostImpl::OnInputIgnored(const blink::WebInputEvent& event) {}

void RenderWidgetHostImpl::DecrementInFlightEventCount(
    blink::mojom::InputEventResultSource ack_source) {}

void RenderWidgetHostImpl::AddPendingUserActivation(
    const WebInputEvent& event) {}

void RenderWidgetHostImpl::ClearPendingUserActivation() {}

bool RenderWidgetHostImpl::RemovePendingUserActivationIfAvailable() {}

const mojo::AssociatedRemote<blink::mojom::FrameWidget>&
RenderWidgetHostImpl::GetAssociatedFrameWidget() {}

blink::mojom::FrameWidgetInputHandler*
RenderWidgetHostImpl::GetFrameWidgetInputHandler() {}

std::optional<blink::VisualProperties>
RenderWidgetHostImpl::LastComputedVisualProperties() const {}

mojom::CreateFrameWidgetParamsPtr
RenderWidgetHostImpl::BindAndGenerateCreateFrameWidgetParams() {}

mojom::CreateFrameWidgetParamsPtr
RenderWidgetHostImpl::BindAndGenerateCreateFrameWidgetParamsForNewWindow() {}

void RenderWidgetHostImpl::OnWheelEventAck(
    const input::MouseWheelEventWithLatencyInfo& wheel_event,
    blink::mojom::InputEventResultSource ack_source,
    blink::mojom::InputEventResultState ack_result) {}

bool RenderWidgetHostImpl::IsIgnoringWebInputEvents(
    const blink::WebInputEvent& event) const {}

bool RenderWidgetHostImpl::IsIgnoringInputEvents() const {}

bool RenderWidgetHostImpl::GotResponseToPointerLockRequest(
    blink::mojom::PointerLockResult response) {}

void RenderWidgetHostImpl::GotResponseToKeyboardLockRequest(bool allowed) {}

void RenderWidgetHostImpl::GotResponseToForceRedraw(int snapshot_id) {}

void RenderWidgetHostImpl::DetachDelegate() {}

void RenderWidgetHostImpl::WindowSnapshotReachedScreen(int snapshot_id) {}

void RenderWidgetHostImpl::OnSnapshotFromSurfaceReceived(
    int snapshot_id,
    int retry_count,
    const SkBitmap& bitmap) {}

void RenderWidgetHostImpl::OnSnapshotReceived(int snapshot_id,
                                              gfx::Image image) {}

ui::BrowserAccessibilityManager*
RenderWidgetHostImpl::GetRootBrowserAccessibilityManager() {}

ui::BrowserAccessibilityManager*
RenderWidgetHostImpl::GetOrCreateRootBrowserAccessibilityManager() {}

void RenderWidgetHostImpl::GrantFileAccessFromDropData(DropData* drop_data) {}

void RenderWidgetHostImpl::RequestCompositionUpdates(bool immediate_request,
                                                     bool monitor_updates) {}

void RenderWidgetHostImpl::CreateFrameSink(
    mojo::PendingReceiver<viz::mojom::CompositorFrameSink>
        compositor_frame_sink_receiver,
    mojo::PendingRemote<viz::mojom::CompositorFrameSinkClient>
        compositor_frame_sink_client) {}

void RenderWidgetHostImpl::MaybeDispatchBufferedFrameSinkRequest() {}

void RenderWidgetHostImpl::RegisterRenderFrameMetadataObserver(
    mojo::PendingReceiver<cc::mojom::RenderFrameMetadataObserverClient>
        render_frame_metadata_observer_client_receiver,
    mojo::PendingRemote<cc::mojom::RenderFrameMetadataObserver>
        render_frame_metadata_observer) {}

bool RenderWidgetHostImpl::HasGestureStopped() {}

bool RenderWidgetHostImpl::IsHidden() const {}

void RenderWidgetHostImpl::DidProcessFrame(uint32_t frame_token,
                                           base::TimeTicks activation_time) {}

#if BUILDFLAG(IS_MAC)
device::mojom::WakeLock* RenderWidgetHostImpl::GetWakeLock() {
  // Here is a lazy binding, and will not reconnect after connection error.
  if (!wake_lock_) {
    mojo::Remote<device::mojom::WakeLockProvider> wake_lock_provider;
    GetDeviceService().BindWakeLockProvider(
        wake_lock_provider.BindNewPipeAndPassReceiver());
    wake_lock_provider->GetWakeLockWithoutContext(
        device::mojom::WakeLockType::kPreventDisplaySleep,
        device::mojom::WakeLockReason::kOther, "GetSnapshot",
        wake_lock_.BindNewPipeAndPassReceiver());
  }
  return wake_lock_.get();
}
#endif

std::unique_ptr<input::FlingSchedulerBase>
RenderWidgetHostImpl::MakeFlingScheduler() {}

input::RenderInputRouter* RenderWidgetHostImpl::GetRenderInputRouter() {}

void RenderWidgetHostImpl::SetupRenderInputRouter() {}

void RenderWidgetHostImpl::SetupInputRouter() {}

void RenderWidgetHostImpl::SetForceEnableZoom(bool enabled) {}

void RenderWidgetHostImpl::ProgressFlingIfNeeded(base::TimeTicks current_time) {}

void RenderWidgetHostImpl::ForceFirstFrameAfterNavigationTimeout() {}

void RenderWidgetHostImpl::StopFling() {}

void RenderWidgetHostImpl::SetScreenOrientationForTesting(
    uint16_t angle,
    display::mojom::ScreenOrientation type) {}

void RenderWidgetHostImpl::LockKeyboard() {}

void RenderWidgetHostImpl::UnlockKeyboard() {}

void RenderWidgetHostImpl::OnRenderFrameMetadataChangedBeforeActivation(
    const cc::RenderFrameMetadata& metadata) {}

void RenderWidgetHostImpl::OnRenderFrameMetadataChangedAfterActivation(
    base::TimeTicks activation_time) {}

std::vector<viz::SurfaceId>
RenderWidgetHostImpl::CollectSurfaceIdsForEviction() {}

std::unique_ptr<input::RenderInputRouterIterator>
RenderWidgetHostImpl::GetEmbeddedRenderInputRouters() {}

namespace {

bool TransformPointAndRectToRootView(RenderWidgetHostViewBase* view,
                                     RenderWidgetHostViewBase* root_view,
                                     gfx::Point* transformed_point,
                                     gfx::Rect* transformed_rect) {}

}  // namespace

void RenderWidgetHostImpl::AnimateDoubleTapZoomInMainFrame(
    const gfx::Point& point,
    const gfx::Rect& rect_to_zoom) {}

void RenderWidgetHostImpl::ZoomToFindInPageRectInMainFrame(
    const gfx::Rect& rect_to_zoom) {}

void RenderWidgetHostImpl::SetHasTouchEventConsumers(
    blink::mojom::TouchEventConsumersPtr consumers) {}

void RenderWidgetHostImpl::IntrinsicSizingInfoChanged(
    blink::mojom::IntrinsicSizingInfoPtr sizing_info) {}

// This method was copied from RenderWidget::ConvertWindowToViewport() when
// porting drag-and-drop calls to Mojo, so that RenderWidgetHostImpl bypasses
// RenderWidget to talk the the WebFrameWidget and needs to perform the scale
// operation itself.
gfx::PointF RenderWidgetHostImpl::ConvertWindowPointToViewport(
    const gfx::PointF& window_point) {}

void RenderWidgetHostImpl::SetViewIsFrameSinkIdOwner(bool is_owner) {}

RenderWidgetHostImpl::MainFramePropagationProperties::
    MainFramePropagationProperties() = default;

RenderWidgetHostImpl::MainFramePropagationProperties::
    ~MainFramePropagationProperties() = default;

RenderWidgetHostImpl::PendingShowParams::PendingShowParams(
    bool is_evicted,
    blink::mojom::RecordContentToVisibleTimeRequestPtr visible_time_request)
    :{}

RenderWidgetHostImpl::PendingShowParams::~PendingShowParams() = default;

void RenderWidgetHostImpl::DisableCompositorMetricRecording() {}

void RenderWidgetHostImpl::ForceRedrawForTesting() {}

RenderWidgetHostImpl::CompositorMetricRecorder::CompositorMetricRecorder(
    RenderWidgetHostImpl* owner)
    :{}

void RenderWidgetHostImpl::CompositorMetricRecorder::
    DidStartNavigationCommit() {}

void RenderWidgetHostImpl::CompositorMetricRecorder::DidSwap() {}

void RenderWidgetHostImpl::CompositorMetricRecorder::DidRequestFrameSink() {}

void RenderWidgetHostImpl::CompositorMetricRecorder::TryToRecordMetrics() {}

}  // namespace content