diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2012-09-18 15:53:33 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2012-09-18 15:53:33 +0200 |
commit | 6bbb7fbbac94d0f511a7bd0cbd50854ab643bfb2 (patch) | |
tree | d9c68d1cca0b3e352f1e438561f3e504e641a08f /Source/WebCore/loader/cache | |
parent | d0424a769059c84ae20beb3c217812792ea6726b (diff) | |
download | qtwebkit-6bbb7fbbac94d0f511a7bd0cbd50854ab643bfb2.tar.gz |
Imported WebKit commit c7503cef7ecb236730d1309676ab9fc723fd061d (http://svn.webkit.org/repository/webkit/trunk@128886)
New snapshot with various build fixes
Diffstat (limited to 'Source/WebCore/loader/cache')
-rw-r--r-- | Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp | 7 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedFont.cpp | 2 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedImage.cpp | 4 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedImage.h | 2 | ||||
-rwxr-xr-x | Source/WebCore/loader/cache/CachedResource.cpp | 24 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResource.h | 1 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResourceHandle.cpp | 2 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResourceLoader.cpp | 53 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResourceLoader.h | 10 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedSVGDocument.cpp | 2 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedScript.cpp | 2 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedShader.cpp | 2 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp | 2 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/MemoryCache.cpp | 4 |
14 files changed, 77 insertions, 40 deletions
diff --git a/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp b/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp index 96432af2b..f18825f58 100644 --- a/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp +++ b/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp @@ -185,8 +185,7 @@ PassRefPtr<StyleSheetContents> CachedCSSStyleSheet::restoreParsedStyleSheet(cons void CachedCSSStyleSheet::saveParsedStyleSheet(PassRefPtr<StyleSheetContents> sheet) { ASSERT(sheet && sheet->isCacheable()); - if (m_parsedStyleSheetCache == sheet) - return; + if (m_parsedStyleSheetCache) m_parsedStyleSheetCache->removedFromMemoryCache(); m_parsedStyleSheetCache = sheet; @@ -200,8 +199,8 @@ void CachedCSSStyleSheet::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResourceCSS); CachedResource::reportMemoryUsage(memoryObjectInfo); info.addMember(m_decoder); - info.addInstrumentedMember(m_parsedStyleSheetCache); - info.addInstrumentedMember(m_decodedSheetText); + info.addMember(m_parsedStyleSheetCache); + info.addMember(m_decodedSheetText); } } diff --git a/Source/WebCore/loader/cache/CachedFont.cpp b/Source/WebCore/loader/cache/CachedFont.cpp index 4c4569ca3..d9a6752b2 100644 --- a/Source/WebCore/loader/cache/CachedFont.cpp +++ b/Source/WebCore/loader/cache/CachedFont.cpp @@ -203,7 +203,7 @@ void CachedFont::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResourceFont); CachedResource::reportMemoryUsage(memoryObjectInfo); #if ENABLE(SVG_FONTS) - info.addInstrumentedMember(m_externalSVGDocument); + info.addMember(m_externalSVGDocument); #endif #ifdef STORE_FONT_CUSTOM_PLATFORM_DATA info.addMember(m_fontData); diff --git a/Source/WebCore/loader/cache/CachedImage.cpp b/Source/WebCore/loader/cache/CachedImage.cpp index 1527a63af..fa83a54f6 100644 --- a/Source/WebCore/loader/cache/CachedImage.cpp +++ b/Source/WebCore/loader/cache/CachedImage.cpp @@ -79,7 +79,7 @@ CachedImage::~CachedImage() void CachedImage::load(CachedResourceLoader* cachedResourceLoader, const ResourceLoaderOptions& options) { - if (!cachedResourceLoader || cachedResourceLoader->autoLoadImages()) + if (!cachedResourceLoader || !cachedResourceLoader->shouldDeferImageLoad(m_resourceRequest.url())) CachedResource::load(cachedResourceLoader, options); else setLoading(false); @@ -474,7 +474,7 @@ void CachedImage::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const { MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResourceImage); CachedResource::reportMemoryUsage(memoryObjectInfo); - info.addInstrumentedMember(m_image); + info.addMember(m_image); #if ENABLE(SVG) info.addMember(m_svgImageCache); #endif diff --git a/Source/WebCore/loader/cache/CachedImage.h b/Source/WebCore/loader/cache/CachedImage.h index 4865c7e24..0c452c44a 100644 --- a/Source/WebCore/loader/cache/CachedImage.h +++ b/Source/WebCore/loader/cache/CachedImage.h @@ -82,7 +82,7 @@ public: virtual bool shouldIgnoreHTTPStatusCodeErrors() const { return true; } virtual bool isImage() const { return true; } - bool stillNeedsLoad() const { return !errorOccurred() && status() == Unknown && !isLoading(); } + virtual bool stillNeedsLoad() const OVERRIDE { return !errorOccurred() && status() == Unknown && !isLoading(); } void load(); // ImageObserver diff --git a/Source/WebCore/loader/cache/CachedResource.cpp b/Source/WebCore/loader/cache/CachedResource.cpp index 83bc8eed3..aa6c5a7fa 100755 --- a/Source/WebCore/loader/cache/CachedResource.cpp +++ b/Source/WebCore/loader/cache/CachedResource.cpp @@ -390,7 +390,7 @@ void CachedResource::didAddClient(CachedResourceClient* c) m_clients.add(c); m_clientsAwaitingCallback.remove(c); } - if (!isLoading()) + if (!isLoading() && !stillNeedsLoad()) c->notifyFinished(this); } @@ -806,18 +806,18 @@ void CachedResource::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResource); info.addMember(m_resourceRequest); info.addHashSet(m_clients); - info.addInstrumentedMember(m_accept); - info.addInstrumentedMember(m_loader); - info.addInstrumentedMember(m_response); - info.addInstrumentedMember(m_data); + info.addMember(m_accept); + info.addMember(m_loader); + info.addMember(m_response); + info.addMember(m_data); info.addMember(m_cachedMetadata); - info.addInstrumentedMember(m_nextInAllResourcesList); - info.addInstrumentedMember(m_prevInAllResourcesList); - info.addInstrumentedMember(m_nextInLiveResourcesList); - info.addInstrumentedMember(m_prevInLiveResourcesList); - info.addInstrumentedMember(m_owningCachedResourceLoader); - info.addInstrumentedMember(m_resourceToRevalidate); - info.addInstrumentedMember(m_proxyResource); + info.addMember(m_nextInAllResourcesList); + info.addMember(m_prevInAllResourcesList); + info.addMember(m_nextInLiveResourcesList); + info.addMember(m_prevInLiveResourcesList); + info.addMember(m_owningCachedResourceLoader); + info.addMember(m_resourceToRevalidate); + info.addMember(m_proxyResource); info.addInstrumentedHashSet(m_handlesToRevalidate); if (m_purgeableData && !m_purgeableData->wasPurged()) diff --git a/Source/WebCore/loader/cache/CachedResource.h b/Source/WebCore/loader/cache/CachedResource.h index 0cad3ee7c..7edafd508 100644 --- a/Source/WebCore/loader/cache/CachedResource.h +++ b/Source/WebCore/loader/cache/CachedResource.h @@ -144,6 +144,7 @@ public: bool isLoading() const { return m_loading; } void setLoading(bool b) { m_loading = b; } + virtual bool stillNeedsLoad() const { return false; } SubresourceLoader* loader() { return m_loader.get(); } diff --git a/Source/WebCore/loader/cache/CachedResourceHandle.cpp b/Source/WebCore/loader/cache/CachedResourceHandle.cpp index d95459f06..6e4964ee9 100644 --- a/Source/WebCore/loader/cache/CachedResourceHandle.cpp +++ b/Source/WebCore/loader/cache/CachedResourceHandle.cpp @@ -44,7 +44,7 @@ void CachedResourceHandleBase::setResource(CachedResource* resource) void CachedResourceHandleBase::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const { MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::MemoryCacheStructures); - info.addInstrumentedMember(m_resource); + info.addMember(m_resource); } diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.cpp b/Source/WebCore/loader/cache/CachedResourceLoader.cpp index 5fd7c505a..0e8c3f6a2 100644 --- a/Source/WebCore/loader/cache/CachedResourceLoader.cpp +++ b/Source/WebCore/loader/cache/CachedResourceLoader.cpp @@ -46,6 +46,7 @@ #include "MemoryCache.h" #include "PingLoader.h" #include "ResourceLoadScheduler.h" +#include "SchemeRegistry.h" #include "SecurityOrigin.h" #include "Settings.h" #include <wtf/UnusedParam.h> @@ -115,6 +116,7 @@ CachedResourceLoader::CachedResourceLoader(Document* document) , m_requestCount(0) , m_garbageCollectDocumentResourcesTimer(this, &CachedResourceLoader::garbageCollectDocumentResourcesTimerFired) , m_autoLoadImages(true) + , m_imagesEnabled(true) , m_allowStaleResources(false) { } @@ -160,7 +162,7 @@ CachedResourceHandle<CachedImage> CachedResourceLoader::requestImage(ResourceReq } } CachedResourceHandle<CachedImage> resource(static_cast<CachedImage*>(requestResource(CachedResource::ImageResource, request, String(), defaultCachedResourceOptions()).get())); - if (autoLoadImages() && resource && resource->stillNeedsLoad()) + if (!shouldDeferImageLoad(request.url()) && resource && resource->stillNeedsLoad()) resource->load(this, defaultCachedResourceOptions()); return resource; } @@ -362,12 +364,6 @@ bool CachedResourceLoader::canRequest(CachedResource::Type type, const KURL& url case CachedResource::ImageResource: if (!m_document->contentSecurityPolicy()->allowImageFromSource(url)) return false; - - if (frame()) { - Settings* settings = frame()->settings(); - if (!frame()->loader()->client()->allowImage(!settings || settings->areImagesEnabled(), url)) - return false; - } break; case CachedResource::FontResource: { if (!m_document->contentSecurityPolicy()->allowFontFromSource(url)) @@ -514,11 +510,11 @@ CachedResourceLoader::RevalidationPolicy CachedResourceLoader::determineRevalida { if (!existingResource) return Load; - + // We already have a preload going for this URL. if (forPreload && existingResource->isPreloaded()) return Use; - + // If the same URL has been loaded as a different type, we need to reload. if (existingResource->type() != type) { LOG(ResourceLoading, "CachedResourceLoader::determineRevalidationPolicy reloading due to type mismatch."); @@ -533,6 +529,11 @@ CachedResourceLoader::RevalidationPolicy CachedResourceLoader::determineRevalida // of things about how revalidation works that manual headers violate, so punt to Reload instead. if (request.isConditional()) return Reload; + + // Do not load from cache if images are not enabled. The load for this image will be blocked + // in requestImage. + if (existingResource->type() == CachedResource::ImageResource && !clientAllowsImage(existingResource->url())) + return Reload; // Don't reload resources while pasting. if (m_allowStaleResources) @@ -629,13 +630,41 @@ void CachedResourceLoader::setAutoLoadImages(bool enable) if (!m_autoLoadImages) return; + reloadImagesIfNotDeferred(); +} + +void CachedResourceLoader::setImagesEnabled(bool enable) +{ + if (enable == m_imagesEnabled) + return; + + m_imagesEnabled = enable; + + if (!m_imagesEnabled) + return; + + reloadImagesIfNotDeferred(); +} + +bool CachedResourceLoader::clientAllowsImage(const KURL& url) const +{ + return !frame() || frame()->loader()->client()->allowImage(m_imagesEnabled, url); +} + +bool CachedResourceLoader::shouldDeferImageLoad(const KURL& url) const +{ + return !clientAllowsImage(url) || !m_autoLoadImages; +} + +void CachedResourceLoader::reloadImagesIfNotDeferred() +{ DocumentResourceMap::iterator end = m_documentResources.end(); for (DocumentResourceMap::iterator it = m_documentResources.begin(); it != end; ++it) { CachedResource* resource = it->second.get(); if (resource->type() == CachedResource::ImageResource) { CachedImage* image = const_cast<CachedImage*>(static_cast<const CachedImage*>(resource)); - if (image->stillNeedsLoad()) + if (image->stillNeedsLoad() && !shouldDeferImageLoad(image->url())) image->load(this, defaultCachedResourceOptions()); } } @@ -883,8 +912,8 @@ void CachedResourceLoader::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::Loader); info.addHashMap(m_documentResources); for (DocumentResourceMap::const_iterator i = m_documentResources.begin(); i != m_documentResources.end(); ++i) { - info.addInstrumentedMember(i->first); - info.addInstrumentedMember(i->second); + info.addMember(i->first); + info.addMember(i->second); } info.addHashSet(m_validatedURLs); if (m_preloads) diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.h b/Source/WebCore/loader/cache/CachedResourceLoader.h index f4755c22f..21e4f391d 100644 --- a/Source/WebCore/loader/cache/CachedResourceLoader.h +++ b/Source/WebCore/loader/cache/CachedResourceLoader.h @@ -97,6 +97,10 @@ public: bool autoLoadImages() const { return m_autoLoadImages; } void setAutoLoadImages(bool); + + void setImagesEnabled(bool); + + bool shouldDeferImageLoad(const KURL&) const; CachePolicy cachePolicy() const; @@ -135,6 +139,9 @@ private: void garbageCollectDocumentResourcesTimerFired(Timer<CachedResourceLoader>*); void performPostLoadActions(); + + bool clientAllowsImage(const KURL&) const; + void reloadImagesIfNotDeferred(); HashSet<String> m_validatedURLs; mutable DocumentResourceMap m_documentResources; @@ -152,8 +159,9 @@ private: Timer<CachedResourceLoader> m_garbageCollectDocumentResourcesTimer; - // 30 bits left + // 29 bits left bool m_autoLoadImages : 1; + bool m_imagesEnabled : 1; bool m_allowStaleResources : 1; }; diff --git a/Source/WebCore/loader/cache/CachedSVGDocument.cpp b/Source/WebCore/loader/cache/CachedSVGDocument.cpp index 699b6886a..68f2fb483 100644 --- a/Source/WebCore/loader/cache/CachedSVGDocument.cpp +++ b/Source/WebCore/loader/cache/CachedSVGDocument.cpp @@ -75,7 +75,7 @@ void CachedSVGDocument::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) co { MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResourceSVG); CachedResource::reportMemoryUsage(memoryObjectInfo); - info.addInstrumentedMember(m_document); + info.addMember(m_document); info.addMember(m_decoder); } diff --git a/Source/WebCore/loader/cache/CachedScript.cpp b/Source/WebCore/loader/cache/CachedScript.cpp index 5c493397a..41fea3d44 100644 --- a/Source/WebCore/loader/cache/CachedScript.cpp +++ b/Source/WebCore/loader/cache/CachedScript.cpp @@ -123,7 +123,7 @@ void CachedScript::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const { MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResourceScript); CachedResource::reportMemoryUsage(memoryObjectInfo); - info.addInstrumentedMember(m_script); + info.addMember(m_script); info.addMember(m_decoder); #if USE(JSC) info.addMember(m_sourceProviderCache); diff --git a/Source/WebCore/loader/cache/CachedShader.cpp b/Source/WebCore/loader/cache/CachedShader.cpp index 8dc381c46..d31e267de 100644 --- a/Source/WebCore/loader/cache/CachedShader.cpp +++ b/Source/WebCore/loader/cache/CachedShader.cpp @@ -73,7 +73,7 @@ void CachedShader::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResourceShader); CachedResource::reportMemoryUsage(memoryObjectInfo); info.addMember(m_decoder); - info.addInstrumentedMember(m_shaderString); + info.addMember(m_shaderString); } } // namespace WebCore diff --git a/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp b/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp index 81e17d8cb..de6f40ea5 100644 --- a/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp +++ b/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp @@ -93,7 +93,7 @@ void CachedXSLStyleSheet::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) { MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CachedResourceXSLT); CachedResource::reportMemoryUsage(memoryObjectInfo); - info.addInstrumentedMember(m_sheet); + info.addMember(m_sheet); info.addMember(m_decoder); } diff --git a/Source/WebCore/loader/cache/MemoryCache.cpp b/Source/WebCore/loader/cache/MemoryCache.cpp index aaf852a95..66d3201eb 100644 --- a/Source/WebCore/loader/cache/MemoryCache.cpp +++ b/Source/WebCore/loader/cache/MemoryCache.cpp @@ -721,8 +721,8 @@ void MemoryCache::reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const info.addHashMap(m_resources); CachedResourceMap::const_iterator e = m_resources.end(); for (CachedResourceMap::const_iterator i = m_resources.begin(); i != e; ++i) { - info.addInstrumentedMember(i->first); - info.addInstrumentedMember(i->second); + info.addMember(i->first); + info.addMember(i->second); } info.addVector(m_allResources); info.addMember(m_liveDecodedResources); |