void NetworkResourceLoader::didFinishLoading(double finishTime) { RELEASE_LOG_IF_ALLOWED("didFinishLoading: (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ")", m_parameters.webPageID, m_parameters.webFrameID, m_parameters.identifier); #if ENABLE(NETWORK_CACHE) if (m_cacheEntryForValidation) { // 304 Not Modified ASSERT(m_response.httpStatusCode() == 304); LOG(NetworkCache, "(NetworkProcess) revalidated"); didRetrieveCacheEntry(WTFMove(m_cacheEntryForValidation)); return; } #endif if (isSynchronous()) sendReplyToSynchronousRequest(*m_synchronousLoadData, m_bufferedData.get()); else { if (m_bufferedData && !m_bufferedData->isEmpty()) { // FIXME: Pass a real value or remove the encoded data size feature. sendBuffer(*m_bufferedData, -1); } send(Messages::WebResourceLoader::DidFinishResourceLoad(finishTime)); } #if ENABLE(NETWORK_CACHE) tryStoreAsCacheEntry(); #endif cleanup(); }
void NetworkResourceLoader::didFinishLoading(double finishTime) { #if ENABLE(NETWORK_CACHE) if (m_cacheEntryForValidation) { // 304 Not Modified ASSERT(m_response.httpStatusCode() == 304); LOG(NetworkCache, "(NetworkProcess) revalidated"); didRetrieveCacheEntry(WTF::move(m_cacheEntryForValidation)); return; } #endif if (isSynchronous()) sendReplyToSynchronousRequest(*m_synchronousLoadData, m_bufferedData.get()); else { if (m_bufferedData && !m_bufferedData->isEmpty()) { // FIXME: Pass a real value or remove the encoded data size feature. bool shouldContinue = sendBufferMaybeAborting(*m_bufferedData, -1); if (!shouldContinue) return; } send(Messages::WebResourceLoader::DidFinishResourceLoad(finishTime)); } #if ENABLE(NETWORK_CACHE) tryStoreAsCacheEntry(); #endif cleanup(); }
void NetworkResourceLoader::didFinishLoading(double finishTime) { NETWORKRESOURCELOADER_LOG_ALWAYS("Finished loading network resource: loader = %p, pageID = %llu, frameID = %llu, isMainResource = %d, isSynchronous = %d", this, static_cast<unsigned long long>(m_parameters.webPageID), static_cast<unsigned long long>(m_parameters.webFrameID), isMainResource(), isSynchronous()); #if ENABLE(NETWORK_CACHE) if (m_cacheEntryForValidation) { // 304 Not Modified ASSERT(m_response.httpStatusCode() == 304); LOG(NetworkCache, "(NetworkProcess) revalidated"); didRetrieveCacheEntry(WTFMove(m_cacheEntryForValidation)); return; } #endif if (isSynchronous()) sendReplyToSynchronousRequest(*m_synchronousLoadData, m_bufferedData.get()); else { if (m_bufferedData && !m_bufferedData->isEmpty()) { // FIXME: Pass a real value or remove the encoded data size feature. bool shouldContinue = sendBufferMaybeAborting(*m_bufferedData, -1); if (!shouldContinue) return; } send(Messages::WebResourceLoader::DidFinishResourceLoad(finishTime)); } #if ENABLE(NETWORK_CACHE) tryStoreAsCacheEntry(); #endif cleanup(); }
void NetworkResourceLoader::sharedDidFinishLoading(double finishTime) { #if ENABLE(NETWORK_CACHE) if (NetworkCache::singleton().isEnabled()) { if (m_cacheEntryForValidation) { // 304 Not Modified ASSERT(m_response.httpStatusCode() == 304); LOG(NetworkCache, "(NetworkProcess) revalidated"); didRetrieveCacheEntry(WTF::move(m_cacheEntryForValidation)); return; } bool allowStale = originalRequest().cachePolicy() >= ReturnCacheDataElseLoad; bool hasCacheableRedirect = m_response.isHTTP() && WebCore::redirectChainAllowsReuse(m_redirectChainCacheStatus, allowStale ? WebCore::ReuseExpiredRedirection : WebCore::DoNotReuseExpiredRedirection); if (hasCacheableRedirect && m_redirectChainCacheStatus.status == RedirectChainCacheStatus::CachedRedirection) { // Maybe we should cache the actual redirects instead of the end result? auto now = std::chrono::system_clock::now(); auto responseEndOfValidity = now + WebCore::computeFreshnessLifetimeForHTTPFamily(m_response, now) - WebCore::computeCurrentAge(m_response, now); hasCacheableRedirect = responseEndOfValidity <= m_redirectChainCacheStatus.endOfValidity; } bool isPrivate = sessionID().isEphemeral(); if (m_bufferedDataForCache && hasCacheableRedirect && !isPrivate) { // Keep the connection alive. RefPtr<NetworkConnectionToWebProcess> connection(connectionToWebProcess()); RefPtr<NetworkResourceLoader> loader(this); NetworkCache::singleton().store(originalRequest(), m_response, WTF::move(m_bufferedDataForCache), [loader, connection](NetworkCache::MappedBody& mappedBody) { #if ENABLE(SHAREABLE_RESOURCE) if (mappedBody.shareableResourceHandle.isNull()) return; LOG(NetworkCache, "(NetworkProcess) sending DidCacheResource"); loader->send(Messages::NetworkProcessConnection::DidCacheResource(loader->originalRequest(), mappedBody.shareableResourceHandle, loader->sessionID())); #endif }); } else if (!hasCacheableRedirect) { // Make sure we don't keep a stale entry in the cache. NetworkCache::singleton().remove(originalRequest()); } } #endif if (isSynchronous()) sendReplyToSynchronousRequest(*m_synchronousLoadData, m_bufferedData.get()); else { if (m_bufferedData && m_bufferedData->size()) { // FIXME: Pass a real value or remove the encoded data size feature. bool shouldContinue = sendBufferMaybeAborting(*m_bufferedData, -1); if (!shouldContinue) return; } send(Messages::WebResourceLoader::DidFinishResourceLoad(finishTime)); } cleanup(); }