diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/WebCore/css/CSSImageSetValue.cpp | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz |
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/WebCore/css/CSSImageSetValue.cpp')
-rw-r--r-- | Source/WebCore/css/CSSImageSetValue.cpp | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/Source/WebCore/css/CSSImageSetValue.cpp b/Source/WebCore/css/CSSImageSetValue.cpp index 849d80ffd..b031cc2ee 100644 --- a/Source/WebCore/css/CSSImageSetValue.cpp +++ b/Source/WebCore/css/CSSImageSetValue.cpp @@ -52,16 +52,16 @@ CSSImageSetValue::CSSImageSetValue() inline void CSSImageSetValue::detachPendingImage() { - if (is<StylePendingImage>(m_imageSet.get())) - downcast<StylePendingImage>(*m_imageSet).detachFromCSSValue(); + if (m_imageSet && m_imageSet->isPendingImage()) + static_cast<StylePendingImage&>(*m_imageSet).detachFromCSSValue(); } CSSImageSetValue::~CSSImageSetValue() { detachPendingImage(); - if (is<StyleCachedImageSet>(m_imageSet.get())) - downcast<StyleCachedImageSet>(*m_imageSet).clearImageSetValue(); + if (m_imageSet && m_imageSet->isCachedImageSet()) + static_cast<StyleCachedImageSet*>(m_imageSet.get())->clearImageSetValue(); } void CSSImageSetValue::fillImageSet() @@ -70,12 +70,13 @@ void CSSImageSetValue::fillImageSet() size_t i = 0; while (i < length) { CSSValue* imageValue = item(i); - String imageURL = downcast<CSSImageValue>(*imageValue).url(); + String imageURL = toCSSImageValue(imageValue)->url(); ++i; ASSERT_WITH_SECURITY_IMPLICATION(i < length); CSSValue* scaleFactorValue = item(i); - float scaleFactor = downcast<CSSPrimitiveValue>(*scaleFactorValue).getFloatValue(); + ASSERT_WITH_SECURITY_IMPLICATION(scaleFactorValue->isPrimitiveValue()); + float scaleFactor = toCSSPrimitiveValue(scaleFactorValue)->getFloatValue(); ImageWithScale image; image.imageURL = imageURL; @@ -100,9 +101,11 @@ CSSImageSetValue::ImageWithScale CSSImageSetValue::bestImageForScaleFactor() return image; } -StyleCachedImageSet* CSSImageSetValue::cachedImageSet(CachedResourceLoader& loader, const ResourceLoaderOptions& options) +StyleCachedImageSet* CSSImageSetValue::cachedImageSet(CachedResourceLoader* loader, const ResourceLoaderOptions& options) { - Document* document = loader.document(); + ASSERT(loader); + + Document* document = loader->document(); if (Page* page = document->page()) m_scaleFactor = page->deviceScaleFactor(); else @@ -118,16 +121,21 @@ StyleCachedImageSet* CSSImageSetValue::cachedImageSet(CachedResourceLoader& load ImageWithScale image = bestImageForScaleFactor(); CachedResourceRequest request(ResourceRequest(document->completeURL(image.imageURL)), options); request.setInitiator(cachedResourceRequestInitiators().css); - if (options.requestOriginPolicy() == PotentiallyCrossOriginEnabled) - updateRequestForAccessControl(request.mutableResourceRequest(), document->securityOrigin(), options.allowCredentials()); - if (CachedResourceHandle<CachedImage> cachedImage = loader.requestImage(request)) { + if (options.requestOriginPolicy == PotentiallyCrossOriginEnabled) + updateRequestForAccessControl(request.mutableResourceRequest(), document->securityOrigin(), options.allowCredentials); + if (CachedResourceHandle<CachedImage> cachedImage = loader->requestImage(request)) { detachPendingImage(); m_imageSet = StyleCachedImageSet::create(cachedImage.get(), image.scaleFactor, this); m_accessedBestFitImage = true; } } - return is<StyleCachedImageSet>(m_imageSet.get()) ? downcast<StyleCachedImageSet>(m_imageSet.get()) : nullptr; + return (m_imageSet && m_imageSet->isCachedImageSet()) ? static_cast<StyleCachedImageSet*>(m_imageSet.get()) : 0; +} + +StyleCachedImageSet* CSSImageSetValue::cachedImageSet(CachedResourceLoader* loader) +{ + return cachedImageSet(loader, CachedResourceLoader::defaultCachedResourceOptions()); } StyleImage* CSSImageSetValue::cachedOrPendingImageSet(Document& document) @@ -179,13 +187,14 @@ String CSSImageSetValue::customCSSText() const return result.toString(); } -bool CSSImageSetValue::traverseSubresources(const std::function<bool (const CachedResource&)>& handler) const +bool CSSImageSetValue::hasFailedOrCanceledSubresources() const { - if (!is<StyleCachedImageSet>(m_imageSet.get())) + if (!m_imageSet || !m_imageSet->isCachedImageSet()) return false; - CachedImage* cachedResource = downcast<StyleCachedImageSet>(*m_imageSet).cachedImage(); - ASSERT(cachedResource); - return handler(*cachedResource); + CachedResource* cachedResource = static_cast<StyleCachedImageSet*>(m_imageSet.get())->cachedImage(); + if (!cachedResource) + return true; + return cachedResource->loadFailedOrCanceled(); } CSSImageSetValue::CSSImageSetValue(const CSSImageSetValue& cloneFrom) @@ -196,9 +205,9 @@ CSSImageSetValue::CSSImageSetValue(const CSSImageSetValue& cloneFrom) // Non-CSSValueList data is not accessible through CSS OM, no need to clone. } -Ref<CSSImageSetValue> CSSImageSetValue::cloneForCSSOM() const +PassRefPtr<CSSImageSetValue> CSSImageSetValue::cloneForCSSOM() const { - return adoptRef(*new CSSImageSetValue(*this)); + return adoptRef(new CSSImageSetValue(*this)); } } // namespace WebCore |