void NetworkResourceLoader::didRetrieveCacheEntry(std::unique_ptr<NetworkCache::Entry> entry) { if (isSynchronous()) { m_synchronousLoadData->response = entry->response(); sendReplyToSynchronousRequest(*m_synchronousLoadData, entry->buffer()); } else { bool needsContinueDidReceiveResponseMessage = isMainResource(); sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveResponse(entry->response(), needsContinueDidReceiveResponseMessage)); #if ENABLE(SHAREABLE_RESOURCE) if (!entry->shareableResourceHandle().isNull()) send(Messages::WebResourceLoader::DidReceiveResource(entry->shareableResourceHandle(), currentTime())); else { #endif bool shouldContinue = sendBufferMaybeAborting(*entry->buffer(), entry->buffer()->size()); if (!shouldContinue) return; send(Messages::WebResourceLoader::DidFinishResourceLoad(currentTime())); #if ENABLE(SHAREABLE_RESOURCE) } #endif } cleanup(); }
void NetworkResourceLoader::didRetrieveCacheEntry(std::unique_ptr<NetworkCache::Entry> entry) { if (isSynchronous()) { m_synchronousLoadData->response = entry->response(); sendReplyToSynchronousRequest(*m_synchronousLoadData, entry->buffer()); } else { if (entry->response().url() != originalRequest().url()) { // This is a cached redirect. Synthesize a minimal redirect so we get things like referer header right. // FIXME: We should cache the actual redirects. ResourceRequest syntheticRedirectRequest(entry->response().url()); ResourceResponse syntheticRedirectResponse(originalRequest().url(), { }, 0, { }); sendAbortingOnFailure(Messages::WebResourceLoader::WillSendRequest(syntheticRedirectRequest, syntheticRedirectResponse)); } bool needsContinueDidReceiveResponseMessage = originalRequest().requester() == ResourceRequest::Requester::Main; sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveResponse(entry->response(), needsContinueDidReceiveResponseMessage)); #if ENABLE(SHAREABLE_RESOURCE) if (!entry->shareableResourceHandle().isNull()) send(Messages::WebResourceLoader::DidReceiveResource(entry->shareableResourceHandle(), currentTime())); else { #endif bool shouldContinue = sendBufferMaybeAborting(*entry->buffer(), entry->buffer()->size()); if (!shouldContinue) return; send(Messages::WebResourceLoader::DidFinishResourceLoad(currentTime())); #if ENABLE(SHAREABLE_RESOURCE) } #endif } cleanup(); }
void NetworkResourceLoader::dispatchWillSendRequestForCacheEntry(std::unique_ptr<NetworkCache::Entry> entry) { ASSERT(entry->redirectRequest()); LOG(NetworkCache, "(NetworkProcess) Executing cached redirect"); ++m_redirectCount; send(Messages::WebResourceLoader::WillSendRequest(*entry->redirectRequest(), entry->response())); m_isWaitingContinueWillSendRequestForCachedRedirect = true; }
void NetworkResourceLoader::validateCacheEntry(std::unique_ptr<NetworkCache::Entry> entry) { ASSERT(!m_networkLoad); // If the request is already conditional then the revalidation was not triggered by the disk cache // and we should not overwrite the existing conditional headers. ResourceRequest revalidationRequest = originalRequest(); if (!revalidationRequest.isConditional()) { String eTag = entry->response().httpHeaderField(HTTPHeaderName::ETag); String lastModified = entry->response().httpHeaderField(HTTPHeaderName::LastModified); if (!eTag.isEmpty()) revalidationRequest.setHTTPHeaderField(HTTPHeaderName::IfNoneMatch, eTag); if (!lastModified.isEmpty()) revalidationRequest.setHTTPHeaderField(HTTPHeaderName::IfModifiedSince, lastModified); } m_cacheEntryForValidation = WTFMove(entry); startNetworkLoad(revalidationRequest); }
void NetworkResourceLoader::validateCacheEntry(std::unique_ptr<NetworkCache::Entry> entry) { #if !USE(NETWORK_SESSION) ASSERT(!m_handle); #endif // If the request is already conditional then the revalidation was not triggered by the disk cache // and we should not overwrite the existing conditional headers. if (!m_currentRequest.isConditional()) { String eTag = entry->response().httpHeaderField(WebCore::HTTPHeaderName::ETag); String lastModified = entry->response().httpHeaderField(WebCore::HTTPHeaderName::LastModified); if (!eTag.isEmpty()) m_currentRequest.setHTTPHeaderField(WebCore::HTTPHeaderName::IfNoneMatch, eTag); if (!lastModified.isEmpty()) m_currentRequest.setHTTPHeaderField(WebCore::HTTPHeaderName::IfModifiedSince, lastModified); } m_cacheEntryForValidation = WTF::move(entry); startNetworkLoad(); }