void FrameFetchContext::dispatchDidReceiveResponse(unsigned long identifier, const ResourceResponse& response, WebURLRequest::FrameType frameType, WebURLRequest::RequestContext requestContext, Resource* resource) { LinkLoader::CanLoadResources resourceLoadingPolicy = LinkLoader::LoadResourcesAndPreconnect; MixedContentChecker::checkMixedPrivatePublic(frame(), response.remoteIPAddress()); if (m_documentLoader == frame()->loader().provisionalDocumentLoader()) { ResourceFetcher* fetcher = nullptr; if (frame()->document()) fetcher = frame()->document()->fetcher(); m_documentLoader->clientHintsPreferences().updateFromAcceptClientHintsHeader(response.httpHeaderField(HTTPNames::Accept_CH), fetcher); // When response is received with a provisional docloader, the resource haven't committed yet, and we cannot load resources, only preconnect. resourceLoadingPolicy = LinkLoader::DoNotLoadResources; } LinkLoader::loadLinksFromHeader(response.httpHeaderField(HTTPNames::Link), response.url(), frame()->document(), NetworkHintsInterfaceImpl(), resourceLoadingPolicy, nullptr); if (response.hasMajorCertificateErrors()) MixedContentChecker::handleCertificateError(frame(), response, frameType, requestContext); frame()->loader().progress().incrementProgress(identifier, response); frame()->loader().client()->dispatchDidReceiveResponse(m_documentLoader, identifier, response); TRACE_EVENT_INSTANT1("devtools.timeline", "ResourceReceiveResponse", TRACE_EVENT_SCOPE_THREAD, "data", InspectorReceiveResponseEvent::data(identifier, frame(), response)); DocumentLoader* documentLoader = masterDocumentLoader(); InspectorInstrumentation::didReceiveResourceResponse(frame(), identifier, documentLoader, response, resource); // It is essential that inspector gets resource response BEFORE console. frame()->console().reportResourceResponseReceived(documentLoader, identifier, response); }