Modified: trunk/Source/WebCore/ChangeLog (136254 => 136255)
--- trunk/Source/WebCore/ChangeLog 2012-11-30 18:47:23 UTC (rev 136254)
+++ trunk/Source/WebCore/ChangeLog 2012-11-30 19:17:45 UTC (rev 136255)
@@ -1,3 +1,25 @@
+2012-11-30 James Simonsen <[email protected]>
+
+ Remember the CachedResourceRequest for preloads
+ https://bugs.webkit.org/show_bug.cgi?id=102995
+
+ Reviewed by Tony Gentilcore.
+
+ Without this, the initiator is lost.
+
+ Tests: http/tests/w3c/webperf/submission/resource-timing
+
+ * loader/cache/CachedResourceLoader.cpp:
+ (WebCore::CachedResourceLoader::requestResource):
+ (WebCore::CachedResourceLoader::loadResource):
+ (WebCore::CachedResourceLoader::preload):
+ (WebCore::CachedResourceLoader::checkForPendingPreloads):
+ (WebCore::CachedResourceLoader::requestPreload):
+ (WebCore::CachedResourceLoader::isPreloaded):
+ * loader/cache/CachedResourceLoader.h:
+ (CachedResourceLoader):
+ (PendingPreload):
+
2012-11-30 Michelangelo De Simone <[email protected]>
[CSS Shaders] Clamp input colors before blending
Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (136254 => 136255)
--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2012-11-30 18:47:23 UTC (rev 136254)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2012-11-30 19:17:45 UTC (rev 136255)
@@ -446,7 +446,7 @@
memoryCache()->remove(resource.get());
// Fall through
case Load:
- resource = loadResource(type, request.mutableResourceRequest(), request.charset());
+ resource = loadResource(type, request, request.charset());
break;
case Revalidate:
resource = revalidateResource(resource.get());
@@ -500,14 +500,14 @@
return newResource;
}
-CachedResourceHandle<CachedResource> CachedResourceLoader::loadResource(CachedResource::Type type, ResourceRequest& request, const String& charset)
+CachedResourceHandle<CachedResource> CachedResourceLoader::loadResource(CachedResource::Type type, CachedResourceRequest& request, const String& charset)
{
- ASSERT(!memoryCache()->resourceForURL(request.url()));
-
- LOG(ResourceLoading, "Loading CachedResource for '%s'.", request.url().string().latin1().data());
-
- CachedResourceHandle<CachedResource> resource = createResource(type, request, charset);
-
+ ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url()));
+
+ LOG(ResourceLoading, "Loading CachedResource for '%s'.", request.resourceRequest().url().string().latin1().data());
+
+ CachedResourceHandle<CachedResource> resource = createResource(type, request.mutableResourceRequest(), charset);
+
if (!memoryCache()->add(resource.get()))
resource->setOwningCachedResourceLoader(this);
return resource;
@@ -783,12 +783,12 @@
if (!hasRendering && !canBlockParser) {
// Don't preload subresources that can't block the parser before we have something to draw.
// This helps prevent preloads from delaying first display when bandwidth is limited.
- PendingPreload pendingPreload = { type, request.resourceRequest(), charset };
+ PendingPreload pendingPreload = { type, request, charset };
m_pendingPreloads.append(pendingPreload);
return;
}
}
- requestPreload(type, request.mutableResourceRequest(), charset);
+ requestPreload(type, request, charset);
}
void CachedResourceLoader::checkForPendingPreloads()
@@ -798,22 +798,22 @@
while (!m_pendingPreloads.isEmpty()) {
PendingPreload preload = m_pendingPreloads.takeFirst();
// Don't request preload if the resource already loaded normally (this will result in double load if the page is being reloaded with cached results ignored).
- if (!cachedResource(preload.m_request.url()))
+ if (!cachedResource(preload.m_request.resourceRequest().url()))
requestPreload(preload.m_type, preload.m_request, preload.m_charset);
}
m_pendingPreloads.clear();
}
-void CachedResourceLoader::requestPreload(CachedResource::Type type, ResourceRequest& request, const String& charset)
+void CachedResourceLoader::requestPreload(CachedResource::Type type, CachedResourceRequest& request, const String& charset)
{
String encoding;
if (type == CachedResource::Script || type == CachedResource::CSSStyleSheet)
encoding = charset.isEmpty() ? m_document->charset() : charset;
- CachedResourceRequest cachedResourceRequest(request, encoding);
- cachedResourceRequest.setForPreload(true);
+ request.setCharset(encoding);
+ request.setForPreload(true);
- CachedResourceHandle<CachedResource> resource = requestResource(type, cachedResourceRequest);
+ CachedResourceHandle<CachedResource> resource = requestResource(type, request);
if (!resource || (m_preloads && m_preloads->contains(resource.get())))
return;
resource->increasePreloadCount();
@@ -843,7 +843,7 @@
Deque<PendingPreload>::const_iterator dequeEnd = m_pendingPreloads.end();
for (Deque<PendingPreload>::const_iterator it = m_pendingPreloads.begin(); it != dequeEnd; ++it) {
PendingPreload pendingPreload = *it;
- if (pendingPreload.m_request.url() == url)
+ if (pendingPreload.m_request.resourceRequest().url() == url)
return true;
}
return false;
Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.h (136254 => 136255)
--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.h 2012-11-30 18:47:23 UTC (rev 136254)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.h 2012-11-30 19:17:45 UTC (rev 136255)
@@ -144,8 +144,8 @@
CachedResourceHandle<CachedResource> requestResource(CachedResource::Type, CachedResourceRequest&);
CachedResourceHandle<CachedResource> revalidateResource(CachedResource*);
- CachedResourceHandle<CachedResource> loadResource(CachedResource::Type, ResourceRequest&, const String& charset);
- void requestPreload(CachedResource::Type, ResourceRequest&, const String& charset);
+ CachedResourceHandle<CachedResource> loadResource(CachedResource::Type, CachedResourceRequest&, const String& charset);
+ void requestPreload(CachedResource::Type, CachedResourceRequest&, const String& charset);
enum RevalidationPolicy { Use, Revalidate, Reload, Load };
RevalidationPolicy determineRevalidationPolicy(CachedResource::Type, ResourceRequest&, bool forPreload, CachedResource* existingResource, CachedResourceRequest::DeferOption) const;
@@ -169,7 +169,7 @@
OwnPtr<ListHashSet<CachedResource*> > m_preloads;
struct PendingPreload {
CachedResource::Type m_type;
- ResourceRequest m_request;
+ CachedResourceRequest m_request;
String m_charset;
};
Deque<PendingPreload> m_pendingPreloads;