Diff
Modified: trunk/Source/WebCore/ChangeLog (201800 => 201801)
--- trunk/Source/WebCore/ChangeLog 2016-06-08 09:01:07 UTC (rev 201800)
+++ trunk/Source/WebCore/ChangeLog 2016-06-08 09:06:07 UTC (rev 201801)
@@ -1,3 +1,16 @@
+2016-06-08 Commit Queue <[email protected]>
+
+ Unreviewed, rolling out r201800.
+ https://bugs.webkit.org/show_bug.cgi?id=158518
+
+ Missing WebKit2 pieces (Requested by anttik on #webkit).
+
+ Reverted changeset:
+
+ "WebKit memory cache doesn't respect Vary header"
+ https://bugs.webkit.org/show_bug.cgi?id=71509
+ http://trac.webkit.org/changeset/201800
+
2016-06-06 Antti Koivisto <[email protected]>
WebKit memory cache doesn't respect Vary header
Modified: trunk/Source/WebCore/loader/cache/CachedResource.cpp (201800 => 201801)
--- trunk/Source/WebCore/loader/cache/CachedResource.cpp 2016-06-08 09:01:07 UTC (rev 201800)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp 2016-06-08 09:06:07 UTC (rev 201801)
@@ -182,7 +182,7 @@
error(CachedResource::LoadError);
}
-static void addAdditionalRequestHeadersToRequest(ResourceRequest& request, const CachedResourceLoader& cachedResourceLoader)
+void CachedResource::addAdditionalRequestHeaders(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,30 +191,24 @@
FrameLoader& frameLoader = cachedResourceLoader.frame()->loader();
String outgoingReferrer;
String outgoingOrigin;
- if (request.httpReferrer().isNull()) {
+ if (m_resourceRequest.httpReferrer().isNull()) {
outgoingReferrer = frameLoader.outgoingReferrer();
outgoingOrigin = frameLoader.outgoingOrigin();
} else {
- outgoingReferrer = request.httpReferrer();
+ outgoingReferrer = m_resourceRequest.httpReferrer();
outgoingOrigin = SecurityOrigin::createFromString(outgoingReferrer)->toString();
}
- auto referrerPolicy = cachedResourceLoader.document() ? cachedResourceLoader.document()->referrerPolicy() : ReferrerPolicy::Default;
- outgoingReferrer = SecurityPolicy::generateReferrerHeader(referrerPolicy, request.url(), outgoingReferrer);
+ outgoingReferrer = SecurityPolicy::generateReferrerHeader(cachedResourceLoader.document()->referrerPolicy(), m_resourceRequest.url(), outgoingReferrer);
if (outgoingReferrer.isEmpty())
- request.clearHTTPReferrer();
+ m_resourceRequest.clearHTTPReferrer();
else
- request.setHTTPReferrer(outgoingReferrer);
- FrameLoader::addHTTPOriginIfNeeded(request, outgoingOrigin);
+ m_resourceRequest.setHTTPReferrer(outgoingReferrer);
+ FrameLoader::addHTTPOriginIfNeeded(m_resourceRequest, outgoingOrigin);
- frameLoader.addExtraFieldsToSubresourceRequest(request);
+ frameLoader.addExtraFieldsToSubresourceRequest(m_resourceRequest);
}
-void CachedResource::addAdditionalRequestHeaders(CachedResourceLoader& cachedResourceLoader)
-{
- addAdditionalRequestHeadersToRequest(m_resourceRequest, cachedResourceLoader);
-}
-
void CachedResource::load(CachedResourceLoader& cachedResourceLoader, const ResourceLoaderOptions& options)
{
if (!cachedResourceLoader.frame()) {
@@ -423,8 +417,6 @@
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)
@@ -773,17 +765,6 @@
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 (201800 => 201801)
--- trunk/Source/WebCore/loader/cache/CachedResource.h 2016-06-08 09:01:07 UTC (rev 201800)
+++ trunk/Source/WebCore/loader/cache/CachedResource.h 2016-06-08 09:06:07 UTC (rev 201801)
@@ -242,8 +242,6 @@
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; }
@@ -356,8 +354,6 @@
RedirectChainCacheStatus m_redirectChainCacheStatus;
- Vector<std::pair<String, String>> m_varyingHeaderValues;
-
unsigned long m_identifierForLoadWithoutResourceLoader { 0 };
};
Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (201800 => 201801)
--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2016-06-08 09:01:07 UTC (rev 201800)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2016-06-08 09:06:07 UTC (rev 201801)
@@ -753,9 +753,6 @@
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 (201800 => 201801)
--- trunk/Source/WebCore/platform/network/CacheValidation.cpp 2016-06-08 09:01:07 UTC (rev 201800)
+++ trunk/Source/WebCore/platform/network/CacheValidation.cpp 2016-06-08 09:06:07 UTC (rev 201801)
@@ -27,9 +27,6 @@
#include "CacheValidation.h"
#include "HTTPHeaderMap.h"
-#include "NetworkStorageSession.h"
-#include "PlatformCookieJar.h"
-#include "ResourceRequest.h"
#include "ResourceResponse.h"
#include <wtf/CurrentTime.h>
@@ -329,54 +326,4 @@
return result;
}
-static String headerValueForVary(SessionID sessionID, const 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(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 "";
- }
- return cookieRequestHeaderFieldValue(NetworkStorageSession::defaultStorageSession(), 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(sessionID, request, headerName);
- 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(sessionID, request, varyingRequestHeader.first);
- if (headerValue != varyingRequestHeader.second)
- return false;
- }
- return true;
-}
-
-}
Modified: trunk/Source/WebCore/platform/network/CacheValidation.h (201800 => 201801)
--- trunk/Source/WebCore/platform/network/CacheValidation.h 2016-06-08 09:01:07 UTC (rev 201800)
+++ trunk/Source/WebCore/platform/network/CacheValidation.h 2016-06-08 09:06:07 UTC (rev 201801)
@@ -27,15 +27,11 @@
#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 {
@@ -69,9 +65,6 @@
};
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