namespace WebCore {
-static inline SVGCursorElement* resourceReferencedByCursorElement(const String& url, Document& document)
+static inline SVGCursorElement* resourceReferencedByCursorElement(const String& url, TreeScope& treeScope)
{
- Element* element = SVGURIReference::targetElementFromIRIString(url, document);
+ Element* element = SVGURIReference::targetElementFromIRIString(url, treeScope);
return isSVGCursorElement(element) ? toSVGCursorElement(element) : 0;
}
CSSCursorImageValue::~CSSCursorImageValue()
{
+ // The below teardown is all handled by weak pointer processing in oilpan.
+#if !ENABLE(OILPAN)
if (!isSVGCursor())
return;
for (; it != end; ++it) {
SVGElement* referencedElement = *it;
referencedElement->cursorImageValueRemoved();
- if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(url, referencedElement->document()))
+ if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(url, referencedElement->treeScope()))
cursorElement->removeClient(referencedElement);
}
+#endif
}
String CSSCursorImageValue::customCSSText() const
return false;
String url = toCSSImageValue(m_imageValue.get())->url();
- if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(url, element->document())) {
+ if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(url, element->treeScope())) {
// FIXME: This will override hot spot specified in CSS, which is probably incorrect.
SVGLengthContext lengthContext(0);
m_hasHotSpot = true;
clearImageResource();
SVGElement* svgElement = toSVGElement(element);
+#if !ENABLE(OILPAN)
m_referencedElements.add(svgElement);
+#endif
svgElement->setCursorImageValue(this);
cursorElement->addClient(svgElement);
return true;
// FIXME: This will fail if the <cursor> element is in a shadow DOM (bug 59827)
if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(imageValue->url(), *loader->document())) {
RefPtrWillBeRawPtr<CSSImageValue> svgImageValue = CSSImageValue::create(loader->document()->completeURL(cursorElement->href()->currentValue()->value()));
+ svgImageValue->setReferrer(imageValue->referrer());
StyleFetchedImage* cachedImage = svgImageValue->cachedImage(loader);
m_image = cachedImage;
return cachedImage;
m_accessedImage = false;
}
+#if !ENABLE(OILPAN)
void CSSCursorImageValue::removeReferencedElement(SVGElement* element)
{
m_referencedElements.remove(element);
}
+#endif
bool CSSCursorImageValue::equals(const CSSCursorImageValue& other) const
{
void CSSCursorImageValue::traceAfterDispatch(Visitor* visitor)
{
+ visitor->trace(m_imageValue);
CSSValue::traceAfterDispatch(visitor);
}