Modified: trunk/Source/WebCore/ChangeLog (223932 => 223933)
--- trunk/Source/WebCore/ChangeLog 2017-10-24 22:19:44 UTC (rev 223932)
+++ trunk/Source/WebCore/ChangeLog 2017-10-24 22:20:59 UTC (rev 223933)
@@ -1,3 +1,24 @@
+2017-10-24 Alex Christensen <[email protected]>
+
+ Optionally store entire ResourceRequest for ping loads
+ https://bugs.webkit.org/show_bug.cgi?id=178756
+
+ Reviewed by Tim Horton.
+
+ No change in behavior.
+ This uses less memory in the common loading case.
+ This will be needed for moving appcache loading to the Networking Process.
+ See https://bugs.webkit.org/show_bug.cgi?id=178540
+
+ * loader/cache/CachedResource.cpp:
+ (WebCore::CachedResource::load):
+ * loader/cache/CachedResource.h:
+ (WebCore::CachedResource::setOriginalRequest):
+ (WebCore::CachedResource::originalRequest const):
+ (WebCore::CachedResource::setOriginalRequestHeaders): Deleted.
+ * loader/cache/CachedResourceLoader.cpp:
+ (WebCore::CachedResourceLoader::requestResource):
+
2017-10-24 Andy Estes <[email protected]>
[WebIDL] Support the ExportMacro attribute for dictionaries
Modified: trunk/Source/WebCore/loader/cache/CachedResource.cpp (223932 => 223933)
--- trunk/Source/WebCore/loader/cache/CachedResource.cpp 2017-10-24 22:19:44 UTC (rev 223932)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp 2017-10-24 22:20:59 UTC (rev 223933)
@@ -269,7 +269,7 @@
}
// FIXME: We should not special-case Beacon here.
if (shouldUsePingLoad(type())) {
- ASSERT(m_originalRequestHeaders);
+ ASSERT(m_originalRequest);
CachedResourceHandle<CachedResource> protectedThis(this);
// FIXME: Move beacon loads to normal subresource loading to get normal inspector request instrumentation hooks.
@@ -276,7 +276,7 @@
unsigned long identifier = frame.page()->progress().createUniqueIdentifier();
InspectorInstrumentation::willSendRequestOfType(&frame, identifier, frameLoader.activeDocumentLoader(), request, InspectorInstrumentation::LoadType::Beacon);
- platformStrategies()->loaderStrategy()->startPingLoad(frame, request, *m_originalRequestHeaders, m_options, [this, protectedThis = WTFMove(protectedThis), protectedFrame = makeRef(frame), identifier] (const ResourceError& error, const ResourceResponse& response) {
+ platformStrategies()->loaderStrategy()->startPingLoad(frame, request, m_originalRequest->httpHeaderFields(), m_options, [this, protectedThis = WTFMove(protectedThis), protectedFrame = makeRef(frame), identifier] (const ResourceError& error, const ResourceResponse& response) {
if (!response.isNull())
InspectorInstrumentation::didReceiveResourceResponse(protectedFrame, identifier, protectedFrame->loader().activeDocumentLoader(), response, nullptr);
if (error.isNull()) {
Modified: trunk/Source/WebCore/loader/cache/CachedResource.h (223932 => 223933)
--- trunk/Source/WebCore/loader/cache/CachedResource.h 2017-10-24 22:19:44 UTC (rev 223932)
+++ trunk/Source/WebCore/loader/cache/CachedResource.h 2017-10-24 22:20:59 UTC (rev 223933)
@@ -283,7 +283,8 @@
unsigned long identifierForLoadWithoutResourceLoader() const { return m_identifierForLoadWithoutResourceLoader; }
static ResourceLoadPriority defaultPriorityForResourceType(Type);
- void setOriginalRequestHeaders(std::optional<HTTPHeaderMap>&& originalRequestHeaders) { m_originalRequestHeaders = WTFMove(originalRequestHeaders); }
+ void setOriginalRequest(std::unique_ptr<ResourceRequest>&& originalRequest) { m_originalRequest = WTFMove(originalRequest); }
+ const std::unique_ptr<ResourceRequest>& originalRequest() const { return m_originalRequest; }
protected:
// CachedResource constructor that may be used when the CachedResource can already be filled with response data.
@@ -300,7 +301,7 @@
// FIXME: Make the rest of these data members private and use functions in derived classes instead.
HashCountedSet<CachedResourceClient*> m_clients;
ResourceRequest m_resourceRequest;
- std::optional<HTTPHeaderMap> m_originalRequestHeaders; // Needed by Ping loads.
+ std::unique_ptr<ResourceRequest> m_originalRequest; // Needed by Ping loads.
RefPtr<SubresourceLoader> m_loader;
ResourceLoaderOptions m_options;
ResourceResponse m_response;
Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (223932 => 223933)
--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2017-10-24 22:19:44 UTC (rev 223932)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2017-10-24 22:20:59 UTC (rev 223933)
@@ -713,9 +713,9 @@
ResourceErrorOr<CachedResourceHandle<CachedResource>> CachedResourceLoader::requestResource(CachedResource::Type type, CachedResourceRequest&& request, ForPreload forPreload, DeferOption defer)
{
- std::optional<HTTPHeaderMap> originalRequestHeaders;
+ std::unique_ptr<ResourceRequest> originalRequest;
if (CachedResource::shouldUsePingLoad(type))
- originalRequestHeaders = request.resourceRequest().httpHeaderFields();
+ originalRequest = std::make_unique<ResourceRequest>(request.resourceRequest());
if (Document* document = this->document())
request.upgradeInsecureRequestIfNeeded(*document);
@@ -860,7 +860,7 @@
break;
}
ASSERT(resource);
- resource->setOriginalRequestHeaders(WTFMove(originalRequestHeaders));
+ resource->setOriginalRequest(WTFMove(originalRequest));
if (forPreload == ForPreload::No && resource->loader() && resource->ignoreForRequestCount()) {
resource->setIgnoreForRequestCount(false);