WebKit Bugzilla
Attachment 373466 Details for
Bug 199499
: Make storing cross-origin top-level prefetches in HTTP cache optional
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-199499-20190704165633.patch (text/plain), 10.79 KB, created by
Rob Buis
on 2019-07-04 07:56:34 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Rob Buis
Created:
2019-07-04 07:56:34 PDT
Size:
10.79 KB
patch
obsolete
>Subversion Revision: 247138 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 7954010a062b1a4cbef05c5b34b9897a6cfc5a35..ca4b0b1012d6d7bd957efcacd4a3a3b67fa1d1db 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,22 @@ >+2019-07-04 Rob Buis <rbuis@igalia.com> >+ >+ Do not put cross-origin top-level prefetches in HTTP cache >+ https://bugs.webkit.org/show_bug.cgi?id=199499 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Currently when we navigate we check if there is a cross-origin top-level >+ prefetch we can use for the navigation. The current solution uses the >+ HTTP cache as a way to store the prefetch and to immediately use it for >+ the navigation. However this solution fails in case the prefetch is not >+ cacheable in the first place. Instead of this, skip storing in the HTTP >+ cache and simulate a HTTP Cache entry to process the load. >+ >+ * NetworkProcess/NetworkResourceLoader.cpp: >+ (WebKit::NetworkResourceLoader::retrieveCacheEntry): >+ (WebKit::NetworkResourceLoader::retrieveCacheEntryInternal): >+ * NetworkProcess/NetworkResourceLoader.h: >+ > 2019-07-03 Ryosuke Niwa <rniwa@webkit.org> > > Crash in WebDragClient::startDrag because GraphicsContext is nullptr >diff --git a/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp b/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp >index ea51d5398eba4613a5192df5f595fbd04be8f39a..bf6be3a60c3f932f51eff5487a62e15ba6161f84 100644 >--- a/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp >+++ b/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp >@@ -215,11 +215,13 @@ void NetworkResourceLoader::retrieveCacheEntry(const ResourceRequest& request) > ASSERT(m_parameters.options.mode == FetchOptions::Mode::Navigate); > if (auto* session = m_connection->networkProcess().networkSession(sessionID())) { > if (auto entry = session->prefetchCache().take(request.url())) { >+ std::unique_ptr<NetworkCache::Entry> cacheEntry; > if (!entry->redirectRequest.isNull()) { >- auto maxAgeCap = validateCacheEntryForMaxAgeCapValidation(request, entry->redirectRequest, entry->response); >- m_cache->storeRedirect(request, entry->response, entry->redirectRequest, maxAgeCap); >+ cacheEntry = m_cache->makeRedirectEntry(request, entry->response, entry->redirectRequest); > } else >- m_cache->store(request, entry->response, entry->releaseBuffer(), nullptr); >+ cacheEntry = m_cache->makeEntry(request, entry->response, entry->releaseBuffer()); >+ loader->retrieveCacheEntryInternal(WTFMove(cacheEntry), request); >+ return; > } > } > } >@@ -236,33 +238,38 @@ void NetworkResourceLoader::retrieveCacheEntry(const ResourceRequest& request) > loader->startNetworkLoad(WTFMove(request), FirstLoad::Yes); > return; > } >+ loader->retrieveCacheEntryInternal(WTFMove(entry), request); >+ }); >+} >+ >+void NetworkResourceLoader::retrieveCacheEntryInternal(std::unique_ptr<NetworkCache::Entry> entry, WebCore::ResourceRequest request) >+{ > #if ENABLE(RESOURCE_LOAD_STATISTICS) >- if (entry->hasReachedPrevalentResourceAgeCap()) { >- RELEASE_LOG_IF_ALLOWED("retrieveCacheEntry: Resource has reached prevalent resource age cap (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", isMainResource = %d, isSynchronous = %d)", m_parameters.webPageID.toUInt64(), m_parameters.webFrameID, m_parameters.identifier, isMainResource(), isSynchronous()); >- m_cacheEntryForMaxAgeCapValidation = WTFMove(entry); >- ResourceRequest revalidationRequest = originalRequest(); >- loader->startNetworkLoad(WTFMove(revalidationRequest), FirstLoad::Yes); >- return; >- } >+ if (entry->hasReachedPrevalentResourceAgeCap()) { >+ RELEASE_LOG_IF_ALLOWED("retrieveCacheEntry: Resource has reached prevalent resource age cap (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", isMainResource = %d, isSynchronous = %d)", m_parameters.webPageID.toUInt64(), m_parameters.webFrameID, m_parameters.identifier, isMainResource(), isSynchronous()); >+ m_cacheEntryForMaxAgeCapValidation = WTFMove(entry); >+ ResourceRequest revalidationRequest = originalRequest(); >+ startNetworkLoad(WTFMove(revalidationRequest), FirstLoad::Yes); >+ return; >+ } > #endif >- if (entry->redirectRequest()) { >- RELEASE_LOG_IF_ALLOWED("retrieveCacheEntry: Handling redirect (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", isMainResource = %d, isSynchronous = %d)", m_parameters.webPageID.toUInt64(), m_parameters.webFrameID, m_parameters.identifier, isMainResource(), isSynchronous()); >- loader->dispatchWillSendRequestForCacheEntry(WTFMove(request), WTFMove(entry)); >- return; >- } >- if (loader->m_parameters.needsCertificateInfo && !entry->response().certificateInfo()) { >- RELEASE_LOG_IF_ALLOWED("retrieveCacheEntry: Resource does not have required certificate (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", isMainResource = %d, isSynchronous = %d)", m_parameters.webPageID.toUInt64(), m_parameters.webFrameID, m_parameters.identifier, isMainResource(), isSynchronous()); >- loader->startNetworkLoad(WTFMove(request), FirstLoad::Yes); >- return; >- } >- if (entry->needsValidation() || request.cachePolicy() == WebCore::ResourceRequestCachePolicy::RefreshAnyCacheData) { >- RELEASE_LOG_IF_ALLOWED("retrieveCacheEntry: Validating cache entry (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", isMainResource = %d, isSynchronous = %d)", m_parameters.webPageID.toUInt64(), m_parameters.webFrameID, m_parameters.identifier, isMainResource(), isSynchronous()); >- loader->validateCacheEntry(WTFMove(entry)); >- return; >- } >- RELEASE_LOG_IF_ALLOWED("retrieveCacheEntry: Retrieved resource from cache (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", isMainResource = %d, isSynchronous = %d)", m_parameters.webPageID.toUInt64(), m_parameters.webFrameID, m_parameters.identifier, isMainResource(), isSynchronous()); >- loader->didRetrieveCacheEntry(WTFMove(entry)); >- }); >+ if (entry->redirectRequest()) { >+ RELEASE_LOG_IF_ALLOWED("retrieveCacheEntry: Handling redirect (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", isMainResource = %d, isSynchronous = %d)", m_parameters.webPageID.toUInt64(), m_parameters.webFrameID, m_parameters.identifier, isMainResource(), isSynchronous()); >+ dispatchWillSendRequestForCacheEntry(WTFMove(request), WTFMove(entry)); >+ return; >+ } >+ if (m_parameters.needsCertificateInfo && !entry->response().certificateInfo()) { >+ RELEASE_LOG_IF_ALLOWED("retrieveCacheEntry: Resource does not have required certificate (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", isMainResource = %d, isSynchronous = %d)", m_parameters.webPageID.toUInt64(), m_parameters.webFrameID, m_parameters.identifier, isMainResource(), isSynchronous()); >+ startNetworkLoad(WTFMove(request), FirstLoad::Yes); >+ return; >+ } >+ if (entry->needsValidation() || request.cachePolicy() == WebCore::ResourceRequestCachePolicy::RefreshAnyCacheData) { >+ RELEASE_LOG_IF_ALLOWED("retrieveCacheEntry: Validating cache entry (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", isMainResource = %d, isSynchronous = %d)", m_parameters.webPageID.toUInt64(), m_parameters.webFrameID, m_parameters.identifier, isMainResource(), isSynchronous()); >+ validateCacheEntry(WTFMove(entry)); >+ return; >+ } >+ RELEASE_LOG_IF_ALLOWED("retrieveCacheEntry: Retrieved resource from cache (pageID = %" PRIu64 ", frameID = %" PRIu64 ", resourceID = %" PRIu64 ", isMainResource = %d, isSynchronous = %d)", m_parameters.webPageID.toUInt64(), m_parameters.webFrameID, m_parameters.identifier, isMainResource(), isSynchronous()); >+ didRetrieveCacheEntry(WTFMove(entry)); > } > > void NetworkResourceLoader::startNetworkLoad(ResourceRequest&& request, FirstLoad load) >diff --git a/Source/WebKit/NetworkProcess/NetworkResourceLoader.h b/Source/WebKit/NetworkProcess/NetworkResourceLoader.h >index 4b4ce4f08f8b80aa79d81bba25f6e24987a624d2..2e8438362b8617cd60f442776c36ba4efbea298f 100644 >--- a/Source/WebKit/NetworkProcess/NetworkResourceLoader.h >+++ b/Source/WebKit/NetworkProcess/NetworkResourceLoader.h >@@ -129,6 +129,7 @@ private: > > void tryStoreAsCacheEntry(); > void retrieveCacheEntry(const WebCore::ResourceRequest&); >+ void retrieveCacheEntryInternal(std::unique_ptr<NetworkCache::Entry>, WebCore::ResourceRequest); > void didRetrieveCacheEntry(std::unique_ptr<NetworkCache::Entry>); > void sendResultForCacheEntry(std::unique_ptr<NetworkCache::Entry>); > void validateCacheEntry(std::unique_ptr<NetworkCache::Entry>); >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index a88e8cc5a7d8a1c1e8a1acf98a634f7cf0298321..b71c7410c95f7fe19bfde795fa153706f6267ce2 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,15 @@ >+2019-07-04 Rob Buis <rbuis@igalia.com> >+ >+ Do not put cross-origin top-level prefetches in HTTP cache >+ https://bugs.webkit.org/show_bug.cgi?id=199499 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Remove unneeded Cache-Control headers. >+ >+ * http/tests/cache/resources/prefetched-main-resource-iframe.php: >+ * http/tests/cache/resources/prefetched-main-resource.php: >+ > 2019-07-03 Justin Fan <justin_fan@apple.com> > > [WHLSL] Support float4x4 in test harness >diff --git a/LayoutTests/http/tests/cache/resources/prefetched-main-resource-iframe.php b/LayoutTests/http/tests/cache/resources/prefetched-main-resource-iframe.php >index a7ad2e9754f1964690e8c8232c2a2fa146b8bc56..3abeb35b7662f0315cae8a692bdbb7176ddb5d5b 100644 >--- a/LayoutTests/http/tests/cache/resources/prefetched-main-resource-iframe.php >+++ b/LayoutTests/http/tests/cache/resources/prefetched-main-resource-iframe.php >@@ -1,6 +1,5 @@ > <?php > if ($_SERVER["HTTP_PURPOSE"] == "prefetch") { >- header('Cache-Control: max-age=3600'); > header("Access-Control-Allow-Origin: http://127.0.0.1:8000"); > > echo "<script>"; >diff --git a/LayoutTests/http/tests/cache/resources/prefetched-main-resource.php b/LayoutTests/http/tests/cache/resources/prefetched-main-resource.php >index 7a3ceb47c5f168909450e97df842d3b2573bbc1d..74a954b4638f5e9afb54c6ac23900af6b40bf167 100644 >--- a/LayoutTests/http/tests/cache/resources/prefetched-main-resource.php >+++ b/LayoutTests/http/tests/cache/resources/prefetched-main-resource.php >@@ -1,6 +1,3 @@ >-<?php >-header('Cache-Control: max-age=3600'); >-?> > <!DOCTYPE html> > <html> > <body>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 199499
:
373466
|
373481
|
373507
|
373827
|
373831
|
373834
|
373835
|
374368
|
374376
|
374381
|
374395
|
374397
|
374417
|
374596
|
374769
|
374773
|
374887
|
374888
|
374898