Title: [201600] trunk/Source/WebKit2
- Revision
- 201600
- Author
- [email protected]
- Date
- 2016-06-02 09:40:05 -0700 (Thu, 02 Jun 2016)
Log Message
Speculative revalidated request returns 200 instead of 304
https://bugs.webkit.org/show_bug.cgi?id=158256
Reviewed by Antti Koivisto and Carlos Garcia Campos.
Already conditional requests coming from WebCore should bypass the
SpeculativeLoadManager. This is because the validation is requested
by WebCore (usually the memory cache) and not our network cache. As
a result, we need to pipe the revalidation response (e.g. 304 status
code) back to WebCore instead of resolving it as disk cache level.
This should fix the /webkit2/WebKitWebResource/response unit test.
* NetworkProcess/cache/NetworkCache.cpp:
(WebKit::NetworkCache::Cache::retrieve):
* NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
(WebKit::NetworkCache::requestsHeadersMatch):
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (201599 => 201600)
--- trunk/Source/WebKit2/ChangeLog 2016-06-02 12:03:37 UTC (rev 201599)
+++ trunk/Source/WebKit2/ChangeLog 2016-06-02 16:40:05 UTC (rev 201600)
@@ -1,3 +1,23 @@
+2016-06-02 Chris Dumez <[email protected]>
+
+ Speculative revalidated request returns 200 instead of 304
+ https://bugs.webkit.org/show_bug.cgi?id=158256
+
+ Reviewed by Antti Koivisto and Carlos Garcia Campos.
+
+ Already conditional requests coming from WebCore should bypass the
+ SpeculativeLoadManager. This is because the validation is requested
+ by WebCore (usually the memory cache) and not our network cache. As
+ a result, we need to pipe the revalidation response (e.g. 304 status
+ code) back to WebCore instead of resolving it as disk cache level.
+
+ This should fix the /webkit2/WebKitWebResource/response unit test.
+
+ * NetworkProcess/cache/NetworkCache.cpp:
+ (WebKit::NetworkCache::Cache::retrieve):
+ * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
+ (WebKit::NetworkCache::requestsHeadersMatch):
+
2016-06-02 Youenn Fablet <[email protected]>
Use more references in ResourceLoader related code
Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp (201599 => 201600)
--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp 2016-06-02 12:03:37 UTC (rev 201599)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp 2016-06-02 16:40:05 UTC (rev 201600)
@@ -358,7 +358,8 @@
Key storageKey = makeCacheKey(request);
#if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
- if (m_speculativeLoadManager)
+ bool canUseSpeculativeRevalidation = m_speculativeLoadManager && !request.isConditional();
+ if (canUseSpeculativeRevalidation)
m_speculativeLoadManager->registerLoad(frameID, request, storageKey);
#endif
@@ -372,7 +373,7 @@
}
#if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
- if (m_speculativeLoadManager && m_speculativeLoadManager->retrieve(frameID, storageKey, request, [request, completionHandler](std::unique_ptr<Entry> entry) {
+ if (canUseSpeculativeRevalidation && m_speculativeLoadManager->retrieve(frameID, storageKey, request, [request, completionHandler](std::unique_ptr<Entry> entry) {
if (entry && verifyVaryingRequestHeaders(entry->varyingRequestHeaders(), request))
completionHandler(WTFMove(entry));
else
Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp (201599 => 201600)
--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp 2016-06-02 12:03:37 UTC (rev 201599)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp 2016-06-02 16:40:05 UTC (rev 201600)
@@ -269,28 +269,16 @@
#endif
-static bool requestsHeadersMatch(const ResourceRequest& a, const ResourceRequest& b)
+static bool requestsHeadersMatch(const ResourceRequest& speculativeValidationRequest, const ResourceRequest& actualRequest)
{
- static const HTTPHeaderName headersAllowedToMismatch[] = {
- HTTPHeaderName::IfMatch,
- HTTPHeaderName::IfModifiedSince,
- HTTPHeaderName::IfNoneMatch,
- HTTPHeaderName::IfRange,
- HTTPHeaderName::IfUnmodifiedSince,
- HTTPHeaderName::CacheControl
- };
+ ASSERT(!actualRequest.isConditional());
+ ResourceRequest speculativeRequest = speculativeValidationRequest;
+ speculativeRequest.makeUnconditional();
- HTTPHeaderMap headersA = a.httpHeaderFields();
- HTTPHeaderMap headersB = b.httpHeaderFields();
- for (auto headerName : headersAllowedToMismatch) {
- headersA.remove(headerName);
- headersB.remove(headerName);
- }
-
- if (headersA != headersB) {
+ if (speculativeRequest.httpHeaderFields() != actualRequest.httpHeaderFields()) {
LOG(NetworkCacheSpeculativePreloading, "Cannot reuse speculatively validated entry because HTTP headers used for validation do not match");
#if !LOG_DISABLED
- dumpHTTPHeadersDiff(headersA, headersB);
+ dumpHTTPHeadersDiff(speculativeRequest.httpHeaderFields(), actualRequest.httpHeaderFields());
#endif
return false;
}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes