Diff
Modified: trunk/LayoutTests/ChangeLog (201804 => 201805)
--- trunk/LayoutTests/ChangeLog 2016-06-08 12:56:36 UTC (rev 201804)
+++ trunk/LayoutTests/ChangeLog 2016-06-08 13:37:04 UTC (rev 201805)
@@ -1,3 +1,14 @@
+2016-06-06 Antti Koivisto <an...@apple.com>
+
+ WebKit memory cache doesn't respect Vary header
+ https://bugs.webkit.org/show_bug.cgi?id=71509
+ <rdar://problem/26651033>
+
+ Reviewed by Sam Weinig.
+
+ * http/tests/cache/disk-cache/disk-cache-vary-expected.txt:
+ * http/tests/cache/disk-cache/disk-cache-vary-no-body-expected.txt:
+
2016-06-08 Adam Bergkvist <adam.bergkv...@ericsson.com>
WebRTC: Imlement MediaEndpointPeerConnection::setLocalDescription()
Modified: trunk/LayoutTests/http/tests/cache/disk-cache/disk-cache-vary-expected.txt (201804 => 201805)
--- trunk/LayoutTests/http/tests/cache/disk-cache/disk-cache-vary-expected.txt 2016-06-08 12:56:36 UTC (rev 201804)
+++ trunk/LayoutTests/http/tests/cache/disk-cache/disk-cache-vary-expected.txt 2016-06-08 13:37:04 UTC (rev 201805)
@@ -558,7 +558,7 @@
response headers: {"Cache-control":"max-age=100","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache
+response source: Network
response headers: {"Cache-control":"no-store","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
@@ -586,15 +586,15 @@
response headers: {"ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache after validation
+response source: Network
response headers: {"Cache-control":"max-age=0","ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache after validation
+response source: Network
response headers: {"Cache-control":"max-age=100","ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache
+response source: Network
response headers: {"Cache-control":"no-store","ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
@@ -610,15 +610,15 @@
response headers: {"Cache-control":"no-cache","ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache after validation
+response source: Network
response headers: {"Cache-control":"max-age=0, no-cache","ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache after validation
+response source: Network
response headers: {"Cache-control":"max-age=100, no-cache","ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache after validation
+response source: Network
response headers: {"ETag":"nomatch","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
@@ -630,7 +630,7 @@
response headers: {"Cache-control":"max-age=100","ETag":"nomatch","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache
+response source: Network
response headers: {"Cache-control":"no-store","ETag":"nomatch","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
Modified: trunk/LayoutTests/http/tests/cache/disk-cache/disk-cache-vary-no-body-expected.txt (201804 => 201805)
--- trunk/LayoutTests/http/tests/cache/disk-cache/disk-cache-vary-no-body-expected.txt 2016-06-08 12:56:36 UTC (rev 201804)
+++ trunk/LayoutTests/http/tests/cache/disk-cache/disk-cache-vary-no-body-expected.txt 2016-06-08 13:37:04 UTC (rev 201805)
@@ -558,7 +558,7 @@
response headers: {"Cache-control":"max-age=100","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache
+response source: Network
response headers: {"Cache-control":"no-store","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
@@ -586,15 +586,15 @@
response headers: {"ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache after validation
+response source: Network
response headers: {"Cache-control":"max-age=0","ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache after validation
+response source: Network
response headers: {"Cache-control":"max-age=100","ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache
+response source: Network
response headers: {"Cache-control":"no-store","ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
@@ -610,15 +610,15 @@
response headers: {"Cache-control":"no-cache","ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache after validation
+response source: Network
response headers: {"Cache-control":"max-age=0, no-cache","ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache after validation
+response source: Network
response headers: {"Cache-control":"max-age=100, no-cache","ETag":"match","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache after validation
+response source: Network
response headers: {"ETag":"nomatch","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
@@ -630,7 +630,7 @@
response headers: {"Cache-control":"max-age=100","ETag":"nomatch","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
-response source: Memory cache
+response source: Network
response headers: {"Cache-control":"no-store","ETag":"nomatch","Vary":"Accept-Language"}
request headers: {"Accept-Language":"unique()"}
Modified: trunk/Source/WebCore/ChangeLog (201804 => 201805)
--- trunk/Source/WebCore/ChangeLog 2016-06-08 12:56:36 UTC (rev 201804)
+++ trunk/Source/WebCore/ChangeLog 2016-06-08 13:37:04 UTC (rev 201805)
@@ -1,3 +1,53 @@
+2016-06-08 Antti Koivisto <an...@apple.com>
+
+ WebKit memory cache doesn't respect Vary header
+ https://bugs.webkit.org/show_bug.cgi?id=71509
+ <rdar://problem/26651033>
+
+ Reviewed by Sam Weinig.
+
+ Implement Vary header support in WebCore memory cache.
+
+ The patch moves Vary header code from WebKit2 Network Cache to WebCore and uses it to
+ verify the headers for CachedResources.
+
+ * loader/cache/CachedResource.cpp:
+ (WebCore::CachedResource::failBeforeStarting):
+ (WebCore::addAdditionalRequestHeadersToRequest):
+
+ Factor into standalone function so we can use it from varyHeaderValuesMatch.
+
+ (WebCore::CachedResource::addAdditionalRequestHeaders):
+ (WebCore::CachedResource::load):
+ (WebCore::CachedResource::setResponse):
+
+ Collect the Vary header values when we receive a response.
+
+ (WebCore::CachedResource::responseReceived):
+ (WebCore::CachedResource::redirectChainAllowsReuse):
+ (WebCore::CachedResource::varyHeaderValuesMatch):
+
+ Test for Vary match.
+
+ (WebCore::CachedResource::overheadSize):
+ * loader/cache/CachedResource.h:
+ (WebCore::CachedResource::isCacheValidator):
+ (WebCore::CachedResource::resourceToRevalidate):
+ * loader/cache/CachedResourceLoader.cpp:
+ (WebCore::CachedResourceLoader::determineRevalidationPolicy):
+
+ Reload on Vary mismatch.
+
+ * platform/network/CacheValidation.cpp:
+ (WebCore::parseCacheControlDirectives):
+ (WebCore::headerValueForVary):
+ (WebCore::collectVaryingRequestHeaders):
+ (WebCore::verifyVaryingRequestHeaders):
+
+ Vary header collection and validation code moves here.
+
+ * platform/network/CacheValidation.h:
+
2016-06-08 Commit Queue <commit-qu...@webkit.org>
Unreviewed, rolling out r201800.
Modified: trunk/Source/WebCore/loader/cache/CachedResource.cpp (201804 => 201805)
--- trunk/Source/WebCore/loader/cache/CachedResource.cpp 2016-06-08 12:56:36 UTC (rev 201804)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp 2016-06-08 13:37:04 UTC (rev 201805)
@@ -182,7 +182,7 @@
error(CachedResource::LoadError);
}
-void CachedResource::addAdditionalRequestHeaders(CachedResourceLoader& cachedResourceLoader)
+static void addAdditionalRequestHeadersToRequest(ResourceRequest& request, const CachedResourceLoader& cachedResourceLoader)
{
// Note: We skip the Content-Security-Policy check here because we check
// the Content-Security-Policy at the CachedResourceLoader layer so we can
@@ -191,24 +191,30 @@
FrameLoader& frameLoader = cachedResourceLoader.frame()->loader();
String outgoingReferrer;
String outgoingOrigin;
- if (m_resourceRequest.httpReferrer().isNull()) {
+ if (request.httpReferrer().isNull()) {
outgoingReferrer = frameLoader.outgoingReferrer();
outgoingOrigin = frameLoader.outgoingOrigin();
} else {
- outgoingReferrer = m_resourceRequest.httpReferrer();
+ outgoingReferrer = request.httpReferrer();
outgoingOrigin = SecurityOrigin::createFromString(outgoingReferrer)->toString();
}
- outgoingReferrer = SecurityPolicy::generateReferrerHeader(cachedResourceLoader.document()->referrerPolicy(), m_resourceRequest.url(), outgoingReferrer);
+ auto referrerPolicy = cachedResourceLoader.document() ? cachedResourceLoader.document()->referrerPolicy() : ReferrerPolicy::Default;
+ outgoingReferrer = SecurityPolicy::generateReferrerHeader(referrerPolicy, request.url(), outgoingReferrer);
if (outgoingReferrer.isEmpty())
- m_resourceRequest.clearHTTPReferrer();
+ request.clearHTTPReferrer();
else
- m_resourceRequest.setHTTPReferrer(outgoingReferrer);
- FrameLoader::addHTTPOriginIfNeeded(m_resourceRequest, outgoingOrigin);
+ request.setHTTPReferrer(outgoingReferrer);
+ FrameLoader::addHTTPOriginIfNeeded(request, outgoingOrigin);
- frameLoader.addExtraFieldsToSubresourceRequest(m_resourceRequest);
+ frameLoader.addExtraFieldsToSubresourceRequest(request);
}
+void CachedResource::addAdditionalRequestHeaders(CachedResourceLoader& cachedResourceLoader)
+{
+ addAdditionalRequestHeadersToRequest(m_resourceRequest, cachedResourceLoader);
+}
+
void CachedResource::load(CachedResourceLoader& cachedResourceLoader, const ResourceLoaderOptions& options)
{
if (!cachedResourceLoader.frame()) {
@@ -417,6 +423,8 @@
m_response = response;
m_response.setType(m_responseType);
m_response.setRedirected(m_redirectChainCacheStatus.status != RedirectChainCacheStatus::NoRedirection);
+
+ m_varyingHeaderValues = collectVaryingRequestHeaders(m_resourceRequest, m_response, m_sessionID);
}
void CachedResource::responseReceived(const ResourceResponse& response)
@@ -765,6 +773,17 @@
return WebCore::redirectChainAllowsReuse(m_redirectChainCacheStatus, reuseExpiredRedirection);
}
+bool CachedResource::varyHeaderValuesMatch(const ResourceRequest& request, const CachedResourceLoader& cachedResourceLoader)
+{
+ if (m_varyingHeaderValues.isEmpty())
+ return true;
+
+ ResourceRequest requestWithFullHeaders(request);
+ addAdditionalRequestHeadersToRequest(requestWithFullHeaders, cachedResourceLoader);
+
+ return verifyVaryingRequestHeaders(m_varyingHeaderValues, requestWithFullHeaders, m_sessionID);
+}
+
unsigned CachedResource::overheadSize() const
{
static const int kAverageClientsHashMapSize = 384;
Modified: trunk/Source/WebCore/loader/cache/CachedResource.h (201804 => 201805)
--- trunk/Source/WebCore/loader/cache/CachedResource.h 2016-06-08 12:56:36 UTC (rev 201804)
+++ trunk/Source/WebCore/loader/cache/CachedResource.h 2016-06-08 13:37:04 UTC (rev 201805)
@@ -242,6 +242,8 @@
virtual RevalidationDecision makeRevalidationDecision(CachePolicy) const;
bool redirectChainAllowsReuse(ReuseExpiredRedirectionOrNot) const;
+ bool varyHeaderValuesMatch(const ResourceRequest&, const CachedResourceLoader&);
+
bool isCacheValidator() const { return m_resourceToRevalidate; }
CachedResource* resourceToRevalidate() const { return m_resourceToRevalidate; }
@@ -354,6 +356,8 @@
RedirectChainCacheStatus m_redirectChainCacheStatus;
+ Vector<std::pair<String, String>> m_varyingHeaderValues;
+
unsigned long m_identifierForLoadWithoutResourceLoader { 0 };
};
Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (201804 => 201805)
--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2016-06-08 12:56:36 UTC (rev 201804)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2016-06-08 13:37:04 UTC (rev 201805)
@@ -753,6 +753,9 @@
return Reload;
}
+ if (!existingResource->varyHeaderValuesMatch(request, *this))
+ return Reload;
+
auto* textDecoder = existingResource->textResourceDecoder();
if (textDecoder && !textDecoder->hasEqualEncodingForCharset(cachedResourceRequest.charset()))
return Reload;
Modified: trunk/Source/WebCore/platform/network/CacheValidation.cpp (201804 => 201805)
--- trunk/Source/WebCore/platform/network/CacheValidation.cpp 2016-06-08 12:56:36 UTC (rev 201804)
+++ trunk/Source/WebCore/platform/network/CacheValidation.cpp 2016-06-08 13:37:04 UTC (rev 201805)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -26,7 +26,12 @@
#include "config.h"
#include "CacheValidation.h"
+#include "CookiesStrategy.h"
#include "HTTPHeaderMap.h"
+#include "NetworkStorageSession.h"
+#include "PlatformCookieJar.h"
+#include "PlatformStrategies.h"
+#include "ResourceRequest.h"
#include "ResourceResponse.h"
#include <wtf/CurrentTime.h>
@@ -326,4 +331,58 @@
return result;
}
+static String headerValueForVary(const ResourceRequest& request, const String& headerName, SessionID sessionID)
+{
+ // Explicit handling for cookies is needed because they are added magically by the networking layer.
+ // FIXME: The value might have changed between making the request and retrieving the cookie here.
+ // We could fetch the cookie when making the request but that seems overkill as the case is very rare and it
+ // is a blocking operation. This should be sufficient to cover reasonable cases.
+ if (headerName == httpHeaderNameString(HTTPHeaderName::Cookie)) {
+ if (sessionID != SessionID::defaultSessionID()) {
+ // FIXME: Don't know how to get the cookie. There should be a global way to get NetworkStorageSession from sessionID.
+ return "";
+ }
+ auto& session = NetworkStorageSession::defaultStorageSession();
+ auto* cookieStrategy = platformStrategies() ? platformStrategies()->cookiesStrategy() : nullptr;
+ if (!cookieStrategy)
+ return cookieRequestHeaderFieldValue(session, request.firstPartyForCookies(), request.url());
+ return cookieStrategy->cookieRequestHeaderFieldValue(session, request.firstPartyForCookies(), request.url());
+ }
+ return request.httpHeaderField(headerName);
}
+
+Vector<std::pair<String, String>> collectVaryingRequestHeaders(const WebCore::ResourceRequest& request, const WebCore::ResourceResponse& response, SessionID sessionID)
+{
+ String varyValue = response.httpHeaderField(WebCore::HTTPHeaderName::Vary);
+ if (varyValue.isEmpty())
+ return { };
+ Vector<String> varyingHeaderNames;
+ varyValue.split(',', /*allowEmptyEntries*/ false, varyingHeaderNames);
+ Vector<std::pair<String, String>> varyingRequestHeaders;
+ varyingRequestHeaders.reserveCapacity(varyingHeaderNames.size());
+ for (auto& varyHeaderName : varyingHeaderNames) {
+ String headerName = varyHeaderName.stripWhiteSpace();
+ String headerValue = headerValueForVary(request, headerName, sessionID);
+ varyingRequestHeaders.append(std::make_pair(headerName, headerValue));
+ }
+ return varyingRequestHeaders;
+}
+
+bool verifyVaryingRequestHeaders(const Vector<std::pair<String, String>>& varyingRequestHeaders, const WebCore::ResourceRequest& request, SessionID sessionID)
+{
+ for (auto& varyingRequestHeader : varyingRequestHeaders) {
+ // FIXME: Vary: * in response would ideally trigger a cache delete instead of a store.
+ if (varyingRequestHeader.first == "*")
+ return false;
+ if (sessionID != SessionID::defaultSessionID() && varyingRequestHeader.first == httpHeaderNameString(HTTPHeaderName::Cookie)) {
+ // FIXME: See the comment in headerValueForVary.
+ return false;
+ }
+ String headerValue = headerValueForVary(request, varyingRequestHeader.first, sessionID);
+ if (headerValue != varyingRequestHeader.second)
+ return false;
+ }
+ return true;
+}
+
+}
Modified: trunk/Source/WebCore/platform/network/CacheValidation.h (201804 => 201805)
--- trunk/Source/WebCore/platform/network/CacheValidation.h 2016-06-08 12:56:36 UTC (rev 201804)
+++ trunk/Source/WebCore/platform/network/CacheValidation.h 2016-06-08 13:37:04 UTC (rev 201805)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -27,11 +27,15 @@
#define CacheValidation_h
#include "PlatformExportMacros.h"
+#include "SessionID.h"
#include <wtf/Optional.h>
+#include <wtf/Vector.h>
+#include <wtf/text/WTFString.h>
namespace WebCore {
class HTTPHeaderMap;
+class ResourceRequest;
class ResourceResponse;
struct RedirectChainCacheStatus {
@@ -65,6 +69,9 @@
};
WEBCORE_EXPORT CacheControlDirectives parseCacheControlDirectives(const HTTPHeaderMap&);
+WEBCORE_EXPORT Vector<std::pair<String, String>> collectVaryingRequestHeaders(const ResourceRequest&, const ResourceResponse&, SessionID = SessionID::defaultSessionID());
+WEBCORE_EXPORT bool verifyVaryingRequestHeaders(const Vector<std::pair<String, String>>& varyingRequestHeaders, const ResourceRequest&, SessionID = SessionID::defaultSessionID());
+
}
#endif
Modified: trunk/Source/WebKit2/ChangeLog (201804 => 201805)
--- trunk/Source/WebKit2/ChangeLog 2016-06-08 12:56:36 UTC (rev 201804)
+++ trunk/Source/WebKit2/ChangeLog 2016-06-08 13:37:04 UTC (rev 201805)
@@ -1,3 +1,25 @@
+2016-06-06 Antti Koivisto <an...@apple.com>
+
+ WebKit memory cache doesn't respect Vary header
+ https://bugs.webkit.org/show_bug.cgi?id=71509
+ <rdar://problem/26651033>
+
+ Reviewed by Sam Weinig.
+
+ * NetworkProcess/cache/NetworkCache.cpp:
+ (WebKit::NetworkCache::makeCacheKey):
+ (WebKit::NetworkCache::cachePolicyAllowsExpired):
+ (WebKit::NetworkCache::makeUseDecision):
+ (WebKit::NetworkCache::Cache::retrieve):
+ (WebKit::NetworkCache::Cache::store):
+ (WebKit::NetworkCache::Cache::storeRedirect):
+ (WebKit::NetworkCache::Cache::update):
+ (WebKit::NetworkCache::headerValueForVary): Deleted.
+ (WebKit::NetworkCache::collectVaryingRequestHeaders): Deleted.
+ (WebKit::NetworkCache::verifyVaryingRequestHeaders): Deleted.
+
+ These move to WebCore.
+
2016-06-08 Carlos Garcia Campos <cgar...@igalia.com>
Unreviewed. Fix GTK+ build with threaded compositor enabled after r201802.
Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp (201804 => 201805)
--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp 2016-06-08 12:56:36 UTC (rev 201804)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp 2016-06-08 13:37:04 UTC (rev 201805)
@@ -128,47 +128,6 @@
return { partition, resourceType(), range, request.url().string() };
}
-static String headerValueForVary(const WebCore::ResourceRequest& request, const String& headerName)
-{
- // Explicit handling for cookies is needed because they are added magically by the networking layer.
- // FIXME: The value might have changed between making the request and retrieving the cookie here.
- // We could fetch the cookie when making the request but that seems overkill as the case is very rare and it
- // is a blocking operation. This should be sufficient to cover reasonable cases.
- if (headerName == httpHeaderNameString(WebCore::HTTPHeaderName::Cookie))
- return WebCore::cookieRequestHeaderFieldValue(WebCore::NetworkStorageSession::defaultStorageSession(), request.firstPartyForCookies(), request.url());
- return request.httpHeaderField(headerName);
-}
-
-static Vector<std::pair<String, String>> collectVaryingRequestHeaders(const WebCore::ResourceRequest& request, const WebCore::ResourceResponse& response)
-{
- String varyValue = response.httpHeaderField(WebCore::HTTPHeaderName::Vary);
- if (varyValue.isEmpty())
- return { };
- Vector<String> varyingHeaderNames;
- varyValue.split(',', /*allowEmptyEntries*/ false, varyingHeaderNames);
- Vector<std::pair<String, String>> varyingRequestHeaders;
- varyingRequestHeaders.reserveCapacity(varyingHeaderNames.size());
- for (auto& varyHeaderName : varyingHeaderNames) {
- String headerName = varyHeaderName.stripWhiteSpace();
- String headerValue = headerValueForVary(request, headerName);
- varyingRequestHeaders.append(std::make_pair(headerName, headerValue));
- }
- return varyingRequestHeaders;
-}
-
-static bool verifyVaryingRequestHeaders(const Vector<std::pair<String, String>>& varyingRequestHeaders, const WebCore::ResourceRequest& request)
-{
- for (auto& varyingRequestHeader : varyingRequestHeaders) {
- // FIXME: Vary: * in response would ideally trigger a cache delete instead of a store.
- if (varyingRequestHeader.first == "*")
- return false;
- String headerValue = headerValueForVary(request, varyingRequestHeader.first);
- if (headerValue != varyingRequestHeader.second)
- return false;
- }
- return true;
-}
-
static bool cachePolicyAllowsExpired(WebCore::ResourceRequestCachePolicy policy)
{
switch (policy) {
@@ -221,7 +180,7 @@
if (request.isConditional() && !entry.redirectRequest())
return UseDecision::Validate;
- if (!verifyVaryingRequestHeaders(entry.varyingRequestHeaders(), request))
+ if (!WebCore::verifyVaryingRequestHeaders(entry.varyingRequestHeaders(), request))
return UseDecision::NoDueToVaryingHeaderMismatch;
// We never revalidate in the case of a history navigation.
@@ -374,7 +333,7 @@
#if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
if (canUseSpeculativeRevalidation && m_speculativeLoadManager->retrieve(frameID, storageKey, request, [request, completionHandler](std::unique_ptr<Entry> entry) {
- if (entry && verifyVaryingRequestHeaders(entry->varyingRequestHeaders(), request))
+ if (entry && WebCore::verifyVaryingRequestHeaders(entry->varyingRequestHeaders(), request))
completionHandler(WTFMove(entry));
else
completionHandler(nullptr);
@@ -447,7 +406,7 @@
return nullptr;
}
- auto cacheEntry = std::make_unique<Entry>(makeCacheKey(request), response, WTFMove(responseData), collectVaryingRequestHeaders(request, response));
+ auto cacheEntry = std::make_unique<Entry>(makeCacheKey(request), response, WTFMove(responseData), WebCore::collectVaryingRequestHeaders(request, response));
auto record = cacheEntry->encodeAsStorageRecord();
m_storage->store(record, [completionHandler = WTFMove(completionHandler)](const Data& bodyData) {
@@ -482,7 +441,7 @@
return nullptr;
}
- std::unique_ptr<Entry> cacheEntry = std::make_unique<Entry>(makeCacheKey(request), response, redirectRequest, collectVaryingRequestHeaders(request, response));
+ std::unique_ptr<Entry> cacheEntry = std::make_unique<Entry>(makeCacheKey(request), response, redirectRequest, WebCore::collectVaryingRequestHeaders(request, response));
auto record = cacheEntry->encodeAsStorageRecord();
@@ -498,7 +457,7 @@
WebCore::ResourceResponse response = existingEntry.response();
WebCore::updateResponseHeadersAfterRevalidation(response, validatingResponse);
- auto updateEntry = std::make_unique<Entry>(existingEntry.key(), response, existingEntry.buffer(), collectVaryingRequestHeaders(originalRequest, response));
+ auto updateEntry = std::make_unique<Entry>(existingEntry.key(), response, existingEntry.buffer(), WebCore::collectVaryingRequestHeaders(originalRequest, response));
auto updateRecord = updateEntry->encodeAsStorageRecord();
m_storage->store(updateRecord, { });