Changeset 246466 in webkit
- Timestamp:
- Jun 15, 2019 11:20:27 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 7 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r246465 r246466 1 2019-06-15 Rob Buis <rbuis@igalia.com> 2 3 Add tests for prefetch redirects 4 https://bugs.webkit.org/show_bug.cgi?id=197371 5 6 Reviewed by Youenn Fablet. 7 8 Add a test to verify prefetch redirections are cached in the prefetch 9 cache and reused when navigating. 10 11 * http/wpt/prefetch/link-prefetch-main-resource-redirect-expected.txt: Added. 12 * http/wpt/prefetch/link-prefetch-main-resource-redirect.html: Added. 13 * http/wpt/prefetch/resources/main-resource-redirect-no-prefetch.py: Added. 14 (main): 15 * http/wpt/prefetch/resources/navigate.html: Added. 16 * http/wpt/prefetch/resources/prefetched-main-resource-redirect.py: Added. 17 (main): 18 * platform/mac-wk1/TestExpectations: 19 * platform/win/TestExpectations: 20 1 21 2019-06-15 Saam Barati <sbarati@apple.com> 2 22 -
trunk/LayoutTests/platform/mac-wk1/TestExpectations
r246429 r246466 734 734 webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource-iframe.html [ Skip ] 735 735 736 webkit.org/b/197371 http/wpt/prefetch/link-prefetch-main-resource-redirect.html [ Skip ] 737 736 738 webkit.org/b/198177 pointerevents/mouse/compatibility-mouse-events-prevention-mouse-pressed.html [ Skip ] 737 739 -
trunk/LayoutTests/platform/win/TestExpectations
r246433 r246466 4417 4417 webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource-iframe.html [ Skip ] 4418 4418 4419 webkit.org/b/197371 http/wpt/prefetch/link-prefetch-main-resource-redirect.html [ Skip ] 4420 4419 4421 webkit.org/b/198112 http/tests/security/showModalDialog-sync-cross-origin-page-load2.html [ Skip ] 4420 4422 -
trunk/Source/WebCore/ChangeLog
r246464 r246466 1 2019-06-15 Rob Buis <rbuis@igalia.com> 2 3 Add tests for prefetch redirects 4 https://bugs.webkit.org/show_bug.cgi?id=197371 5 6 Reviewed by Youenn Fablet. 7 8 Test: http/wpt/prefetch/link-prefetch-main-resource-redirect.html 9 10 Allow clearing of the Purpose request header field. 11 12 * platform/network/ResourceRequestBase.cpp: 13 (WebCore::ResourceRequestBase::clearPurpose): 14 * platform/network/ResourceRequestBase.h: 15 1 16 2019-06-15 Zalan Bujtas <zalan@apple.com> 2 17 -
trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp
r242891 r246466 358 358 } 359 359 360 void ResourceRequestBase::clearPurpose() 361 { 362 updateResourceRequest(); 363 364 m_httpHeaderFields.remove(HTTPHeaderName::Purpose); 365 366 m_platformRequestUpdated = false; 367 } 368 360 369 String ResourceRequestBase::httpReferrer() const 361 370 { -
trunk/Source/WebCore/platform/network/ResourceRequestBase.h
r242899 r246466 141 141 void clearHTTPAcceptEncoding(); 142 142 143 WEBCORE_EXPORT void clearPurpose(); 144 143 145 const Vector<String>& responseContentDispositionEncodingFallbackArray() const { return m_responseContentDispositionEncodingFallbackArray; } 144 146 WEBCORE_EXPORT void setResponseContentDispositionEncodingFallbackArray(const String& encoding1, const String& encoding2 = String(), const String& encoding3 = String()); -
trunk/Source/WebKit/ChangeLog
r246456 r246466 1 2019-06-15 Rob Buis <rbuis@igalia.com> 2 3 Store prefetch redirects in the prefetch cache 4 https://bugs.webkit.org/show_bug.cgi?id=197371 5 6 Reviewed by Youenn Fablet. 7 8 Store prefetch redirects in the prefetch cache and use them when 9 navigating. 10 11 * NetworkProcess/NetworkResourceLoader.cpp: 12 (WebKit::NetworkResourceLoader::retrieveCacheEntry): 13 (WebKit::NetworkResourceLoader::willSendRedirectedRequest): 14 (WebKit::NetworkResourceLoader::didFinishWithRedirectResponse): 15 * NetworkProcess/NetworkResourceLoader.h: 16 * NetworkProcess/cache/PrefetchCache.cpp: 17 (WebKit::PrefetchCache::Entry::Entry): 18 (WebKit::PrefetchCache::storeRedirect): 19 * NetworkProcess/cache/PrefetchCache.h: 20 1 21 2019-06-14 Devin Rousso <drousso@apple.com> 2 22 -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
r245796 r246466 215 215 ASSERT(m_parameters.options.mode == FetchOptions::Mode::Navigate); 216 216 if (auto session = m_connection->networkProcess().networkSession(sessionID())) { 217 if (auto entry = session->prefetchCache().take(request.url())) 218 m_cache->store(request, entry->response, entry->releaseBuffer(), nullptr); 217 if (auto entry = session->prefetchCache().take(request.url())) { 218 if (!entry->redirectRequest.isNull()) { 219 auto maxAgeCap = validateCacheEntryForMaxAgeCapValidation(request, entry->redirectRequest, entry->response); 220 m_cache->storeRedirect(request, entry->response, entry->redirectRequest, maxAgeCap); 221 } else 222 m_cache->store(request, entry->response, entry->releaseBuffer(), nullptr); 223 } 219 224 } 220 225 } … … 641 646 642 647 if (m_parameters.options.redirect == FetchOptions::Redirect::Manual) { 643 this->didFinishWithRedirectResponse(WTFMove(result->re directResponse));648 this->didFinishWithRedirectResponse(WTFMove(result->request), WTFMove(result->redirectRequest), WTFMove(result->redirectResponse)); 644 649 return; 645 650 } … … 682 687 } 683 688 684 void NetworkResourceLoader::didFinishWithRedirectResponse( ResourceResponse&& redirectResponse)689 void NetworkResourceLoader::didFinishWithRedirectResponse(WebCore::ResourceRequest&& request, WebCore::ResourceRequest&& redirectRequest, ResourceResponse&& redirectResponse) 685 690 { 686 691 redirectResponse.setType(ResourceResponse::Type::Opaqueredirect); 687 didReceiveResponse(WTFMove(redirectResponse), [] (auto) { }); 692 if (!isCrossOriginPrefetch()) 693 didReceiveResponse(WTFMove(redirectResponse), [] (auto) { }); 694 else if (auto session = m_connection->networkProcess().networkSession(sessionID())) 695 session->prefetchCache().storeRedirect(m_networkLoad->currentRequest().url(), WTFMove(redirectResponse), WTFMove(redirectRequest)); 688 696 689 697 WebCore::NetworkLoadMetrics networkLoadMetrics; -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.h
r245796 r246466 165 165 166 166 void continueWillSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&&, Optional<WebCore::AdClickAttribution::Conversion>&&); 167 void didFinishWithRedirectResponse(WebCore::ResourceRe sponse&&);167 void didFinishWithRedirectResponse(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&&); 168 168 WebCore::ResourceResponse sanitizeResponseIfPossible(WebCore::ResourceResponse&&, WebCore::ResourceResponse::SanitizationType); 169 169 -
trunk/Source/WebKit/NetworkProcess/cache/PrefetchCache.cpp
r245171 r246466 33 33 PrefetchCache::Entry::Entry(WebCore::ResourceResponse&& response, RefPtr<WebCore::SharedBuffer>&& buffer) 34 34 : response(WTFMove(response)), buffer(WTFMove(buffer)) 35 { 36 } 37 38 PrefetchCache::Entry::Entry(WebCore::ResourceResponse&& redirectResponse, WebCore::ResourceRequest&& redirectRequest) 39 : response(WTFMove(redirectResponse)), redirectRequest(WTFMove(redirectRequest)) 35 40 { 36 41 } … … 79 84 } 80 85 86 void PrefetchCache::storeRedirect(const URL& requestUrl, WebCore::ResourceResponse&& redirectResponse, WebCore::ResourceRequest&& redirectRequest) 87 { 88 if (!m_sessionPrefetches) 89 m_sessionPrefetches = std::make_unique<PrefetchEntriesMap>(); 90 redirectRequest.clearPurpose(); 91 m_sessionPrefetches->set(requestUrl, std::make_unique<PrefetchCache::Entry>(WTFMove(redirectResponse), WTFMove(redirectRequest))); 92 m_sessionExpirationList.append(std::make_tuple(requestUrl, WallTime::now())); 93 if (!m_expirationTimer.isActive()) 94 m_expirationTimer.startOneShot(expirationTimeout); 95 } 96 81 97 void PrefetchCache::clearExpiredEntries() 82 98 { -
trunk/Source/WebKit/NetworkProcess/cache/PrefetchCache.h
r245053 r246466 26 26 #pragma once 27 27 28 #include <WebCore/ResourceRequest.h> 28 29 #include <WebCore/ResourceResponse.h> 29 30 #include <WebCore/SharedBuffer.h> … … 47 48 struct Entry { 48 49 Entry(WebCore::ResourceResponse&&, RefPtr<WebCore::SharedBuffer>&&); 50 Entry(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&); 49 51 50 52 Ref<WebCore::SharedBuffer> releaseBuffer() { return buffer.releaseNonNull(); } … … 52 54 WebCore::ResourceResponse response; 53 55 RefPtr<WebCore::SharedBuffer> buffer; 56 WebCore::ResourceRequest redirectRequest; 54 57 }; 55 58 56 59 std::unique_ptr<Entry> take(const URL&); 57 60 void store(const URL&, WebCore::ResourceResponse&&, RefPtr<WebCore::SharedBuffer>&&); 61 void storeRedirect(const URL&, WebCore::ResourceResponse&&, WebCore::ResourceRequest&&); 58 62 59 63 private:
Note: See TracChangeset
for help on using the changeset viewer.