Use is<>() / downcast<>() for Element
[WebKit-https.git] / Source / WebCore / svg / SVGUseElement.cpp
index 5580ac8..667cdfc 100644 (file)
@@ -282,7 +282,7 @@ static void dumpInstanceTree(unsigned int& depth, String& text, SVGElementInstan
     SVGElement* element = targetInstance->correspondingElement();
     ASSERT(element);
 
-    if (isSVGUseElement(element)) {
+    if (is<SVGUseElement>(element)) {
         if (downcast<SVGUseElement>(*element).cachedDocumentIsStillLoading())
             return;
     }
@@ -390,7 +390,7 @@ void SVGUseElement::clearResourceReferences()
 
     m_needsShadowTreeRecreation = false;
 
-    document().accessSVGExtensions()->removeAllTargetReferencesForElement(this);
+    document().accessSVGExtensions().removeAllTargetReferencesForElement(this);
 }
 
 void SVGUseElement::buildPendingResource()
@@ -411,7 +411,7 @@ void SVGUseElement::buildPendingResource()
         if (id.isEmpty())
             return;
 
-        referencedDocument()->accessSVGExtensions()->addPendingResource(id, this);
+        referencedDocument()->accessSVGExtensions().addPendingResource(id, this);
         ASSERT(hasPendingResources());
         return;
     }
@@ -543,16 +543,16 @@ void SVGUseElement::toClipPath(Path& path)
 {
     ASSERT(path.isEmpty());
 
-    Node* node = m_targetElementInstance ? m_targetElementInstance->shadowTreeElement() : nullptr;
-    if (!node)
+    SVGElement* element = m_targetElementInstance ? m_targetElementInstance->shadowTreeElement() : nullptr;
+    if (!element)
         return;
 
-    if (node->isSVGElement() && downcast<SVGElement>(*node).isSVGGraphicsElement()) {
-        if (!isDirectReference(downcast<SVGElement>(*node))) {
+    if (is<SVGGraphicsElement>(element)) {
+        if (!isDirectReference(*element)) {
             // Spec: Indirect references are an error (14.3.5)
-            document().accessSVGExtensions()->reportError("Not allowed to use indirect reference in <clip-path>");
+            document().accessSVGExtensions().reportError("Not allowed to use indirect reference in <clip-path>");
         } else {
-            downcast<SVGGraphicsElement>(*node).toClipPath(path);
+            downcast<SVGGraphicsElement>(*element).toClipPath(path);
             // FIXME: Avoid manual resolution of x/y here. Its potentially harmful.
             SVGLengthContext lengthContext(this);
             path.translate(FloatSize(x().value(lengthContext), y().value(lengthContext)));
@@ -593,7 +593,7 @@ void SVGUseElement::buildInstanceTree(SVGElement* target, SVGElementInstance* ta
         // We only need to track first degree <use> dependencies. Indirect references are handled
         // as the invalidation bubbles up the dependency chain.
         if (!foundUse) {
-            document().accessSVGExtensions()->addElementReferencingTarget(this, target);
+            document().accessSVGExtensions().addElementReferencingTarget(this, target);
             foundUse = true;
         }
     } else if (isDisallowedElement(*target)) {
@@ -710,7 +710,7 @@ void SVGUseElement::expandUseElementsInShadowTree(Node* element)
     // contains <use> tags, we'd miss them. So once we're done with settin' up the
     // actual shadow tree (after the special case modification for svg/symbol) we have
     // to walk it completely and expand all <use> elements.
-    if (isSVGUseElement(element)) {
+    if (is<SVGUseElement>(element)) {
         SVGUseElement& use = downcast<SVGUseElement>(*element);
         ASSERT(!use.cachedDocumentIsStillLoading());
 
@@ -760,9 +760,9 @@ void SVGUseElement::expandUseElementsInShadowTree(Node* element)
         expandUseElementsInShadowTree(child.get());
 }
 
-void SVGUseElement::expandSymbolElementsInShadowTree(Node* element)
+void SVGUseElement::expandSymbolElementsInShadowTree(Node* node)
 {
-    if (element->hasTagName(SVGNames::symbolTag)) {
+    if (is<SVGSymbolElement>(node)) {
         // Spec: The referenced 'symbol' and its contents are deep-cloned into the generated tree,
         // with the exception that the 'symbol' is replaced by an 'svg'. This generated 'svg' will
         // always have explicit values for attributes width and height. If attributes width and/or
@@ -772,10 +772,10 @@ void SVGUseElement::expandSymbolElementsInShadowTree(Node* element)
         RefPtr<SVGSVGElement> svgElement = SVGSVGElement::create(SVGNames::svgTag, *referencedDocument());
 
         // Transfer all data (attributes, etc.) from <symbol> to the new <svg> element.
-        svgElement->cloneDataFromElement(*toElement(element));
+        svgElement->cloneDataFromElement(downcast<SVGSymbolElement>(*node));
 
         // Only clone symbol children, and add them to the new <svg> element
-        for (Node* child = element->firstChild(); child; child = child->nextSibling()) {
+        for (Node* child = node->firstChild(); child; child = child->nextSibling()) {
             RefPtr<Node> newChild = child->cloneNode(true);
             svgElement->appendChild(newChild.release());
         }
@@ -788,19 +788,19 @@ void SVGUseElement::expandSymbolElementsInShadowTree(Node* element)
         if (subtreeContainsDisallowedElement(*svgElement))
             removeDisallowedElementsFromSubtree(*svgElement);
 
-        RefPtr<Node> replacingElement(svgElement.get());
+        RefPtr<SVGSVGElement> replacingElement(svgElement.get());
 
         // Replace <symbol> with <svg>.
-        element->parentNode()->replaceChild(svgElement.release(), element);
+        node->parentNode()->replaceChild(svgElement.release(), node);
 
         // Expand the siblings because the *element* is replaced and we will
         // lose the sibling chain when we are back from recursion.
-        element = replacingElement.get();
-        for (RefPtr<Node> sibling = element->nextSibling(); sibling; sibling = sibling->nextSibling())
+        node = replacingElement.get();
+        for (RefPtr<Node> sibling = node->nextSibling(); sibling; sibling = sibling->nextSibling())
             expandSymbolElementsInShadowTree(sibling.get());
     }
 
-    for (RefPtr<Node> child = element->firstChild(); child; child = child->nextSibling())
+    for (RefPtr<Node> child = node->firstChild(); child; child = child->nextSibling())
         expandSymbolElementsInShadowTree(child.get());
 }