Changeset 201600 in webkit
- Timestamp:
- Jun 2, 2016, 9:40:05 AM (10 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 3 edited
-
ChangeLog (modified) (1 diff)
-
NetworkProcess/cache/NetworkCache.cpp (modified) (2 diffs)
-
NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r201596 r201600 1 2016-06-02 Chris Dumez <cdumez@apple.com> 2 3 Speculative revalidated request returns 200 instead of 304 4 https://bugs.webkit.org/show_bug.cgi?id=158256 5 6 Reviewed by Antti Koivisto and Carlos Garcia Campos. 7 8 Already conditional requests coming from WebCore should bypass the 9 SpeculativeLoadManager. This is because the validation is requested 10 by WebCore (usually the memory cache) and not our network cache. As 11 a result, we need to pipe the revalidation response (e.g. 304 status 12 code) back to WebCore instead of resolving it as disk cache level. 13 14 This should fix the /webkit2/WebKitWebResource/response unit test. 15 16 * NetworkProcess/cache/NetworkCache.cpp: 17 (WebKit::NetworkCache::Cache::retrieve): 18 * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp: 19 (WebKit::NetworkCache::requestsHeadersMatch): 20 1 21 2016-06-02 Youenn Fablet <youenn.fablet@crf.canon.fr> 2 22 -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp
r201587 r201600 359 359 360 360 #if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION) 361 if (m_speculativeLoadManager) 361 bool canUseSpeculativeRevalidation = m_speculativeLoadManager && !request.isConditional(); 362 if (canUseSpeculativeRevalidation) 362 363 m_speculativeLoadManager->registerLoad(frameID, request, storageKey); 363 364 #endif … … 373 374 374 375 #if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION) 375 if ( m_speculativeLoadManager&& m_speculativeLoadManager->retrieve(frameID, storageKey, request, [request, completionHandler](std::unique_ptr<Entry> entry) {376 if (canUseSpeculativeRevalidation && m_speculativeLoadManager->retrieve(frameID, storageKey, request, [request, completionHandler](std::unique_ptr<Entry> entry) { 376 377 if (entry && verifyVaryingRequestHeaders(entry->varyingRequestHeaders(), request)) 377 378 completionHandler(WTFMove(entry)); -
trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp
r201395 r201600 270 270 #endif 271 271 272 static bool requestsHeadersMatch(const ResourceRequest& a, const ResourceRequest& b) 273 { 274 static const HTTPHeaderName headersAllowedToMismatch[] = { 275 HTTPHeaderName::IfMatch, 276 HTTPHeaderName::IfModifiedSince, 277 HTTPHeaderName::IfNoneMatch, 278 HTTPHeaderName::IfRange, 279 HTTPHeaderName::IfUnmodifiedSince, 280 HTTPHeaderName::CacheControl 281 }; 282 283 HTTPHeaderMap headersA = a.httpHeaderFields(); 284 HTTPHeaderMap headersB = b.httpHeaderFields(); 285 for (auto headerName : headersAllowedToMismatch) { 286 headersA.remove(headerName); 287 headersB.remove(headerName); 288 } 289 290 if (headersA != headersB) { 272 static bool requestsHeadersMatch(const ResourceRequest& speculativeValidationRequest, const ResourceRequest& actualRequest) 273 { 274 ASSERT(!actualRequest.isConditional()); 275 ResourceRequest speculativeRequest = speculativeValidationRequest; 276 speculativeRequest.makeUnconditional(); 277 278 if (speculativeRequest.httpHeaderFields() != actualRequest.httpHeaderFields()) { 291 279 LOG(NetworkCacheSpeculativePreloading, "Cannot reuse speculatively validated entry because HTTP headers used for validation do not match"); 292 280 #if !LOG_DISABLED 293 dumpHTTPHeadersDiff( headersA, headersB);281 dumpHTTPHeadersDiff(speculativeRequest.httpHeaderFields(), actualRequest.httpHeaderFields()); 294 282 #endif 295 283 return false;
Note:
See TracChangeset
for help on using the changeset viewer.