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 3f30a4f35ccac29733a63502c1fa9ec7c6f0ce2a..bf6606d3f47ecb4622b78bb51573b046476655a3 100644 |
--- a/third_party/WebKit/Source/core/css/CSSCursorImageValue.cpp |
+++ b/third_party/WebKit/Source/core/css/CSSCursorImageValue.cpp |
@@ -28,7 +28,6 @@ |
#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" |
@@ -49,7 +48,7 @@ CSSCursorImageValue::CSSCursorImageValue(PassRefPtrWillBeRawPtr<CSSValue> imageV |
, m_imageValue(imageValue) |
, m_hotSpotSpecified(hotSpotSpecified) |
, m_hotSpot(hotSpot) |
- , m_accessedImage(false) |
+ , m_isCachePending(true) |
{ |
} |
@@ -117,13 +116,30 @@ bool CSSCursorImageValue::updateIfSVGCursorIsUsed(Element* element) |
return false; |
} |
-StyleImage* CSSCursorImageValue::cachedImage(Document* document, float deviceScaleFactor) |
+bool CSSCursorImageValue::isCachePending(float deviceScaleFactor) const |
{ |
+ // Need to delegate completely so that changes in device scale factor can be handled appropriately. |
if (m_imageValue->isImageSetValue()) |
- return toCSSImageSetValue(m_imageValue.get())->cachedImageSet(document, deviceScaleFactor); |
+ return toCSSImageSetValue(*m_imageValue).isCachePending(deviceScaleFactor); |
+ return m_isCachePending; |
+} |
- if (!m_accessedImage) { |
- m_accessedImage = true; |
+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; |
// 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), |
@@ -134,33 +150,21 @@ StyleImage* CSSCursorImageValue::cachedImage(Document* document, float deviceSca |
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->cachedImage(document); |
- m_image = cachedImage; |
+ StyleFetchedImage* cachedImage = svgImageValue->cacheImage(document); |
+ m_cachedImage = cachedImage; |
return cachedImage; |
} |
} |
if (m_imageValue->isImageValue()) |
- m_image = toCSSImageValue(m_imageValue.get())->cachedImage(document); |
+ m_cachedImage = toCSSImageValue(*m_imageValue).cacheImage(document); |
} |
- if (m_image && m_image->isImageResource()) |
- return toStyleFetchedImage(m_image); |
+ if (m_cachedImage && m_cachedImage->isImageResource()) |
+ return toStyleFetchedImage(m_cachedImage); |
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 |
{ |
if (m_imageValue->isImageValue()) { |
@@ -173,15 +177,15 @@ bool CSSCursorImageValue::isSVGCursor() const |
String CSSCursorImageValue::cachedImageURL() |
{ |
- if (!m_image || !m_image->isImageResource()) |
+ if (!m_cachedImage || !m_cachedImage->isImageResource()) |
return String(); |
- return toStyleFetchedImage(m_image)->cachedImage()->url().string(); |
+ return toStyleFetchedImage(m_cachedImage)->cachedImage()->url().string(); |
} |
void CSSCursorImageValue::clearImageResource() |
{ |
- m_image = nullptr; |
- m_accessedImage = false; |
+ m_cachedImage = nullptr; |
+ m_isCachePending = true; |
} |
#if !ENABLE(OILPAN) |
@@ -200,7 +204,7 @@ bool CSSCursorImageValue::equals(const CSSCursorImageValue& other) const |
DEFINE_TRACE_AFTER_DISPATCH(CSSCursorImageValue) |
{ |
visitor->trace(m_imageValue); |
- visitor->trace(m_image); |
+ visitor->trace(m_cachedImage); |
CSSValue::traceAfterDispatch(visitor); |
} |