summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/loader/cache
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-06-02 12:07:03 +0100
committerBen Murdoch <benm@google.com>2011-06-10 10:47:21 +0100
commit2daae5fd11344eaa88a0d92b0f6d65f8d2255c00 (patch)
treee4964fbd1cb70599f7718ff03e50ea1dab33890b /Source/WebCore/loader/cache
parent87bdf0060a247bfbe668342b87e0874182e0ffa9 (diff)
downloadexternal_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.zip
external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.gz
external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.bz2
Merge WebKit at r84325: Initial merge by git.
Change-Id: Ic1a909300ecc0a13ddc6b4e784371d2ac6e3d59b
Diffstat (limited to 'Source/WebCore/loader/cache')
-rw-r--r--Source/WebCore/loader/cache/CachedFont.cpp17
-rw-r--r--Source/WebCore/loader/cache/CachedFont.h3
-rw-r--r--Source/WebCore/loader/cache/CachedImage.cpp4
-rw-r--r--Source/WebCore/loader/cache/CachedResource.cpp7
-rw-r--r--Source/WebCore/loader/cache/CachedResource.h6
-rw-r--r--Source/WebCore/loader/cache/CachedResourceLoader.cpp55
-rw-r--r--Source/WebCore/loader/cache/CachedResourceLoader.h2
-rw-r--r--Source/WebCore/loader/cache/CachedResourceRequest.cpp15
8 files changed, 66 insertions, 43 deletions
diff --git a/Source/WebCore/loader/cache/CachedFont.cpp b/Source/WebCore/loader/cache/CachedFont.cpp
index ea2ee14..60f0d6c 100644
--- a/Source/WebCore/loader/cache/CachedFont.cpp
+++ b/Source/WebCore/loader/cache/CachedFont.cpp
@@ -27,7 +27,8 @@
#include "config.h"
#include "CachedFont.h"
-#if PLATFORM(CG) || PLATFORM(QT) || PLATFORM(GTK) || (PLATFORM(CHROMIUM) && (OS(WINDOWS) || OS(LINUX) || OS(FREEBSD))) || PLATFORM(HAIKU) || OS(WINCE) || PLATFORM(ANDROID) || PLATFORM(BREWMP)
+// FIXME: This should really be a blacklist instead of a whitelist
+#if USE(CG) || PLATFORM(QT) || PLATFORM(GTK) || (PLATFORM(CHROMIUM) && (OS(WINDOWS) || OS(LINUX) || OS(FREEBSD) || USE(SKIA_MAC_ON_CHROME))) || PLATFORM(HAIKU) || OS(WINCE) || PLATFORM(ANDROID) || PLATFORM(BREWMP)
#define STORE_FONT_CUSTOM_PLATFORM_DATA
#endif
@@ -58,9 +59,6 @@ CachedFont::CachedFont(const String &url)
: CachedResource(url, FontResource)
, m_fontData(0)
, m_loadInitiated(false)
-#if ENABLE(SVG_FONTS)
- , m_isSVGFont(false)
-#endif
{
}
@@ -105,9 +103,6 @@ void CachedFont::beginLoadIfNeeded(CachedResourceLoader* dl)
bool CachedFont::ensureCustomFontData()
{
#ifdef STORE_FONT_CUSTOM_PLATFORM_DATA
-#if ENABLE(SVG_FONTS)
- ASSERT(!m_isSVGFont);
-#endif
if (!m_fontData && !errorOccurred() && !isLoading() && m_data) {
m_fontData = createFontCustomPlatformData(m_data.get());
if (!m_fontData)
@@ -134,13 +129,14 @@ FontPlatformData CachedFont::platformDataFromCustomData(float size, bool bold, b
#if ENABLE(SVG_FONTS)
bool CachedFont::ensureSVGFontData()
{
- ASSERT(m_isSVGFont);
if (!m_externalSVGDocument && !errorOccurred() && !isLoading() && m_data) {
m_externalSVGDocument = SVGDocument::create(0, KURL());
RefPtr<TextResourceDecoder> decoder = TextResourceDecoder::create("application/xml");
-
- m_externalSVGDocument->setContent(decoder->decode(m_data->data(), m_data->size()) + decoder->flush());
+ String svgSource = decoder->decode(m_data->data(), m_data->size());
+ svgSource += decoder->flush();
+
+ m_externalSVGDocument->setContent(svgSource);
if (decoder->sawError())
m_externalSVGDocument = 0;
@@ -151,7 +147,6 @@ bool CachedFont::ensureSVGFontData()
SVGFontElement* CachedFont::getSVGFontById(const String& fontName) const
{
- ASSERT(m_isSVGFont);
RefPtr<NodeList> list = m_externalSVGDocument->getElementsByTagNameNS(SVGNames::fontTag.namespaceURI(), SVGNames::fontTag.localName());
if (!list)
return 0;
diff --git a/Source/WebCore/loader/cache/CachedFont.h b/Source/WebCore/loader/cache/CachedFont.h
index d677f7b..dd9d60e 100644
--- a/Source/WebCore/loader/cache/CachedFont.h
+++ b/Source/WebCore/loader/cache/CachedFont.h
@@ -68,8 +68,6 @@ public:
FontPlatformData platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation = Horizontal, TextOrientation = TextOrientationVerticalRight, FontWidthVariant = RegularWidth, FontRenderingMode = NormalRenderingMode);
#if ENABLE(SVG_FONTS)
- bool isSVGFont() const { return m_isSVGFont; }
- void setSVGFont(bool isSVG) { m_isSVGFont = isSVG; }
bool ensureSVGFontData();
SVGFontElement* getSVGFontById(const String&) const;
#endif
@@ -79,7 +77,6 @@ private:
bool m_loadInitiated;
#if ENABLE(SVG_FONTS)
- bool m_isSVGFont;
RefPtr<SVGDocument> m_externalSVGDocument;
#endif
diff --git a/Source/WebCore/loader/cache/CachedImage.cpp b/Source/WebCore/loader/cache/CachedImage.cpp
index cc49415..ba30860 100644
--- a/Source/WebCore/loader/cache/CachedImage.cpp
+++ b/Source/WebCore/loader/cache/CachedImage.cpp
@@ -40,7 +40,7 @@
#include <wtf/StdLibExtras.h>
#include <wtf/Vector.h>
-#if PLATFORM(CG)
+#if USE(CG)
#include "PDFDocumentImage.h"
#endif
@@ -244,7 +244,7 @@ inline void CachedImage::createImage()
// Create the image if it doesn't yet exist.
if (m_image)
return;
-#if PLATFORM(CG) && !USE(WEBKIT_IMAGE_DECODERS)
+#if USE(CG) && !USE(WEBKIT_IMAGE_DECODERS)
if (m_response.mimeType() == "application/pdf") {
m_image = PDFDocumentImage::create();
return;
diff --git a/Source/WebCore/loader/cache/CachedResource.cpp b/Source/WebCore/loader/cache/CachedResource.cpp
index 9413472..95f5522 100644
--- a/Source/WebCore/loader/cache/CachedResource.cpp
+++ b/Source/WebCore/loader/cache/CachedResource.cpp
@@ -62,7 +62,7 @@ static ResourceLoadPriority defaultPriorityForResourceType(CachedResource::Type
case CachedResource::ImageResource:
return ResourceLoadPriorityLow;
#if ENABLE(LINK_PREFETCH)
- case CachedResource::LinkPrefetch:
+ case CachedResource::LinkResource:
return ResourceLoadPriorityVeryLow;
#endif
}
@@ -504,10 +504,7 @@ bool CachedResource::canUseCacheValidator() const
if (m_response.cacheControlContainsNoStore())
return false;
-
- DEFINE_STATIC_LOCAL(const AtomicString, lastModifiedHeader, ("last-modified"));
- DEFINE_STATIC_LOCAL(const AtomicString, eTagHeader, ("etag"));
- return !m_response.httpHeaderField(lastModifiedHeader).isEmpty() || !m_response.httpHeaderField(eTagHeader).isEmpty();
+ return m_response.hasCacheValidatorFields();
}
bool CachedResource::mustRevalidateDueToCacheHeaders(CachePolicy cachePolicy) const
diff --git a/Source/WebCore/loader/cache/CachedResource.h b/Source/WebCore/loader/cache/CachedResource.h
index 16920a5..72b00e5 100644
--- a/Source/WebCore/loader/cache/CachedResource.h
+++ b/Source/WebCore/loader/cache/CachedResource.h
@@ -65,7 +65,7 @@ public:
, XSLStyleSheet
#endif
#if ENABLE(LINK_PREFETCH)
- , LinkPrefetch
+ , LinkResource
#endif
};
@@ -129,10 +129,10 @@ public:
void setLoading(bool b) { m_loading = b; }
virtual bool isImage() const { return false; }
- bool isPrefetch() const
+ bool isLinkResource() const
{
#if ENABLE(LINK_PREFETCH)
- return type() == LinkPrefetch;
+ return type() == LinkResource;
#else
return false;
#endif
diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.cpp b/Source/WebCore/loader/cache/CachedResourceLoader.cpp
index 9103eff..38fcee4 100644
--- a/Source/WebCore/loader/cache/CachedResourceLoader.cpp
+++ b/Source/WebCore/loader/cache/CachedResourceLoader.cpp
@@ -47,6 +47,7 @@
#include "ResourceLoadScheduler.h"
#include "SecurityOrigin.h"
#include "Settings.h"
+#include <wtf/UnusedParam.h>
#include <wtf/text/CString.h>
#include <wtf/text/StringConcatenate.h>
@@ -70,8 +71,8 @@ static CachedResource* createResource(CachedResource::Type type, const KURL& url
return new CachedXSLStyleSheet(url.string());
#endif
#if ENABLE(LINK_PREFETCH)
- case CachedResource::LinkPrefetch:
- return new CachedResource(url.string(), CachedResource::LinkPrefetch);
+ case CachedResource::LinkResource:
+ return new CachedResource(url.string(), CachedResource::LinkResource);
#endif
}
ASSERT_NOT_REACHED();
@@ -195,10 +196,10 @@ CachedXSLStyleSheet* CachedResourceLoader::requestXSLStyleSheet(const String& ur
#endif
#if ENABLE(LINK_PREFETCH)
-CachedResource* CachedResourceLoader::requestLinkPrefetch(const String& url)
+CachedResource* CachedResourceLoader::requestLinkResource(const String& url, ResourceLoadPriority priority)
{
ASSERT(frame());
- return requestResource(CachedResource::LinkPrefetch, url, String());
+ return requestResource(CachedResource::LinkResource, url, String(), priority);
}
#endif
@@ -213,7 +214,7 @@ bool CachedResourceLoader::canRequest(CachedResource::Type type, const KURL& url
case CachedResource::Script:
case CachedResource::FontResource:
#if ENABLE(LINK_PREFETCH)
- case CachedResource::LinkPrefetch:
+ case CachedResource::LinkResource:
#endif
// These types of resources can be loaded from any origin.
// FIXME: Are we sure about CachedResource::FontResource?
@@ -255,15 +256,39 @@ bool CachedResourceLoader::canRequest(CachedResource::Type type, const KURL& url
break;
}
#if ENABLE(LINK_PREFETCH)
- case CachedResource::LinkPrefetch:
+ case CachedResource::LinkResource:
// Prefetch cannot affect the current document.
break;
#endif
}
// FIXME: Consider letting the embedder block mixed content loads.
- if (type == CachedResource::Script && !m_document->contentSecurityPolicy()->allowScriptFromSource(url))
- return false;
+ switch (type) {
+ case CachedResource::Script:
+ if (!m_document->contentSecurityPolicy()->allowScriptFromSource(url))
+ return false;
+ break;
+#if ENABLE(XSLT)
+ case CachedResource::XSLStyleSheet:
+#endif
+ case CachedResource::CSSStyleSheet:
+ if (!m_document->contentSecurityPolicy()->allowStyleFromSource(url))
+ return false;
+ break;
+ case CachedResource::ImageResource:
+ if (!m_document->contentSecurityPolicy()->allowImageFromSource(url))
+ return false;
+ break;
+ case CachedResource::FontResource: {
+ if (!m_document->contentSecurityPolicy()->allowFontFromSource(url))
+ return false;
+ break;
+ }
+#if ENABLE(LINK_PREFETCH)
+ case CachedResource::LinkResource:
+ break;
+#endif
+ }
return true;
}
@@ -615,7 +640,7 @@ void CachedResourceLoader::notifyLoadedFromMemoryCache(CachedResource* resource)
void CachedResourceLoader::incrementRequestCount(const CachedResource* res)
{
- if (res->isPrefetch())
+ if (res->isLinkResource())
return;
++m_requestCount;
@@ -623,7 +648,7 @@ void CachedResourceLoader::incrementRequestCount(const CachedResource* res)
void CachedResourceLoader::decrementRequestCount(const CachedResource* res)
{
- if (res->isPrefetch())
+ if (res->isLinkResource())
return;
--m_requestCount;
@@ -639,10 +664,14 @@ int CachedResourceLoader::requestCount()
void CachedResourceLoader::preload(CachedResource::Type type, const String& url, const String& charset, bool referencedFromBody)
{
+ // FIXME: Rip this out when we are sure it is no longer necessary (even for mobile).
+ UNUSED_PARAM(referencedFromBody);
+
bool hasRendering = m_document->body() && m_document->body()->renderer();
- if (!hasRendering && (referencedFromBody || type == CachedResource::ImageResource)) {
- // Don't preload images or body resources before we have something to draw. This prevents
- // preloads from body delaying first display when bandwidth is limited.
+ bool canBlockParser = type == CachedResource::Script || type == CachedResource::CSSStyleSheet;
+ 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, url, charset };
m_pendingPreloads.append(pendingPreload);
return;
diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.h b/Source/WebCore/loader/cache/CachedResourceLoader.h
index 881ad2f..79c63b9 100644
--- a/Source/WebCore/loader/cache/CachedResourceLoader.h
+++ b/Source/WebCore/loader/cache/CachedResourceLoader.h
@@ -69,7 +69,7 @@ public:
CachedXSLStyleSheet* requestXSLStyleSheet(const String& url);
#endif
#if ENABLE(LINK_PREFETCH)
- CachedResource* requestLinkPrefetch(const String &url);
+ CachedResource* requestLinkResource(const String &url, ResourceLoadPriority priority = ResourceLoadPriorityUnresolved);
#endif
// Logs an access denied message to the console for the specified URL.
diff --git a/Source/WebCore/loader/cache/CachedResourceRequest.cpp b/Source/WebCore/loader/cache/CachedResourceRequest.cpp
index 02cf13e..9e7fe8f 100644
--- a/Source/WebCore/loader/cache/CachedResourceRequest.cpp
+++ b/Source/WebCore/loader/cache/CachedResourceRequest.cpp
@@ -42,8 +42,11 @@
namespace WebCore {
-static ResourceRequest::TargetType cachedResourceTypeToTargetType(CachedResource::Type type)
+static ResourceRequest::TargetType cachedResourceTypeToTargetType(CachedResource::Type type, ResourceLoadPriority priority)
{
+#if !ENABLE(LINK_PREFETCH)
+ UNUSED_PARAM(priority);
+#endif
switch (type) {
case CachedResource::CSSStyleSheet:
#if ENABLE(XSLT)
@@ -57,8 +60,10 @@ static ResourceRequest::TargetType cachedResourceTypeToTargetType(CachedResource
case CachedResource::ImageResource:
return ResourceRequest::TargetIsImage;
#if ENABLE(LINK_PREFETCH)
- case CachedResource::LinkPrefetch:
- return ResourceRequest::TargetIsPrefetch;
+ case CachedResource::LinkResource:
+ if (priority == ResourceLoadPriorityLowest)
+ return ResourceRequest::TargetIsPrefetch;
+ return ResourceRequest::TargetIsSubresource;
#endif
}
ASSERT_NOT_REACHED();
@@ -85,7 +90,7 @@ PassRefPtr<CachedResourceRequest> CachedResourceRequest::load(CachedResourceLoad
RefPtr<CachedResourceRequest> request = adoptRef(new CachedResourceRequest(cachedResourceLoader, resource, incremental));
ResourceRequest resourceRequest(resource->url());
- resourceRequest.setTargetType(cachedResourceTypeToTargetType(resource->type()));
+ resourceRequest.setTargetType(cachedResourceTypeToTargetType(resource->type(), resource->loadPriority()));
if (!resource->accept().isEmpty())
resourceRequest.setHTTPAccept(resource->accept());
@@ -108,7 +113,7 @@ PassRefPtr<CachedResourceRequest> CachedResourceRequest::load(CachedResourceLoad
}
#if ENABLE(LINK_PREFETCH)
- if (resource->type() == CachedResource::LinkPrefetch)
+ if (resource->type() == CachedResource::LinkResource)
resourceRequest.setHTTPHeaderField("Purpose", "prefetch");
#endif