Changeset 245053 in webkit
- Timestamp:
- May 8, 2019 5:40:10 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 11 added
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r245052 r245053 1 2019-05-08 Rob Buis <rbuis@igalia.com> 2 3 Link prefetch not useful for top-level navigation 4 https://bugs.webkit.org/show_bug.cgi?id=195623 5 6 Reviewed by Youenn Fablet. 7 8 Verify that prefetching a cross-domain top-level main resource 9 is cached in the prefetch cache and only loaded once, and that non 10 top-level prefetches keep the old behavior. 11 12 * http/tests/cache/link-prefetch-main-resource-expected.txt: Added. 13 * http/tests/cache/link-prefetch-main-resource-iframe-expected.txt: Added. 14 * http/tests/cache/link-prefetch-main-resource-iframe.html: Added. 15 * http/tests/cache/link-prefetch-main-resource.html: Added. 16 * http/tests/cache/resources/prefetched-main-resource-iframe.php: Added. 17 * http/tests/cache/resources/prefetched-main-resource.php: Added. 18 * http/tests/contentextensions/prefetch-blocked-expected.txt: Added. 19 * http/tests/contentextensions/prefetch-blocked.html: Added. 20 * http/tests/contentextensions/prefetch-blocked.html.json: Added. 21 * platform/mac-wk1/TestExpectations: 22 * platform/win/TestExpectations: 23 1 24 2019-05-08 Jiewen Tan <jiewen_tan@apple.com> 2 25 -
trunk/LayoutTests/platform/mac-wk1/TestExpectations
r244813 r245053 703 703 704 704 webkit.org/b/196915 [ Debug ] inspector/timeline/timeline-recording.html [ Pass Failure ] 705 706 webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource.html [ Skip ] 707 webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource-iframe.html [ Skip ] -
trunk/LayoutTests/platform/win/TestExpectations
r244948 r245053 4396 4396 [ Win10 ] svg/repaint/remove-background-property-on-root.html [ ImageOnlyFailure ] 4397 4397 [ Win10 ] fast/spatial-navigation/snav-media-elements.html [ Crash ] 4398 4399 webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource.html [ Skip ] 4400 webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource-iframe.html [ Skip ] -
trunk/Source/WebCore/ChangeLog
r245049 r245053 1 2019-05-08 Rob Buis <rbuis@igalia.com> 2 3 Link prefetch not useful for top-level navigation 4 https://bugs.webkit.org/show_bug.cgi?id=195623 5 6 Reviewed by Youenn Fablet. 7 8 Cache cross-domain top-level prefetches in a dedicated cache and not in the 9 memory cache. 10 11 Tests: http/tests/cache/link-prefetch-main-resource-iframe.html 12 http/tests/cache/link-prefetch-main-resource.html 13 http/tests/contentextensions/prefetch-blocked.html 14 15 * loader/LinkLoader.cpp: 16 (WebCore::LinkLoader::prefetchIfNeeded): 17 * loader/ResourceLoadInfo.cpp: 18 (WebCore::toResourceType): 19 1 20 2019-05-07 Don Olmstead <don.olmstead@sony.com> 2 21 -
trunk/Source/WebCore/loader/LinkLoader.cpp
r244700 r245053 278 278 m_cachedLinkResource = nullptr; 279 279 } 280 // FIXME: Add further prefetch restrictions/limitations: 281 // - third-party iframes cannot trigger prefetches 282 // - Number of prefetches of a given page is limited (to 1 maybe?) 280 283 ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions(); 281 284 options.contentSecurityPolicyImposition = ContentSecurityPolicyImposition::SkipPolicyCheck; 285 options.certificateInfoPolicy = CertificateInfoPolicy::IncludeCertificateInfo; 286 options.credentials = FetchOptions::Credentials::SameOrigin; 287 options.redirect = FetchOptions::Redirect::Manual; 288 options.mode = FetchOptions::Mode::Navigate; 289 options.serviceWorkersMode = ServiceWorkersMode::None; 290 options.cachingPolicy = CachingPolicy::DisallowCaching; 282 291 m_cachedLinkResource = document.cachedResourceLoader().requestLinkResource(type, CachedResourceRequest(ResourceRequest(document.completeURL(href)), options, priority)).value_or(nullptr); 283 292 if (m_cachedLinkResource) -
trunk/Source/WebCore/loader/ResourceLoadInfo.cpp
r244794 r245053 38 38 { 39 39 switch (type) { 40 case CachedResource::Type::LinkPrefetch: 40 41 case CachedResource::Type::MainResource: 41 42 return ResourceType::Document; … … 72 73 return ResourceType::Media; 73 74 #endif 74 case CachedResource::Type::LinkPrefetch:75 ASSERT_NOT_REACHED();76 break;77 75 #if ENABLE(APPLICATION_MANIFEST) 78 76 case CachedResource::Type::ApplicationManifest: -
trunk/Source/WebKit/ChangeLog
r245048 r245053 1 2019-05-08 Rob Buis <rbuis@igalia.com> 2 3 Link prefetch not useful for top-level navigation 4 https://bugs.webkit.org/show_bug.cgi?id=195623 5 6 Reviewed by Youenn Fablet. 7 8 Cache cross-domain top-level prefetches in a dedicated cache. When a navigation 9 to the same url is done within a threshold (5 seconds), reuse the 10 prefetch cache entry, move it to the disk cache and navigate to 11 the url, meaning no extra network trip is needed. When not used within 12 the threshold period, the prefetch entry will be erased using a timer. 13 14 * NetworkProcess/NetworkProcess.cpp: 15 (WebKit::NetworkProcess::lowMemoryHandler): 16 * NetworkProcess/NetworkResourceLoader.cpp: 17 (WebKit::NetworkResourceLoader::retrieveCacheEntry): 18 (WebKit::NetworkResourceLoader::didReceiveResponse): 19 (WebKit::NetworkResourceLoader::didReceiveBuffer): 20 (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry): 21 (WebKit::NetworkResourceLoader::isCrossOriginPrefetch const): 22 * NetworkProcess/NetworkResourceLoader.h: 23 * NetworkProcess/NetworkSession.h: 24 (WebKit::NetworkSession::prefetchCache): 25 (WebKit::NetworkSession::clearPrefetchCache): 26 * NetworkProcess/cache/PrefetchCache.cpp: Added. 27 (WebKit::PrefetchCache::Entry::Entry): 28 (WebKit::PrefetchCache::PrefetchCache): 29 (WebKit::PrefetchCache::~PrefetchCache): 30 (WebKit::PrefetchCache::clear): 31 (WebKit::PrefetchCache::take): 32 (WebKit::PrefetchCache::store): 33 (WebKit::PrefetchCache::clearExpiredEntries): 34 * NetworkProcess/cache/PrefetchCache.h: Added. 35 (WebKit::PrefetchCache::Entry::releaseBuffer): 36 * Shared/WebPreferences.yaml: 37 * Sources.txt: 38 * WebKit.xcodeproj/project.pbxproj: 39 1 40 2019-05-07 Chris Dumez <cdumez@apple.com> 2 41 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r245025 r245053 271 271 272 272 WTF::releaseFastMallocFreeMemory(); 273 274 for (auto& networkSession : m_networkSessions.values()) 275 networkSession.get().clearPrefetchCache(); 273 276 } 274 277 -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
r244910 r245053 212 212 213 213 RefPtr<NetworkResourceLoader> loader(this); 214 if (isMainFrameLoad()) { 215 ASSERT(m_parameters.options.mode == FetchOptions::Mode::Navigate); 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); 219 } 220 } 214 221 m_cache->retrieve(request, { m_parameters.webPageID, m_parameters.webFrameID }, [this, loader = WTFMove(loader), request = ResourceRequest { request }](auto entry, auto info) mutable { 215 222 if (loader->hasOneRef()) { … … 470 477 } 471 478 479 if (isCrossOriginPrefetch()) 480 return completionHandler(PolicyAction::Use); 481 472 482 // We wait to receive message NetworkResourceLoader::ContinueDidReceiveResponse before continuing a load for 473 483 // a main resource because the embedding client must decide whether to allow the load. … … 507 517 m_bufferedDataForCache = nullptr; 508 518 } 519 if (isCrossOriginPrefetch()) 520 return; 509 521 // FIXME: At least on OS X Yosemite we always get -1 from the resource handle. 510 522 unsigned encodedDataLength = reportedEncodedDataLength >= 0 ? reportedEncodedDataLength : buffer->size(); … … 798 810 return; 799 811 812 if (isCrossOriginPrefetch()) { 813 if (auto session = m_connection->networkProcess().networkSession(sessionID())) 814 session->prefetchCache().store(m_networkLoad->currentRequest().url(), WTFMove(m_response), WTFMove(m_bufferedDataForCache)); 815 return; 816 } 800 817 m_cache->store(m_networkLoad->currentRequest(), m_response, WTFMove(m_bufferedDataForCache), [loader = makeRef(*this)](auto& mappedBody) mutable { 801 818 #if ENABLE(SHAREABLE_RESOURCE) … … 1128 1145 } 1129 1146 1147 bool NetworkResourceLoader::isCrossOriginPrefetch() const 1148 { 1149 auto request = originalRequest(); 1150 return request.httpHeaderField(HTTPHeaderName::Purpose) == "prefetch" && !m_parameters.sourceOrigin->canRequest(request.url()); 1151 } 1152 1130 1153 } // namespace WebKit 1131 1154 -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.h
r244700 r245053 105 105 bool isMainResource() const { return m_parameters.request.requester() == WebCore::ResourceRequest::Requester::Main; } 106 106 bool isMainFrameLoad() const { return isMainResource() && m_parameters.frameAncestorOrigins.isEmpty(); } 107 bool isCrossOriginPrefetch() const; 107 108 108 109 bool isAlwaysOnLoggingAllowed() const; -
trunk/Source/WebKit/NetworkProcess/NetworkSession.h
r244818 r245053 26 26 #pragma once 27 27 28 #include "PrefetchCache.h" 28 29 #include "WebResourceLoadStatisticsStore.h" 29 30 #include <WebCore/AdClickAttribution.h> … … 94 95 void removeKeptAliveLoad(NetworkResourceLoader&); 95 96 97 PrefetchCache& prefetchCache() { return m_prefetchCache; } 98 void clearPrefetchCache() { m_prefetchCache.clear(); } 99 96 100 protected: 97 101 NetworkSession(NetworkProcess&, PAL::SessionID); … … 110 114 111 115 HashSet<Ref<NetworkResourceLoader>> m_keptAliveLoads; 116 117 PrefetchCache m_prefetchCache; 112 118 }; 113 119 -
trunk/Source/WebKit/Shared/WebPreferences.yaml
r245023 r245053 1666 1666 type: bool 1667 1667 1668 LinkPrefetchEnabled: 1669 type: bool 1670 defaultValue: false 1671 humanReadableName: "LinkPrefetch" 1672 humanReadableDescription: "Enable LinkedPrefetch" 1673 webcoreBinding: RuntimeEnabledFeatures 1674 category: experimental 1675 1668 1676 # Deprecated 1669 1677 -
trunk/Source/WebKit/Sources.txt
r244428 r245053 81 81 NetworkProcess/cache/NetworkCacheStorage.cpp 82 82 NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp 83 NetworkProcess/cache/PrefetchCache.cpp 83 84 84 85 NetworkProcess/webrtc/NetworkMDNSRegister.cpp -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r245044 r245053 1334 1334 A78CCDDC193AC9FB005ECC25 /* com.apple.WebKit.WebContent.sb in CopyFiles */ = {isa = PBXBuildFile; fileRef = A78CCDD9193AC9E3005ECC25 /* com.apple.WebKit.WebContent.sb */; }; 1335 1335 A7D792D81767CCA300881CBE /* ActivityAssertion.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D792D41767CB0900881CBE /* ActivityAssertion.h */; }; 1336 AAB145E6223F931200E489D8 /* PrefetchCache.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB145E4223F931200E489D8 /* PrefetchCache.h */; }; 1336 1337 B62E7312143047B00069EC35 /* WKHitTestResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B62E7311143047B00069EC35 /* WKHitTestResult.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1337 1338 B878B615133428DC006888E9 /* CorrectionPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = B878B613133428DC006888E9 /* CorrectionPanel.h */; }; … … 3997 3998 A7D792D51767CB6E00881CBE /* ActivityAssertion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ActivityAssertion.cpp; sourceTree = "<group>"; }; 3998 3999 A7E93CEB192531AA00A1DC48 /* AuxiliaryProcessIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AuxiliaryProcessIOS.mm; path = ios/AuxiliaryProcessIOS.mm; sourceTree = "<group>"; }; 4000 AAB145E4223F931200E489D8 /* PrefetchCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrefetchCache.h; sourceTree = "<group>"; }; 4001 AAB145E5223F931200E489D8 /* PrefetchCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PrefetchCache.cpp; sourceTree = "<group>"; }; 3999 4002 B396EA5512E0ED2D00F4FEB7 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; }; 4000 4003 B62E730F143047A60069EC35 /* WKHitTestResult.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKHitTestResult.cpp; sourceTree = "<group>"; }; … … 8959 8962 8310428A1BD6B66F00A715E4 /* NetworkCacheSubresourcesEntry.cpp */, 8960 8963 831042891BD6B66F00A715E4 /* NetworkCacheSubresourcesEntry.h */, 8964 AAB145E5223F931200E489D8 /* PrefetchCache.cpp */, 8965 AAB145E4223F931200E489D8 /* PrefetchCache.h */, 8961 8966 ); 8962 8967 path = cache; … … 9436 9441 1A6FB7AF11E64B6800DB1371 /* PluginView.h in Headers */, 9437 9442 83A0ED351F747CCF003299EB /* PreconnectTask.h in Headers */, 9443 AAB145E6223F931200E489D8 /* PrefetchCache.h in Headers */, 9438 9444 E1CC1B9012D7EADF00625838 /* PrintInfo.h in Headers */, 9439 9445 86F9536518FF58F5001DB2EF /* ProcessAssertion.h in Headers */,
Note: See TracChangeset
for help on using the changeset viewer.