| Index: third_party/WebKit/Source/core/css/CSSCursorImageValue.cpp
|
| diff --git a/third_party/WebKit/Source/core/css/CSSCursorImageValue.cpp b/third_party/WebKit/Source/core/css/CSSCursorImageValue.cpp
|
| index bf6606d3f47ecb4622b78bb51573b046476655a3..3f30a4f35ccac29733a63502c1fa9ec7c6f0ce2a 100644
|
| --- a/third_party/WebKit/Source/core/css/CSSCursorImageValue.cpp
|
| +++ b/third_party/WebKit/Source/core/css/CSSCursorImageValue.cpp
|
| @@ -28,6 +28,7 @@
|
| #include "core/style/StyleFetchedImage.h"
|
| #include "core/style/StyleFetchedImageSet.h"
|
| #include "core/style/StyleImage.h"
|
| +#include "core/style/StylePendingImage.h"
|
| #include "core/svg/SVGCursorElement.h"
|
| #include "core/svg/SVGLengthContext.h"
|
| #include "core/svg/SVGURIReference.h"
|
| @@ -48,7 +49,7 @@
|
| , m_imageValue(imageValue)
|
| , m_hotSpotSpecified(hotSpotSpecified)
|
| , m_hotSpot(hotSpot)
|
| - , m_isCachePending(true)
|
| + , m_accessedImage(false)
|
| {
|
| }
|
|
|
| @@ -116,30 +117,13 @@
|
| return false;
|
| }
|
|
|
| -bool CSSCursorImageValue::isCachePending(float deviceScaleFactor) const
|
| -{
|
| - // Need to delegate completely so that changes in device scale factor can be handled appropriately.
|
| +StyleImage* CSSCursorImageValue::cachedImage(Document* document, float deviceScaleFactor)
|
| +{
|
| if (m_imageValue->isImageSetValue())
|
| - return toCSSImageSetValue(*m_imageValue).isCachePending(deviceScaleFactor);
|
| - return m_isCachePending;
|
| -}
|
| -
|
| -StyleImage* CSSCursorImageValue::cachedImage(float deviceScaleFactor)
|
| -{
|
| - ASSERT(!isCachePending(deviceScaleFactor));
|
| -
|
| - if (m_imageValue->isImageSetValue())
|
| - return toCSSImageSetValue(*m_imageValue).cachedImageSet(deviceScaleFactor);
|
| - return m_cachedImage.get();
|
| -}
|
| -
|
| -StyleImage* CSSCursorImageValue::cacheImage(Document* document, float deviceScaleFactor)
|
| -{
|
| - if (m_imageValue->isImageSetValue())
|
| - return toCSSImageSetValue(*m_imageValue).cacheImageSet(document, deviceScaleFactor);
|
| -
|
| - if (m_isCachePending) {
|
| - m_isCachePending = false;
|
| + return toCSSImageSetValue(m_imageValue.get())->cachedImageSet(document, deviceScaleFactor);
|
| +
|
| + if (!m_accessedImage) {
|
| + m_accessedImage = true;
|
|
|
| // For SVG images we need to lazily substitute in the correct URL. Rather than attempt
|
| // to change the URL of the CSSImageValue (which would then change behavior like cssText),
|
| @@ -150,19 +134,31 @@
|
| if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(imageValue->url(), *document)) {
|
| RefPtrWillBeRawPtr<CSSImageValue> svgImageValue = CSSImageValue::create(document->completeURL(cursorElement->href()->currentValue()->value()));
|
| svgImageValue->setReferrer(imageValue->referrer());
|
| - StyleFetchedImage* cachedImage = svgImageValue->cacheImage(document);
|
| - m_cachedImage = cachedImage;
|
| + StyleFetchedImage* cachedImage = svgImageValue->cachedImage(document);
|
| + m_image = cachedImage;
|
| return cachedImage;
|
| }
|
| }
|
|
|
| if (m_imageValue->isImageValue())
|
| - m_cachedImage = toCSSImageValue(*m_imageValue).cacheImage(document);
|
| - }
|
| -
|
| - if (m_cachedImage && m_cachedImage->isImageResource())
|
| - return toStyleFetchedImage(m_cachedImage);
|
| + m_image = toCSSImageValue(m_imageValue.get())->cachedImage(document);
|
| + }
|
| +
|
| + if (m_image && m_image->isImageResource())
|
| + return toStyleFetchedImage(m_image);
|
| return nullptr;
|
| +}
|
| +
|
| +StyleImage* CSSCursorImageValue::cachedOrPendingImage(float deviceScaleFactor)
|
| +{
|
| + // Need to delegate completely so that changes in device scale factor can be handled appropriately.
|
| + if (m_imageValue->isImageSetValue())
|
| + return toCSSImageSetValue(m_imageValue.get())->cachedOrPendingImageSet(deviceScaleFactor);
|
| +
|
| + if (!m_image)
|
| + m_image = StylePendingImage::create(this);
|
| +
|
| + return m_image.get();
|
| }
|
|
|
| bool CSSCursorImageValue::isSVGCursor() const
|
| @@ -177,15 +173,15 @@
|
|
|
| String CSSCursorImageValue::cachedImageURL()
|
| {
|
| - if (!m_cachedImage || !m_cachedImage->isImageResource())
|
| + if (!m_image || !m_image->isImageResource())
|
| return String();
|
| - return toStyleFetchedImage(m_cachedImage)->cachedImage()->url().string();
|
| + return toStyleFetchedImage(m_image)->cachedImage()->url().string();
|
| }
|
|
|
| void CSSCursorImageValue::clearImageResource()
|
| {
|
| - m_cachedImage = nullptr;
|
| - m_isCachePending = true;
|
| + m_image = nullptr;
|
| + m_accessedImage = false;
|
| }
|
|
|
| #if !ENABLE(OILPAN)
|
| @@ -204,7 +200,7 @@
|
| DEFINE_TRACE_AFTER_DISPATCH(CSSCursorImageValue)
|
| {
|
| visitor->trace(m_imageValue);
|
| - visitor->trace(m_cachedImage);
|
| + visitor->trace(m_image);
|
| CSSValue::traceAfterDispatch(visitor);
|
| }
|
|
|
|
|