#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 = …;
RenderWidgetHostID;
RoutingIDWidgetMap;
base::LazyInstance<RoutingIDWidgetMap>::DestructorAtExit
g_routing_id_widget_map = …;
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) { … }
std::unique_ptr<RenderWidgetHostIteratorImpl> GetEmbeddedRenderWidgetHosts(
RenderWidgetHostViewBase* parent_view) { … }
}
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) { … }
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() { … }
RenderWidgetHost* RenderWidgetHost::FromID(int32_t process_id,
int32_t routing_id) { … }
RenderWidgetHostImpl* RenderWidgetHostImpl::FromID(int32_t process_id,
int32_t routing_id) { … }
std::unique_ptr<RenderWidgetHostIterator>
RenderWidgetHost::GetRenderWidgetHosts() { … }
std::unique_ptr<RenderWidgetHostIterator>
RenderWidgetHostImpl::GetAllRenderWidgetHosts() { … }
RenderWidgetHostImpl* RenderWidgetHostImpl::From(RenderWidgetHost* rwh) { … }
viz::FrameSinkId RenderWidgetHostImpl::DefaultFrameSinkId(
const SiteInstanceGroup& group,
int routing_id) { … }
void RenderWidgetHostImpl::SetView(RenderWidgetHostViewBase* view) { … }
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) { … }
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) { … }
bool RenderWidgetHostImpl::DidVisualPropertiesSizeChange(
const blink::VisualProperties& old_visual_properties,
const blink::VisualProperties& new_visual_properties) { … }
bool RenderWidgetHostImpl::DoesVisualPropertiesNeedAck(
const std::unique_ptr<blink::VisualProperties>& old_visual_properties,
const blink::VisualProperties& new_visual_properties) { … }
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() {
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) { … }
}
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) { … }
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() { … }
}