Index: third_party/WebKit/Source/core/loader/FrameFetchContext.cpp |
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp |
index 34ec8253a454e9adec3fa4eefa0c86c31fbef9d1..be6fa4cabfe3196fdd62321606047fd919f40dc7 100644 |
--- a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp |
+++ b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp |
@@ -487,10 +487,50 @@ void FrameFetchContext::dispatchDidReceiveResponse( |
const ResourceResponse& response, |
WebURLRequest::FrameType frameType, |
WebURLRequest::RequestContext requestContext, |
- Resource* resource) { |
- dispatchDidReceiveResponseInternal(identifier, response, frameType, |
- requestContext, resource, |
- LinkLoader::LoadResourcesAndPreconnect); |
+ Resource* resource, |
+ ResourceResponseType responseType) { |
+ if (responseType == ResourceResponseType::kFromMemoryCache) { |
+ // Note: probe::willSendRequest needs to precede before this probe method. |
+ probe::markResourceAsCached(frame(), identifier); |
+ if (response.isNull()) |
+ return; |
+ } |
+ |
+ MixedContentChecker::checkMixedPrivatePublic(frame(), |
+ response.remoteIPAddress()); |
+ LinkLoader::CanLoadResources resourceLoadingPolicy = |
+ responseType == ResourceResponseType::kFromMemoryCache |
+ ? LinkLoader::DoNotLoadResources |
+ : LinkLoader::LoadResourcesAndPreconnect; |
+ if (m_documentLoader && |
+ m_documentLoader == |
+ m_documentLoader->frame()->loader().provisionalDocumentLoader()) { |
+ FrameClientHintsPreferencesContext hintsContext(frame()); |
+ m_documentLoader->clientHintsPreferences() |
+ .updateFromAcceptClientHintsHeader( |
+ response.httpHeaderField(HTTPNames::Accept_CH), &hintsContext); |
+ // 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, |
+ LinkLoader::LoadAll, nullptr); |
+ |
+ if (response.hasMajorCertificateErrors()) { |
+ MixedContentChecker::handleCertificateError(frame(), response, frameType, |
+ requestContext); |
+ } |
+ |
+ frame()->loader().progress().incrementProgress(identifier, response); |
+ localFrameClient()->dispatchDidReceiveResponse(response); |
+ DocumentLoader* documentLoader = masterDocumentLoader(); |
+ probe::didReceiveResourceResponse(frame(), identifier, documentLoader, |
+ response, resource); |
+ // It is essential that inspector gets resource response BEFORE console. |
+ frame()->console().reportResourceResponseReceived(documentLoader, identifier, |
+ response); |
} |
void FrameFetchContext::dispatchDidReceiveData(unsigned long identifier, |
@@ -540,28 +580,10 @@ void FrameFetchContext::dispatchDidFail(unsigned long identifier, |
void FrameFetchContext::dispatchDidLoadResourceFromMemoryCache( |
unsigned long identifier, |
- Resource* resource, |
- WebURLRequest::FrameType frameType, |
- WebURLRequest::RequestContext requestContext) { |
- ResourceRequest request(resource->url()); |
- request.setFrameType(frameType); |
- request.setRequestContext(requestContext); |
- localFrameClient()->dispatchDidLoadResourceFromMemoryCache( |
- request, resource->response()); |
- dispatchWillSendRequest(identifier, request, ResourceResponse(), |
- resource->options().initiatorInfo); |
- probe::markResourceAsCached(frame(), identifier); |
- if (!resource->response().isNull()) { |
- dispatchDidReceiveResponseInternal(identifier, resource->response(), |
- frameType, requestContext, resource, |
- LinkLoader::DoNotLoadResources); |
- } |
- |
- if (resource->encodedSize() > 0) |
- dispatchDidReceiveData(identifier, 0, resource->encodedSize()); |
- |
- dispatchDidFinishLoading(identifier, 0, 0, |
- resource->response().decodedBodyLength()); |
+ const ResourceRequest& resourceRequest, |
+ const ResourceResponse& resourceResponse) { |
+ localFrameClient()->dispatchDidLoadResourceFromMemoryCache(resourceRequest, |
+ resourceResponse); |
} |
bool FrameFetchContext::shouldLoadNewResource(Resource::Type type) const { |
@@ -1034,46 +1056,6 @@ RefPtr<WebTaskRunner> FrameFetchContext::loadingTaskRunner() const { |
return frame()->frameScheduler()->loadingTaskRunner(); |
} |
-void FrameFetchContext::dispatchDidReceiveResponseInternal( |
- unsigned long identifier, |
- const ResourceResponse& response, |
- WebURLRequest::FrameType frameType, |
- WebURLRequest::RequestContext requestContext, |
- Resource* resource, |
- LinkLoader::CanLoadResources resourceLoadingPolicy) { |
- MixedContentChecker::checkMixedPrivatePublic(frame(), |
- response.remoteIPAddress()); |
- if (m_documentLoader && |
- m_documentLoader == |
- m_documentLoader->frame()->loader().provisionalDocumentLoader()) { |
- FrameClientHintsPreferencesContext hintsContext(frame()); |
- m_documentLoader->clientHintsPreferences() |
- .updateFromAcceptClientHintsHeader( |
- response.httpHeaderField(HTTPNames::Accept_CH), &hintsContext); |
- // 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, |
- LinkLoader::LoadAll, nullptr); |
- |
- if (response.hasMajorCertificateErrors()) { |
- MixedContentChecker::handleCertificateError(frame(), response, frameType, |
- requestContext); |
- } |
- |
- frame()->loader().progress().incrementProgress(identifier, response); |
- localFrameClient()->dispatchDidReceiveResponse(response); |
- DocumentLoader* documentLoader = masterDocumentLoader(); |
- probe::didReceiveResourceResponse(frame(), identifier, documentLoader, |
- response, resource); |
- // It is essential that inspector gets resource response BEFORE console. |
- frame()->console().reportResourceResponseReceived(documentLoader, identifier, |
- response); |
-} |
- |
DEFINE_TRACE(FrameFetchContext) { |
visitor->trace(m_document); |
visitor->trace(m_documentLoader); |