#include "content/browser/renderer_host/render_view_host_impl.h"
#include <set>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#include "base/command_line.h"
#include "base/debug/dump_without_crashing.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/hash/hash.h"
#include "base/i18n/rtl.h"
#include "base/json/json_reader.h"
#include "base/memory/raw_ptr.h"
#include "base/metrics/field_trial.h"
#include "base/metrics/histogram_macros.h"
#include "base/metrics/user_metrics.h"
#include "base/not_fatal_until.h"
#include "base/ranges/algorithm.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/supports_user_data.h"
#include "base/system/sys_info.h"
#include "base/time/time.h"
#include "base/trace_event/trace_event.h"
#include "base/trace_event/typed_macros.h"
#include "base/values.h"
#include "build/build_config.h"
#include "cc/base/switches.h"
#include "components/input/native_web_keyboard_event.h"
#include "components/input/timeout_monitor.h"
#include "components/viz/common/features.h"
#include "content/browser/bad_message.h"
#include "content/browser/child_process_security_policy_impl.h"
#include "content/browser/dom_storage/session_storage_namespace_impl.h"
#include "content/browser/fenced_frame/fenced_frame.h"
#include "content/browser/gpu/compositor_util.h"
#include "content/browser/gpu/gpu_data_manager_impl.h"
#include "content/browser/gpu/gpu_process_host.h"
#include "content/browser/preloading/prerender/prerender_host.h"
#include "content/browser/renderer_host/agent_scheduling_group_host.h"
#include "content/browser/renderer_host/frame_tree.h"
#include "content/browser/renderer_host/frame_tree_node.h"
#include "content/browser/renderer_host/navigation_controller_impl.h"
#include "content/browser/renderer_host/page_delegate.h"
#include "content/browser/renderer_host/render_frame_host_delegate.h"
#include "content/browser/renderer_host/render_frame_proxy_host.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_widget_host_delegate.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
#include "content/browser/scoped_active_url.h"
#include "content/common/agent_scheduling_group.mojom.h"
#include "content/common/content_switches_internal.h"
#include "content/common/features.h"
#include "content/common/render_message_filter.mojom.h"
#include "content/common/renderer.mojom.h"
#include "content/public/browser/browser_accessibility_state.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/context_menu_params.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_widget_host_iterator.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/common/bindings_policy.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_constants.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/result_codes.h"
#include "content/public/common/url_constants.h"
#include "content/public/common/url_utils.h"
#include "media/base/media_switches.h"
#include "mojo/public/cpp/bindings/callback_helpers.h"
#include "net/base/url_util.h"
#include "services/network/public/cpp/features.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/page/browsing_context_group_info.h"
#include "third_party/blink/public/common/web_preferences/web_preferences.h"
#include "third_party/blink/public/mojom/page/prerender_page_param.mojom.h"
#include "third_party/perfetto/include/perfetto/tracing/traced_value.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/base/clipboard/clipboard.h"
#include "ui/base/device_form_factor.h"
#include "ui/base/pointer/pointer_device.h"
#include "ui/base/ui_base_features.h"
#include "ui/base/ui_base_switches.h"
#include "ui/display/display.h"
#include "ui/display/display_switches.h"
#include "ui/display/screen.h"
#include "ui/events/blink/blink_features.h"
#include "ui/gfx/animation/animation.h"
#include "ui/gfx/color_space.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gl/gpu_switching_manager.h"
#include "ui/native_theme/native_theme_features.h"
#include "url/url_constants.h"
#if BUILDFLAG(IS_WIN)
#include "ui/display/win/screen_win.h"
#include "ui/gfx/geometry/dip_util.h"
#include "ui/gfx/system_fonts_win.h"
#endif
#if !BUILDFLAG(IS_ANDROID)
#include "content/browser/host_zoom_map_impl.h"
#endif
WebInputEvent;
namespace content {
namespace {
ChromeTrackEvent;
RenderViewHostID;
RoutingIDViewMap;
base::LazyInstance<RoutingIDViewMap>::Leaky g_routing_id_view_map = …;
#if BUILDFLAG(IS_WIN)
void GetFontInfo(gfx::win::SystemFont system_font,
std::u16string* name,
int32_t* size) {
const gfx::Font& font = gfx::win::GetSystemFont(system_font);
*name = base::UTF8ToUTF16(font.GetFontName());
*size = font.GetFontSize();
}
#endif
class PerProcessRenderViewHostSet : public base::SupportsUserData::Data { … };
const int PerProcessRenderViewHostSet::kUserDataKey;
void CollectSurfaceIdsForEvictionForFrameTreeNodeRange(
FrameTree::NodeRange& node_range,
std::vector<viz::SurfaceId>& out_ids) { … }
}
RenderViewHost* RenderViewHost::FromID(int render_process_id,
int render_view_id) { … }
RenderViewHost* RenderViewHost::From(RenderWidgetHost* rwh) { … }
RenderViewHostImpl* RenderViewHostImpl::FromID(int process_id, int routing_id) { … }
RenderViewHostImpl* RenderViewHostImpl::From(RenderWidgetHost* rwh) { … }
void RenderViewHostImpl::GetPlatformSpecificPrefs(
blink::RendererPreferences* prefs) { … }
bool RenderViewHostImpl::HasNonBackForwardCachedInstancesForProcess(
RenderProcessHost* process) { … }
RenderViewHostImpl::RenderViewHostImpl(
FrameTree* frame_tree,
SiteInstanceGroup* group,
const StoragePartitionConfig& storage_partition_config,
std::unique_ptr<RenderWidgetHostImpl> widget,
RenderViewHostDelegate* delegate,
int32_t routing_id,
int32_t main_frame_routing_id,
bool has_initialized_audio_host,
scoped_refptr<BrowsingContextState> main_browsing_context_state,
CreateRenderViewHostCase create_case)
: … { … }
RenderViewHostImpl::~RenderViewHostImpl() { … }
RenderViewHostDelegate* RenderViewHostImpl::GetDelegate() { … }
base::WeakPtr<RenderViewHostImpl> RenderViewHostImpl::GetWeakPtr() { … }
void RenderViewHostImpl::DisallowReuse() { … }
bool RenderViewHostImpl::CreateRenderView(
const std::optional<blink::FrameToken>& opener_frame_token,
int proxy_route_id,
bool window_was_opened_by_another_window) { … }
void RenderViewHostImpl::SetMainFrameRoutingId(int routing_id) { … }
void RenderViewHostImpl::SetFrameTree(FrameTree& frame_tree) { … }
void RenderViewHostImpl::EnterBackForwardCache() { … }
void RenderViewHostImpl::PrepareToLeaveBackForwardCache(
base::OnceClosure done_cb) { … }
void RenderViewHostImpl::LeaveBackForwardCache(
blink::mojom::PageRestoreParamsPtr page_restore_params) { … }
void RenderViewHostImpl::ActivatePrerenderedPage(
blink::mojom::PrerenderPageActivationParamsPtr
prerender_page_activation_params,
base::OnceClosure callback) { … }
void RenderViewHostImpl::SetFrameTreeVisibility(
blink::mojom::PageVisibilityState visibility) { … }
void RenderViewHostImpl::SetIsFrozen(bool frozen) { … }
void RenderViewHostImpl::OnBackForwardCacheTimeout() { … }
void RenderViewHostImpl::MaybeEvictFromBackForwardCache() { … }
void RenderViewHostImpl::EnforceBackForwardCacheSizeLimit() { … }
bool RenderViewHostImpl::DidReceiveBackForwardCacheAck() { … }
bool RenderViewHostImpl::IsRenderViewLive() const { … }
void RenderViewHostImpl::SetBackgroundOpaque(bool opaque) { … }
bool RenderViewHostImpl::IsMainFrameActive() { … }
bool RenderViewHostImpl::IsNeverComposited() { … }
blink::web_pref::WebPreferences
RenderViewHostImpl::GetWebkitPreferencesForWidget() { … }
void RenderViewHostImpl::RenderViewCreated(
RenderFrameHostImpl* local_main_frame) { … }
RenderFrameHostImpl* RenderViewHostImpl::GetMainRenderFrameHost() { … }
void RenderViewHostImpl::ZoomToFindInPageRect(const gfx::Rect& rect_to_zoom) { … }
void RenderViewHostImpl::RenderProcessExited(
RenderProcessHost* host,
const ChildProcessTerminationInfo& info) { … }
RenderWidgetHostImpl* RenderViewHostImpl::GetWidget() const { … }
AgentSchedulingGroupHost& RenderViewHostImpl::GetAgentSchedulingGroup() const { … }
RenderProcessHost* RenderViewHostImpl::GetProcess() const { … }
int RenderViewHostImpl::GetRoutingID() const { … }
void RenderViewHostImpl::RenderWidgetGotFocus() { … }
void RenderViewHostImpl::RenderWidgetLostFocus() { … }
void RenderViewHostImpl::SetInitialFocus(bool reverse) { … }
void RenderViewHostImpl::AnimateDoubleTapZoom(const gfx::Point& point,
const gfx::Rect& rect) { … }
bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) { … }
std::string RenderViewHostImpl::ToDebugString() { … }
void RenderViewHostImpl::OnTakeFocus(bool reverse) { … }
void RenderViewHostImpl::OnFocus() { … }
void RenderViewHostImpl::BindPageBroadcast(
mojo::PendingAssociatedRemote<blink::mojom::PageBroadcast> page_broadcast) { … }
const mojo::AssociatedRemote<blink::mojom::PageBroadcast>&
RenderViewHostImpl::GetAssociatedPageBroadcast() { … }
void RenderViewHostImpl::RenderWidgetDidForwardMouseEvent(
const blink::WebMouseEvent& mouse_event) { … }
bool RenderViewHostImpl::MayRenderWidgetForwardKeyboardEvent(
const input::NativeWebKeyboardEvent& key_event) { … }
bool RenderViewHostImpl::ShouldContributePriorityToProcess() { … }
void RenderViewHostImpl::SendWebPreferencesToRenderer() { … }
void RenderViewHostImpl::SendRendererPreferencesToRenderer(
const blink::RendererPreferences& preferences) { … }
void RenderViewHostImpl::OnHardwareConfigurationChanged() { … }
void RenderViewHostImpl::EnablePreferredSizeMode() { … }
void RenderViewHostImpl::PostRenderViewReady() { … }
void RenderViewHostImpl::OnGpuSwitched(gl::GpuPreference active_gpu_heuristic) { … }
void RenderViewHostImpl::RenderViewReady() { … }
std::vector<viz::SurfaceId> RenderViewHostImpl::CollectSurfaceIdsForEviction() { … }
bool RenderViewHostImpl::IsTestRenderViewHost() const { … }
void RenderViewHostImpl::SetWillEnterBackForwardCacheCallbackForTesting(
const WillEnterBackForwardCacheCallbackForTesting& callback) { … }
void RenderViewHostImpl::SetWillSendRendererPreferencesCallbackForTesting(
const WillSendRendererPreferencesCallbackForTesting& callback) { … }
void RenderViewHostImpl::SetWillSendWebPreferencesCallbackForTesting(
const WillSendWebPreferencesCallbackForTesting& callback) { … }
void RenderViewHostImpl::WriteIntoTrace(
perfetto::TracedProto<TraceProto> proto) const { … }
base::SafeRef<RenderViewHostImpl> RenderViewHostImpl::GetSafeRef() { … }
mojom::ViewWidgetType RenderViewHostImpl::ViewWidgetType() { … }
}