#include "third_party/blink/renderer/core/loader/frame_loader.h"
#include <memory>
#include <utility>
#include "base/auto_reset.h"
#include "base/trace_event/typed_macros.h"
#include "base/unguessable_token.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/metrics/public/cpp/metrics_utils.h"
#include "services/metrics/public/cpp/ukm_builders.h"
#include "services/metrics/public/cpp/ukm_recorder.h"
#include "services/network/public/cpp/features.h"
#include "services/network/public/cpp/web_sandbox_flags.h"
#include "services/network/public/mojom/web_sandbox_flags.mojom-blink.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "third_party/blink/public/common/user_agent/user_agent_metadata.h"
#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
#include "third_party/blink/public/mojom/frame/frame.mojom-blink.h"
#include "third_party/blink/public/mojom/loader/request_context_frame_type.mojom-blink.h"
#include "third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h"
#include "third_party/blink/public/platform/task_type.h"
#include "third_party/blink/public/platform/web_content_settings_client.h"
#include "third_party/blink/public/platform/web_url_request.h"
#include "third_party/blink/public/web/web_frame_load_type.h"
#include "third_party/blink/public/web/web_history_item.h"
#include "third_party/blink/public/web/web_navigation_params.h"
#include "third_party/blink/public/web/web_navigation_type.h"
#include "third_party/blink/renderer/bindings/core/v8/script_controller.h"
#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h"
#include "third_party/blink/renderer/core/dom/document_init.h"
#include "third_party/blink/renderer/core/dom/element.h"
#include "third_party/blink/renderer/core/dom/ignore_opens_during_unload_count_incrementer.h"
#include "third_party/blink/renderer/core/events/page_transition_event.h"
#include "third_party/blink/renderer/core/exported/web_plugin_container_impl.h"
#include "third_party/blink/renderer/core/fragment_directive/text_fragment_anchor.h"
#include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
#include "third_party/blink/renderer/core/frame/csp/csp_source.h"
#include "third_party/blink/renderer/core/frame/frame_console.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/local_frame_client.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/frame/policy_container.h"
#include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/core/frame/visual_viewport.h"
#include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
#include "third_party/blink/renderer/core/html/forms/html_form_element.h"
#include "third_party/blink/renderer/core/html/html_frame_owner_element.h"
#include "third_party/blink/renderer/core/html_names.h"
#include "third_party/blink/renderer/core/inspector/console_message.h"
#include "third_party/blink/renderer/core/inspector/identifiers_factory.h"
#include "third_party/blink/renderer/core/loader/document_load_timing.h"
#include "third_party/blink/renderer/core/loader/document_loader.h"
#include "third_party/blink/renderer/core/loader/form_submission.h"
#include "third_party/blink/renderer/core/loader/frame_load_request.h"
#include "third_party/blink/renderer/core/loader/frame_loader_types.h"
#include "third_party/blink/renderer/core/loader/idleness_detector.h"
#include "third_party/blink/renderer/core/loader/idna_util.h"
#include "third_party/blink/renderer/core/loader/mixed_content_checker.h"
#include "third_party/blink/renderer/core/loader/navigation_policy.h"
#include "third_party/blink/renderer/core/loader/progress_tracker.h"
#include "third_party/blink/renderer/core/navigation_api/navigation_api.h"
#include "third_party/blink/renderer/core/page/chrome_client.h"
#include "third_party/blink/renderer/core/page/focus_controller.h"
#include "third_party/blink/renderer/core/page/frame_tree.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/core/page/plugin_data.h"
#include "third_party/blink/renderer/core/page/plugin_script_forbidden_scope.h"
#include "third_party/blink/renderer/core/page/scrolling/fragment_anchor.h"
#include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h"
#include "third_party/blink/renderer/core/page/viewport_description.h"
#include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h"
#include "third_party/blink/renderer/core/probe/core_probes.h"
#include "third_party/blink/renderer/core/scroll/scroll_animator_base.h"
#include "third_party/blink/renderer/core/svg/graphics/svg_image.h"
#include "third_party/blink/renderer/core/xml/parser/xml_document_parser.h"
#include "third_party/blink/renderer/platform/bindings/dom_wrapper_world.h"
#include "third_party/blink/renderer/platform/bindings/script_forbidden_scope.h"
#include "third_party/blink/renderer/platform/bindings/v8_dom_activity_logger.h"
#include "third_party/blink/renderer/platform/exported/wrapped_resource_request.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/instrumentation/instance_counters.h"
#include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
#include "third_party/blink/renderer/platform/loader/fetch/memory_cache.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher_properties.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_request.h"
#include "third_party/blink/renderer/platform/mhtml/archive_resource.h"
#include "third_party/blink/renderer/platform/mhtml/mhtml_archive.h"
#include "third_party/blink/renderer/platform/network/http_parsers.h"
#include "third_party/blink/renderer/platform/network/mime/mime_type_registry.h"
#include "third_party/blink/renderer/platform/network/network_utils.h"
#include "third_party/blink/renderer/platform/runtime_feature_state/runtime_feature_state_override_context.h"
#include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h"
#include "third_party/blink/renderer/platform/weborigin/security_origin.h"
#include "third_party/blink/renderer/platform/weborigin/security_policy.h"
#include "third_party/blink/renderer/platform/wtf/text/string_utf8_adaptor.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "url/url_features.h"
namespace blink {
namespace {
void LogJavaScriptUrlHistogram(LocalDOMWindow* origin_window, String script) { … }
}
bool IsBackForwardLoadType(WebFrameLoadType type) { … }
bool IsBackForwardOrRestore(WebFrameLoadType type) { … }
bool IsRestoreLoadType(WebFrameLoadType type) { … }
bool IsReloadLoadType(WebFrameLoadType type) { … }
bool FrameLoader::NeedsHistoryItemRestore(WebFrameLoadType type) { … }
ResourceRequest FrameLoader::ResourceRequestForReload(
WebFrameLoadType frame_load_type,
ClientRedirectPolicy client_redirect_policy) { … }
FrameLoader::FrameLoader(LocalFrame* frame)
: … { … }
FrameLoader::~FrameLoader() { … }
void FrameLoader::Trace(Visitor* visitor) const { … }
void FrameLoader::Init(const DocumentToken& document_token,
std::unique_ptr<PolicyContainer> policy_container,
const StorageKey& storage_key,
ukm::SourceId document_ukm_source_id,
const KURL& creator_base_url) { … }
LocalFrameClient* FrameLoader::Client() const { … }
ClientRedirectPolicy CalculateClientRedirectPolicy(
ClientNavigationReason client_navigation_reason,
WebFrameLoadType frame_load_type,
bool is_on_initial_empty_document) { … }
void FrameLoader::SetDefersLoading(LoaderFreezeMode mode) { … }
void FrameLoader::SaveScrollAnchor() { … }
void FrameLoader::SaveScrollState() { … }
void FrameLoader::DispatchUnloadEventAndFillOldDocumentInfoIfNeeded(
bool will_commit_new_document_in_this_frame) { … }
void FrameLoader::DidExplicitOpen() { … }
void FrameLoader::FinishedParsing() { … }
void FrameLoader::DidFinishNavigation(NavigationFinishState state) { … }
bool FrameLoader::AllowPlugins() { … }
void FrameLoader::DetachDocumentLoader(Member<DocumentLoader>& loader,
bool flush_microtask_queue) { … }
void FrameLoader::ProcessScrollForSameDocumentNavigation(
const KURL& url,
WebFrameLoadType frame_load_type,
std::optional<HistoryItem::ViewState> view_state,
mojom::blink::ScrollRestorationType scroll_restoration_type) { … }
bool FrameLoader::AllowRequestForThisFrame(const FrameLoadRequest& request) { … }
static WebNavigationType DetermineNavigationType(
WebFrameLoadType frame_load_type,
bool is_form_submission,
bool have_event) { … }
static mojom::blink::RequestContextType
DetermineRequestContextFromNavigationType(
const WebNavigationType navigation_type) { … }
static network::mojom::RequestDestination
DetermineRequestDestinationFromNavigationType(
const WebNavigationType navigation_type) { … }
void FrameLoader::StartNavigation(FrameLoadRequest& request,
WebFrameLoadType frame_load_type) { … }
static void FillStaticResponseIfNeeded(WebNavigationParams* params,
LocalFrame* frame) { … }
static void AssertCanNavigate(WebNavigationParams* params, LocalFrame* frame) { … }
void FrameLoader::CommitNavigation(
std::unique_ptr<WebNavigationParams> navigation_params,
std::unique_ptr<WebDocumentLoader::ExtraData> extra_data,
CommitReason commit_reason) { … }
bool FrameLoader::WillStartNavigation(const WebNavigationInfo& info) { … }
void FrameLoader::StopAllLoaders(bool abort_client) { … }
void FrameLoader::DidAccessInitialDocument() { … }
bool FrameLoader::DetachDocument() { … }
void FrameLoader::CommitDocumentLoader(DocumentLoader* document_loader,
HistoryItem* previous_history_item,
CommitReason commit_reason) { … }
void FrameLoader::RestoreScrollPositionAndViewState() { … }
void FrameLoader::RestoreScrollPositionAndViewState(
WebFrameLoadType load_type,
const HistoryItem::ViewState& view_state,
mojom::blink::ScrollRestorationType scroll_restoration_type) { … }
String FrameLoader::ApplyUserAgentOverride(const String& user_agent) const { … }
String FrameLoader::UserAgent() const { … }
std::optional<blink::UserAgentMetadata> FrameLoader::UserAgentMetadata() const { … }
void FrameLoader::Detach() { … }
bool FrameLoader::ShouldPerformFragmentNavigation(bool is_form_submission,
const String& http_method,
WebFrameLoadType load_type,
const KURL& url) { … }
void FrameLoader::ProcessFragment(const KURL& url,
WebFrameLoadType frame_load_type,
LoadStartType load_start_type) { … }
bool FrameLoader::ShouldClose(bool is_reload) { … }
void FrameLoader::DidDropNavigation() { … }
bool FrameLoader::CancelProvisionalLoaderForNewNavigation() { … }
void FrameLoader::ClearClientNavigation() { … }
void FrameLoader::CancelClientNavigation(CancelNavigationReason reason) { … }
void FrameLoader::DispatchDocumentElementAvailable() { … }
void FrameLoader::RunScriptsAtDocumentElementAvailable() { … }
void FrameLoader::DispatchDidClearDocumentOfWindowObject() { … }
void FrameLoader::DispatchDidClearWindowObjectInMainWorld() { … }
network::mojom::blink::WebSandboxFlags
FrameLoader::PendingEffectiveSandboxFlags() const { … }
void FrameLoader::ModifyRequestForCSP(
ResourceRequest& resource_request,
const FetchClientSettingsObject* fetch_client_settings_object,
LocalDOMWindow* window_for_logging,
mojom::RequestContextFrameType frame_type) const { … }
void FrameLoader::WriteIntoTrace(perfetto::TracedValue context) const { … }
inline void FrameLoader::TakeObjectSnapshot() const { … }
mojo::PendingRemote<mojom::blink::CodeCacheHost>
FrameLoader::CreateWorkerCodeCacheHost() { … }
}