diff options
author | Ben Murdoch <benm@google.com> | 2011-06-02 12:07:03 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-06-10 10:47:21 +0100 |
commit | 2daae5fd11344eaa88a0d92b0f6d65f8d2255c00 (patch) | |
tree | e4964fbd1cb70599f7718ff03e50ea1dab33890b /Source/WebCore/loader/cache | |
parent | 87bdf0060a247bfbe668342b87e0874182e0ffa9 (diff) | |
download | external_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.cpp | 17 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedFont.h | 3 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedImage.cpp | 4 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResource.cpp | 7 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResource.h | 6 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResourceLoader.cpp | 55 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResourceLoader.h | 2 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResourceRequest.cpp | 15 |
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 |