diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-03 09:55:33 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-02-03 09:55:33 +0100 |
commit | cd44dc59cdfc39534aef4d417e9f3c412e3be139 (patch) | |
tree | 8d89889ba95ed6ec9322e733846cc9cce9d7dff1 /Source/WebCore/loader/cache | |
parent | d11f84f5b5cdc0d92a08af01b13472fdd5f9acb9 (diff) | |
download | qtwebkit-cd44dc59cdfc39534aef4d417e9f3c412e3be139.tar.gz |
Imported WebKit commit fce473cb4d55aa9fe9d0b0322a2fffecb731b961 (http://svn.webkit.org/repository/webkit/trunk@106560)
Diffstat (limited to 'Source/WebCore/loader/cache')
-rw-r--r-- | Source/WebCore/loader/cache/CachedImage.cpp | 10 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedImage.h | 6 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResource.cpp | 12 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResource.h | 2 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedResourceLoader.cpp | 4 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/CachedShader.cpp | 5 | ||||
-rw-r--r-- | Source/WebCore/loader/cache/MemoryCache.cpp | 1 |
7 files changed, 29 insertions, 11 deletions
diff --git a/Source/WebCore/loader/cache/CachedImage.cpp b/Source/WebCore/loader/cache/CachedImage.cpp index d624e3677..5b77301ef 100644 --- a/Source/WebCore/loader/cache/CachedImage.cpp +++ b/Source/WebCore/loader/cache/CachedImage.cpp @@ -205,6 +205,7 @@ void CachedImage::setContainerSizeForRenderer(const RenderObject* renderer, cons m_svgImageCache->setRequestedSizeAndZoom(renderer, SVGImageCache::SizeAndZoom(containerSize, containerZoom)); #else UNUSED_PARAM(renderer); + UNUSED_PARAM(containerZoom); m_image->setContainerSize(containerSize); #endif } @@ -255,6 +256,8 @@ IntSize CachedImage::imageSizeForRenderer(const RenderObject* renderer, float mu } return sizeAndZoom.size; } +#else + UNUSED_PARAM(renderer); #endif if (multiplier == 1.0f) @@ -387,6 +390,13 @@ void CachedImage::error(CachedResource::Status status) checkNotify(); } +void CachedImage::setResponse(const ResourceResponse& response) +{ + if (!m_response.isNull()) + clear(); + CachedResource::setResponse(response); +} + void CachedImage::destroyDecodedData() { bool canDeleteImage = !m_image || (m_image->hasOneRef() && m_image->isBitmapImage()); diff --git a/Source/WebCore/loader/cache/CachedImage.h b/Source/WebCore/loader/cache/CachedImage.h index bc1bfb194..e7184e130 100644 --- a/Source/WebCore/loader/cache/CachedImage.h +++ b/Source/WebCore/loader/cache/CachedImage.h @@ -75,14 +75,12 @@ public: virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived); virtual void error(CachedResource::Status); + virtual void setResponse(const ResourceResponse&); // For compatibility, images keep loading even if there are HTTP errors. virtual bool shouldIgnoreHTTPStatusCodeErrors() const { return true; } virtual bool isImage() const { return true; } - - void clear(); - bool stillNeedsLoad() const { return !errorOccurred() && status() == Unknown && !isLoading(); } void load(); @@ -97,6 +95,8 @@ public: private: Image* lookupOrCreateImageForRenderer(const RenderObject*); + void clear(); + void createImage(); size_t maximumDecodedImageSize(); // If not null, changeRect is the changed part of the image. diff --git a/Source/WebCore/loader/cache/CachedResource.cpp b/Source/WebCore/loader/cache/CachedResource.cpp index d003c4ad2..80d373c30 100644 --- a/Source/WebCore/loader/cache/CachedResource.cpp +++ b/Source/WebCore/loader/cache/CachedResource.cpp @@ -140,6 +140,7 @@ CachedResource::CachedResource(const ResourceRequest& request, Type type) , m_requestedFromNetworkingLayer(false) , m_inCache(false) , m_loading(false) + , m_switchingClientsToRevalidatedResource(false) , m_type(type) , m_status(Pending) #ifndef NDEBUG @@ -214,7 +215,7 @@ void CachedResource::load(CachedResourceLoader* cachedResourceLoader, const Reso m_resourceRequest.setPriority(loadPriority()); m_loader = resourceLoadScheduler()->scheduleSubresourceLoad(cachedResourceLoader->document()->frame(), this, m_resourceRequest, m_resourceRequest.priority(), options); - if (!m_loader || m_loader->reachedTerminalState()) { + if (!m_loader) { // FIXME: What if resources in other frames were waiting for this revalidation? LOG(ResourceLoading, "Cannot start loading '%s'", url().string().latin1().data()); if (m_resourceToRevalidate) @@ -224,7 +225,6 @@ void CachedResource::load(CachedResourceLoader* cachedResourceLoader, const Reso } m_status = Pending; - cachedResourceLoader->incrementRequestCount(this); } void CachedResource::checkNotify() @@ -521,6 +521,9 @@ void CachedResource::setResourceToRevalidate(CachedResource* resource) void CachedResource::clearResourceToRevalidate() { ASSERT(m_resourceToRevalidate); + if (m_switchingClientsToRevalidatedResource) + return; + // A resource may start revalidation before this method has been called, so check that this resource is still the proxy resource before clearing it out. if (m_resourceToRevalidate->m_proxyResource == this) { m_resourceToRevalidate->m_proxyResource = 0; @@ -539,6 +542,7 @@ void CachedResource::switchClientsToRevalidatedResource() LOG(ResourceLoading, "CachedResource %p switchClientsToRevalidatedResource %p", this, m_resourceToRevalidate); + m_switchingClientsToRevalidatedResource = true; HashSet<CachedResourceHandleBase*>::iterator end = m_handlesToRevalidate.end(); for (HashSet<CachedResourceHandleBase*>::iterator it = m_handlesToRevalidate.begin(); it != end; ++it) { CachedResourceHandleBase* handle = *it; @@ -566,10 +570,14 @@ void CachedResource::switchClientsToRevalidatedResource() for (unsigned n = 0; n < moveCount; ++n) m_resourceToRevalidate->addClientToSet(clientsToMove[n]); for (unsigned n = 0; n < moveCount; ++n) { + // Calling didAddClient may do anything, including trying to cancel revalidation. + // Assert that it didn't succeed. + ASSERT(m_resourceToRevalidate); // Calling didAddClient for a client may end up removing another client. In that case it won't be in the set anymore. if (m_resourceToRevalidate->m_clients.contains(clientsToMove[n])) m_resourceToRevalidate->didAddClient(clientsToMove[n]); } + m_switchingClientsToRevalidatedResource = false; } void CachedResource::updateResponseAfterRevalidation(const ResourceResponse& validatingResponse) diff --git a/Source/WebCore/loader/cache/CachedResource.h b/Source/WebCore/loader/cache/CachedResource.h index eac262101..b87da71ac 100644 --- a/Source/WebCore/loader/cache/CachedResource.h +++ b/Source/WebCore/loader/cache/CachedResource.h @@ -293,6 +293,8 @@ private: bool m_inCache : 1; bool m_loading : 1; + bool m_switchingClientsToRevalidatedResource : 1; + unsigned m_type : 4; // Type unsigned m_status : 3; // Status diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.cpp b/Source/WebCore/loader/cache/CachedResourceLoader.cpp index c7f068632..5df4a0dc3 100644 --- a/Source/WebCore/loader/cache/CachedResourceLoader.cpp +++ b/Source/WebCore/loader/cache/CachedResourceLoader.cpp @@ -608,8 +608,8 @@ void CachedResourceLoader::printAccessDeniedMessage(const KURL& url) const else message = "Unsafe attempt to load URL " + url.string() + " from frame with URL " + m_document->url().string() + ". Domains, protocols and ports must match.\n"; - // FIXME: provide a real line number and source URL. - frame()->domWindow()->console()->addMessage(OtherMessageSource, LogMessageType, ErrorMessageLevel, message, 1, String()); + // FIXME: provide line number and source URL. + frame()->domWindow()->console()->addMessage(OtherMessageSource, LogMessageType, ErrorMessageLevel, message); } void CachedResourceLoader::setAutoLoadImages(bool enable) diff --git a/Source/WebCore/loader/cache/CachedShader.cpp b/Source/WebCore/loader/cache/CachedShader.cpp index 8d7f06b3f..16d780adc 100644 --- a/Source/WebCore/loader/cache/CachedShader.cpp +++ b/Source/WebCore/loader/cache/CachedShader.cpp @@ -62,11 +62,8 @@ const String& CachedShader::shaderString() void CachedShader::data(PassRefPtr<SharedBuffer> data, bool allDataReceived) { - if (allDataReceived) { + if (allDataReceived) m_data = data; - return; - } - CachedResource::data(data, allDataReceived); } diff --git a/Source/WebCore/loader/cache/MemoryCache.cpp b/Source/WebCore/loader/cache/MemoryCache.cpp index 7de315ef0..f46889fd0 100644 --- a/Source/WebCore/loader/cache/MemoryCache.cpp +++ b/Source/WebCore/loader/cache/MemoryCache.cpp @@ -125,6 +125,7 @@ void MemoryCache::revalidationSucceeded(CachedResource* revalidatingResource, co adjustSize(resource->hasClients(), delta); revalidatingResource->switchClientsToRevalidatedResource(); + ASSERT(!revalidatingResource->m_deleted); // this deletes the revalidating resource revalidatingResource->clearResourceToRevalidate(); } |