diff options
Diffstat (limited to 'Source/WebCore/loader/cache')
-rw-r--r-- | Source/WebCore/loader/cache/CachedFont.cpp | 4 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedFont.h | 3 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedImage.cpp | 3 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResource.cpp | 10 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResource.h | 3 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResourceLoader.cpp | 32 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResourceLoader.h | 10 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResourceRequest.cpp | 1 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedScript.cpp | 16 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedScript.h | 3 |
10 files changed, 67 insertions, 18 deletions
diff --git a/Source/WebCore/loader/cache/CachedFont.cpp b/Source/WebCore/loader/cache/CachedFont.cpp index fe3281e..19eb3ba 100644 --- a/Source/WebCore/loader/cache/CachedFont.cpp +++ b/Source/WebCore/loader/cache/CachedFont.cpp @@ -117,7 +117,7 @@ bool CachedFont::ensureCustomFontData() return m_fontData; } -FontPlatformData CachedFont::platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation orientation, FontRenderingMode renderingMode) +FontPlatformData CachedFont::platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation orientation, FontWidthVariant widthVariant, FontRenderingMode renderingMode) { #if ENABLE(SVG_FONTS) if (m_externalSVGDocument) @@ -125,7 +125,7 @@ FontPlatformData CachedFont::platformDataFromCustomData(float size, bool bold, b #endif #ifdef STORE_FONT_CUSTOM_PLATFORM_DATA ASSERT(m_fontData); - return m_fontData->fontPlatformData(static_cast<int>(size), bold, italic, orientation, renderingMode); + return m_fontData->fontPlatformData(static_cast<int>(size), bold, italic, orientation, widthVariant, renderingMode); #else return FontPlatformData(); #endif diff --git a/Source/WebCore/loader/cache/CachedFont.h b/Source/WebCore/loader/cache/CachedFont.h index 5814087..cdc32ba 100644 --- a/Source/WebCore/loader/cache/CachedFont.h +++ b/Source/WebCore/loader/cache/CachedFont.h @@ -29,6 +29,7 @@ #include "CachedResource.h" #include "FontOrientation.h" #include "FontRenderingMode.h" +#include "FontWidthVariant.h" #include <wtf/Vector.h> #if ENABLE(SVG_FONTS) @@ -63,7 +64,7 @@ public: void beginLoadIfNeeded(CachedResourceLoader* dl); bool ensureCustomFontData(); - FontPlatformData platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation = Horizontal, FontRenderingMode = NormalRenderingMode); + FontPlatformData platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation = Horizontal, FontWidthVariant = RegularWidth, FontRenderingMode = NormalRenderingMode); #if ENABLE(SVG_FONTS) bool isSVGFont() const { return m_isSVGFont; } diff --git a/Source/WebCore/loader/cache/CachedImage.cpp b/Source/WebCore/loader/cache/CachedImage.cpp index 7d9ce3d..057b8ea 100644 --- a/Source/WebCore/loader/cache/CachedImage.cpp +++ b/Source/WebCore/loader/cache/CachedImage.cpp @@ -103,8 +103,7 @@ void CachedImage::didAddClient(CachedResourceClient* c) if (m_image && !m_image->isNull()) c->imageChanged(this); - if (!isLoading()) - c->notifyFinished(this); + CachedResource::didAddClient(c); } void CachedImage::allClientsRemoved() diff --git a/Source/WebCore/loader/cache/CachedResource.cpp b/Source/WebCore/loader/cache/CachedResource.cpp index 06b3131..0f9ff45 100644 --- a/Source/WebCore/loader/cache/CachedResource.cpp +++ b/Source/WebCore/loader/cache/CachedResource.cpp @@ -93,8 +93,8 @@ CachedResource::CachedResource(const String& url, Type type) , m_loading(false) , m_type(type) , m_status(Pending) -#ifndef NDEBUG , m_deleted(false) +#ifndef NDEBUG , m_lruIndex(0) #endif , m_nextInAllResourcesList(0) @@ -117,8 +117,14 @@ CachedResource::~CachedResource() ASSERT(!inCache()); ASSERT(!m_deleted); ASSERT(url().isNull() || memoryCache()->resourceForURL(KURL(ParsedURLString, url())) != this); -#ifndef NDEBUG + + if (m_deleted) { + // FIXME: Remove when http://webkit.org/b/53045 is fixed. + CRASH(); + } + m_deleted = true; +#ifndef NDEBUG cachedResourceLeakCounter.decrement(); #endif diff --git a/Source/WebCore/loader/cache/CachedResource.h b/Source/WebCore/loader/cache/CachedResource.h index 5c8b38f..3379f8c 100644 --- a/Source/WebCore/loader/cache/CachedResource.h +++ b/Source/WebCore/loader/cache/CachedResource.h @@ -266,8 +266,9 @@ private: unsigned m_type : 3; // Type unsigned m_status : 3; // Status -#ifndef NDEBUG + // FIXME: Move m_deleted back inside NDEBUG when http://webkit.org/b/53045 is fixed. bool m_deleted; +#ifndef NDEBUG unsigned m_lruIndex; #endif diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.cpp b/Source/WebCore/loader/cache/CachedResourceLoader.cpp index de02758..211ab85 100644 --- a/Source/WebCore/loader/cache/CachedResourceLoader.cpp +++ b/Source/WebCore/loader/cache/CachedResourceLoader.cpp @@ -80,9 +80,13 @@ static CachedResource* createResource(CachedResource::Type type, const KURL& url CachedResourceLoader::CachedResourceLoader(Document* document) : m_document(document) , m_requestCount(0) +<<<<<<< HEAD #ifdef ANDROID_BLOCK_NETWORK_IMAGE , m_blockNetworkImage(false) #endif +======= + , m_loadDoneActionTimer(this, &CachedResourceLoader::loadDoneActionTimerFired) +>>>>>>> webkit.org at r78450 , m_autoLoadImages(true) , m_loadFinishing(false) , m_allowStaleResources(false) @@ -566,6 +570,25 @@ void CachedResourceLoader::loadDone(CachedResourceRequest* request) m_requests.remove(request); if (frame()) frame()->loader()->loadDone(); + + if (!request) { + // If the request passed to this function is null, loadDone finished synchronously from when + // the load was started, so we want to kick off our next set of loads (via checkForPendingPreloads + // and servePendingRequests) asynchronously. + m_loadDoneActionTimer.startOneShot(0); + return; + } + + performPostLoadActions(); +} + +void CachedResourceLoader::loadDoneActionTimerFired(Timer<CachedResourceLoader>*) +{ + performPostLoadActions(); +} + +void CachedResourceLoader::performPostLoadActions() +{ checkForPendingPreloads(); resourceLoadScheduler()->servePendingRequests(); } @@ -630,11 +653,10 @@ void CachedResourceLoader::preload(CachedResource::Type type, const String& url, void CachedResourceLoader::checkForPendingPreloads() { - unsigned count = m_pendingPreloads.size(); - if (!count || !m_document->body() || !m_document->body()->renderer()) + if (m_pendingPreloads.isEmpty() || !m_document->body() || !m_document->body()->renderer()) return; - for (unsigned i = 0; i < count; ++i) { - PendingPreload& preload = m_pendingPreloads[i]; + 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(m_document->completeURL(preload.m_url))) requestPreload(preload.m_type, preload.m_url, preload.m_charset); @@ -646,7 +668,7 @@ void CachedResourceLoader::requestPreload(CachedResource::Type type, const Strin { String encoding; if (type == CachedResource::Script || type == CachedResource::CSSStyleSheet) - encoding = charset.isEmpty() ? m_document->frame()->loader()->writer()->encoding() : charset; + encoding = charset.isEmpty() ? m_document->charset() : charset; CachedResource* resource = requestResource(type, url, encoding, ResourceLoadPriorityUnresolved, true); if (!resource || (m_preloads && m_preloads->contains(resource))) diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.h b/Source/WebCore/loader/cache/CachedResourceLoader.h index 4f67e72..bd2bfec 100644 --- a/Source/WebCore/loader/cache/CachedResourceLoader.h +++ b/Source/WebCore/loader/cache/CachedResourceLoader.h @@ -30,6 +30,8 @@ #include "CachedResourceHandle.h" #include "CachePolicy.h" #include "ResourceLoadPriority.h" +#include "Timer.h" +#include <wtf/Deque.h> #include <wtf/HashMap.h> #include <wtf/HashSet.h> #include <wtf/ListHashSet.h> @@ -123,6 +125,10 @@ private: void notifyLoadedFromMemoryCache(CachedResource*); bool canRequest(CachedResource::Type, const KURL&); + + void loadDoneActionTimerFired(Timer<CachedResourceLoader>*); + + void performPostLoadActions(); HashSet<String> m_validatedURLs; mutable DocumentResourceMap m_documentResources; @@ -139,7 +145,9 @@ private: String m_url; String m_charset; }; - Vector<PendingPreload> m_pendingPreloads; + Deque<PendingPreload> m_pendingPreloads; + + Timer<CachedResourceLoader> m_loadDoneActionTimer; //29 bits left #ifdef ANDROID_BLOCK_NETWORK_IMAGE diff --git a/Source/WebCore/loader/cache/CachedResourceRequest.cpp b/Source/WebCore/loader/cache/CachedResourceRequest.cpp index d5e1adf..1d2f706 100644 --- a/Source/WebCore/loader/cache/CachedResourceRequest.cpp +++ b/Source/WebCore/loader/cache/CachedResourceRequest.cpp @@ -113,6 +113,7 @@ PassRefPtr<CachedResourceRequest> CachedResourceRequest::load(CachedResourceLoad #endif ResourceLoadPriority priority = resource->loadPriority(); + resourceRequest.setPriority(priority); RefPtr<SubresourceLoader> loader = resourceLoadScheduler()->scheduleSubresourceLoad(cachedResourceLoader->document()->frame(), request.get(), resourceRequest, priority, securityCheck, sendResourceLoadCallbacks); diff --git a/Source/WebCore/loader/cache/CachedScript.cpp b/Source/WebCore/loader/cache/CachedScript.cpp index 8950ddb..bfd39c5 100644 --- a/Source/WebCore/loader/cache/CachedScript.cpp +++ b/Source/WebCore/loader/cache/CachedScript.cpp @@ -55,9 +55,18 @@ CachedScript::~CachedScript() { } +void CachedScript::didAddClient(CachedResourceClient* c) +{ + if (m_decodedDataDeletionTimer.isActive()) + m_decodedDataDeletionTimer.stop(); + + CachedResource::didAddClient(c); +} + void CachedScript::allClientsRemoved() { - m_decodedDataDeletionTimer.startOneShot(0); + if (double interval = memoryCache()->deadDecodedDataDeletionInterval()) + m_decodedDataDeletionTimer.startOneShot(interval); } void CachedScript::setEncoding(const String& chs) @@ -79,7 +88,6 @@ const String& CachedScript::script() m_script += m_decoder->flush(); setDecodedSize(m_script.length() * sizeof(UChar)); } - m_decodedDataDeletionTimer.startOneShot(0); return m_script; } @@ -117,7 +125,9 @@ void CachedScript::destroyDecodedData() m_script = String(); unsigned extraSize = 0; #if USE(JSC) - // FIXME: SourceInfoCache should be wiped out too but not this easily. + if (m_sourceProviderCache) + m_sourceProviderCache->clear(); + extraSize = m_sourceProviderCache ? m_sourceProviderCache->byteSize() : 0; #endif setDecodedSize(extraSize); diff --git a/Source/WebCore/loader/cache/CachedScript.h b/Source/WebCore/loader/cache/CachedScript.h index 14294f2..85c3805 100644 --- a/Source/WebCore/loader/cache/CachedScript.h +++ b/Source/WebCore/loader/cache/CachedScript.h @@ -47,12 +47,13 @@ namespace WebCore { const String& script(); + virtual void didAddClient(CachedResourceClient*); virtual void allClientsRemoved(); virtual void setEncoding(const String&); virtual String encoding() const; virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived); - virtual void error(CachedResource::Status); + virtual void error(Status); void checkNotify(); |