Diff
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog (220687 => 220688)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog 2017-08-14 15:09:26 UTC (rev 220687)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog 2017-08-14 15:25:19 UTC (rev 220688)
@@ -1,3 +1,33 @@
+2017-08-13 Chris Dumez <cdu...@apple.com>
+
+ Drop non-const getter for CachedResource::resourceRequest()
+ https://bugs.webkit.org/show_bug.cgi?id=175524
+
+ Reviewed by Youenn Fablet.
+
+ Drop non-const getter for CachedResource::resourceRequest(). It would be unsafe to modify the request of a CachedResource
+ after it has been cached. Exposing such a getter is therefore a footgun.
+
+ * loader/LinkLoader.cpp:
+ (WebCore::LinkLoader::preloadIfNeeded):
+ * loader/cache/CachedImage.cpp:
+ (WebCore::CachedImage::CachedImage):
+ * loader/cache/CachedImage.h:
+ * loader/cache/CachedResource.cpp:
+ (WebCore::CachedResource::CachedResource):
+ * loader/cache/CachedResource.h:
+ (WebCore::CachedResource::resourceRequest const):
+ (WebCore::CachedResource::ignoreForRequestCount const):
+ (WebCore::CachedResource::setIgnoreForRequestCount):
+ * loader/cache/CachedResourceLoader.cpp:
+ (WebCore::CachedResourceLoader::requestResource):
+ * loader/cache/CachedResourceRequest.h:
+ (WebCore::CachedResourceRequest::ignoreForRequestCount const):
+ (WebCore::CachedResourceRequest::setIgnoreForRequestCount):
+ * loader/cache/MemoryCache.cpp:
+ (WebCore::MemoryCache::addImageToCache):
+ * platform/network/ResourceRequestBase.h:
+
2017-08-13 Adrian Perez de Castro <ape...@igalia.com>
[WPE] Implement WebCore::standardUserAgent()
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/LinkLoader.cpp (220687 => 220688)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/LinkLoader.cpp 2017-08-14 15:09:26 UTC (rev 220687)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/LinkLoader.cpp 2017-08-14 15:25:19 UTC (rev 220688)
@@ -223,10 +223,9 @@
if (!isSupportedType(type.value(), mimeType))
return nullptr;
- ResourceRequest resourceRequest(document.completeURL(href));
- resourceRequest.setIgnoreForRequestCount(true);
- CachedResourceRequest linkRequest(WTFMove(resourceRequest), CachedResourceLoader::defaultCachedResourceOptions(), CachedResource::defaultPriorityForResourceType(type.value()));
+ CachedResourceRequest linkRequest(document.completeURL(href), CachedResourceLoader::defaultCachedResourceOptions(), CachedResource::defaultPriorityForResourceType(type.value()));
linkRequest.setInitiator("link");
+ linkRequest.setIgnoreForRequestCount(true);
linkRequest.setIsLinkPreload();
linkRequest.setAsPotentiallyCrossOrigin(crossOriginMode, document);
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedImage.cpp (220687 => 220688)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedImage.cpp 2017-08-14 15:09:26 UTC (rev 220687)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedImage.cpp 2017-08-14 15:25:19 UTC (rev 220688)
@@ -67,11 +67,13 @@
{
}
-CachedImage::CachedImage(const URL& url, Image* image, SessionID sessionID)
+CachedImage::CachedImage(const URL& url, Image* image, SessionID sessionID, const String& domainForCachePartition)
: CachedResource(url, ImageResource, sessionID)
, m_image(image)
, m_isManuallyCached(true)
{
+ m_resourceRequest.setDomainForCachePartition(domainForCachePartition);
+
// Use the incoming URL in the response field. This ensures that code using the response directly,
// such as origin checks for security, actually see something.
m_response.setURL(url);
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedImage.h (220687 => 220688)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedImage.h 2017-08-14 15:09:26 UTC (rev 220687)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedImage.h 2017-08-14 15:25:19 UTC (rev 220688)
@@ -50,7 +50,7 @@
CachedImage(CachedResourceRequest&&, SessionID);
CachedImage(Image*, SessionID);
// Constructor to use for manually cached images.
- CachedImage(const URL&, Image*, SessionID);
+ CachedImage(const URL&, Image*, SessionID, const String& domainForCachePartition);
virtual ~CachedImage();
WEBCORE_EXPORT Image* image(); // Returns the nullImage() if the image is not available yet.
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedResource.cpp (220687 => 220688)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedResource.cpp 2017-08-14 15:09:26 UTC (rev 220687)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedResource.cpp 2017-08-14 15:25:19 UTC (rev 220688)
@@ -128,6 +128,7 @@
, m_isLinkPreload(request.isLinkPreload())
, m_hasUnknownEncoding(request.isLinkPreload())
, m_type(type)
+ , m_ignoreForRequestCount(request.ignoreForRequestCount())
{
ASSERT(sessionID.isValid());
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedResource.h (220687 => 220688)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedResource.h 2017-08-14 15:09:26 UTC (rev 220687)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedResource.h 2017-08-14 15:25:19 UTC (rev 220688)
@@ -113,7 +113,6 @@
virtual bool shouldIgnoreHTTPStatusCodeErrors() const { return false; }
const ResourceRequest& resourceRequest() const { return m_resourceRequest; }
- ResourceRequest& resourceRequest() { return m_resourceRequest; }
const URL& url() const { return m_resourceRequest.url();}
const String& cachePartition() const { return m_resourceRequest.cachePartition(); }
SessionID sessionID() const { return m_sessionID; }
@@ -164,9 +163,11 @@
bool isImage() const { return type() == ImageResource; }
// FIXME: CachedRawResource could be a main resource, an audio/video resource, or a raw XHR/icon resource.
bool isMainOrMediaOrIconOrRawResource() const { return type() == MainResource || type() == MediaResource || type() == Icon || type() == RawResource; }
+
+ // Whether this request should impact request counting and delay window.onload.
bool ignoreForRequestCount() const
{
- return m_resourceRequest.ignoreForRequestCount()
+ return m_ignoreForRequestCount
|| type() == MainResource
#if ENABLE(LINK_PREFETCH)
|| type() == LinkPrefetch
@@ -176,6 +177,8 @@
|| type() == RawResource;
}
+ void setIgnoreForRequestCount(bool ignoreForRequestCount) { m_ignoreForRequestCount = ignoreForRequestCount; }
+
unsigned accessCount() const { return m_accessCount; }
void increaseAccessCount() { m_accessCount++; }
@@ -370,6 +373,7 @@
Vector<std::pair<String, String>> m_varyingHeaderValues;
unsigned long m_identifierForLoadWithoutResourceLoader { 0 };
+ bool m_ignoreForRequestCount { false };
};
class CachedResource::Callback {
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedResourceLoader.cpp (220687 => 220688)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2017-08-14 15:09:26 UTC (rev 220687)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2017-08-14 15:25:19 UTC (rev 220688)
@@ -817,8 +817,8 @@
if (!resource)
return nullptr;
- if (forPreload == ForPreload::No && resource->loader() && resource->resourceRequest().ignoreForRequestCount()) {
- resource->resourceRequest().setIgnoreForRequestCount(false);
+ if (forPreload == ForPreload::No && resource->loader() && resource->ignoreForRequestCount()) {
+ resource->setIgnoreForRequestCount(false);
incrementRequestCount(*resource);
}
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedResourceRequest.h (220687 => 220688)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedResourceRequest.h 2017-08-14 15:09:26 UTC (rev 220687)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/CachedResourceRequest.h 2017-08-14 15:25:19 UTC (rev 220688)
@@ -63,6 +63,10 @@
bool allowsCaching() const { return m_options.cachingPolicy == CachingPolicy::AllowCaching; }
void setCachingPolicy(CachingPolicy policy) { m_options.cachingPolicy = policy; }
+ // Whether this request should impact request counting and delay window.onload.
+ bool ignoreForRequestCount() const { return m_ignoreForRequestCount; }
+ void setIgnoreForRequestCount(bool ignoreForRequestCount) { m_ignoreForRequestCount = ignoreForRequestCount; }
+
void setAsPotentiallyCrossOrigin(const String&, Document&);
void updateForAccessControl(Document&);
@@ -98,6 +102,7 @@
RefPtr<SecurityOrigin> m_origin;
String m_fragmentIdentifier;
bool m_isLinkPreload { false };
+ bool m_ignoreForRequestCount { false };
};
void upgradeInsecureResourceRequestIfNeeded(ResourceRequest&, Document&);
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/MemoryCache.cpp (220687 => 220688)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/MemoryCache.cpp 2017-08-14 15:09:26 UTC (rev 220687)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/loader/cache/MemoryCache.cpp 2017-08-14 15:25:19 UTC (rev 220688)
@@ -217,11 +217,10 @@
if (!bitmapImage)
return false;
- auto cachedImage = std::make_unique<CachedImage>(url, bitmapImage.get(), sessionID);
+ auto cachedImage = std::make_unique<CachedImage>(url, bitmapImage.get(), sessionID, domainForCachePartition);
cachedImage->addClient(dummyCachedImageClient());
cachedImage->setDecodedSize(bitmapImage->decodedSize());
- cachedImage->resourceRequest().setDomainForCachePartition(domainForCachePartition);
return add(*cachedImage.release());
}
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/platform/network/ResourceRequestBase.h (220687 => 220688)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/platform/network/ResourceRequestBase.h 2017-08-14 15:09:26 UTC (rev 220687)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/platform/network/ResourceRequestBase.h 2017-08-14 15:25:19 UTC (rev 220688)
@@ -148,10 +148,6 @@
bool hiddenFromInspector() const { return m_hiddenFromInspector; }
void setHiddenFromInspector(bool hiddenFromInspector) { m_hiddenFromInspector = hiddenFromInspector; }
- // Whether this request should impact request counting and delay window.onload.
- bool ignoreForRequestCount() const { return m_ignoreForRequestCount; }
- void setIgnoreForRequestCount(bool ignoreForRequestCount) { m_ignoreForRequestCount = ignoreForRequestCount; }
-
enum class Requester { Unspecified, Main, XHR, Fetch, Media };
Requester requester() const { return m_requester; }
void setRequester(Requester requester) { m_requester = requester; }
@@ -222,7 +218,6 @@
mutable bool m_resourceRequestBodyUpdated { false };
mutable bool m_platformRequestBodyUpdated { false };
bool m_hiddenFromInspector { false };
- bool m_ignoreForRequestCount { false };
ResourceLoadPriority m_priority { ResourceLoadPriority::Low };
Requester m_requester { Requester::Unspecified };
String m_initiatorIdentifier;