void SVGElement::removedFrom(ContainerNode* rootParent) { bool wasInDocument = rootParent->inDocument(); if (wasInDocument && hasRelativeLengths()) { // The root of the subtree being removed should take itself out from its parent's relative // length set. For the other nodes in the subtree we don't need to do anything: they will // get their own removedFrom() notification and just clear their sets. if (rootParent->isSVGElement() && !parentNode()) { ASSERT(toSVGElement(rootParent)->m_elementsWithRelativeLengths.contains(this)); toSVGElement(rootParent)->updateRelativeLengthsInformation(false, this); } m_elementsWithRelativeLengths.clear(); } ASSERT_WITH_SECURITY_IMPLICATION(!rootParent->isSVGElement() || !toSVGElement(rootParent)->m_elementsWithRelativeLengths.contains(this)); Element::removedFrom(rootParent); if (wasInDocument) { rebuildAllIncomingReferences(); removeAllIncomingReferences(); } invalidateInstances(); }
void SVGElement::childrenChanged(const ChildrenChange& change) { Element::childrenChanged(change); // Invalidate all instances associated with us. if (!change.byParser) invalidateInstances(); }
void SVGElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta) { Element::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta); // Invalidate all instances associated with us. if (!changedByParser) invalidateInstances(); }
void SVGSymbolElement::svgAttributeChanged(const QualifiedName& attrName) { if (!isSupportedAttribute(attrName)) { SVGElement::svgAttributeChanged(attrName); return; } invalidateInstances(); }