| Index: Source/core/svg/SVGElement.cpp
|
| diff --git a/Source/core/svg/SVGElement.cpp b/Source/core/svg/SVGElement.cpp
|
| index 7f1904c2b9d4b2db6f74236dd3ac24ed2f8dae74..7b84ce2671c2a15a0a07e0219a01a881266e0b29 100644
|
| --- a/Source/core/svg/SVGElement.cpp
|
| +++ b/Source/core/svg/SVGElement.cpp
|
| @@ -107,6 +107,20 @@ SVGElement::~SVGElement()
|
| #endif
|
| }
|
|
|
| +void SVGElement::detach(const AttachContext& context)
|
| +{
|
| + Element::detach(context);
|
| + if (SVGElement* element = correspondingElement())
|
| + element->removeInstanceMapping(this);
|
| +}
|
| +
|
| +void SVGElement::attach(const AttachContext& context)
|
| +{
|
| + Element::attach(context);
|
| + if (SVGElement* element = correspondingElement())
|
| + element->mapInstanceToElement(this);
|
| +}
|
| +
|
| short SVGElement::tabIndex() const
|
| {
|
| if (supportsFocus())
|
| @@ -330,7 +344,7 @@ void SVGElement::childrenChanged(bool changedByParser, Node* beforeChange, Node*
|
| {
|
| Element::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
|
|
|
| - // Invalidate all SVGElementInstances associated with us.
|
| + // Invalidate all instances associated with us.
|
| if (!changedByParser)
|
| invalidateInstances();
|
| }
|
| @@ -525,6 +539,9 @@ void SVGElement::removeInstanceMapping(SVGElement* instance)
|
| ASSERT(instance);
|
| ASSERT(instance->inUseShadowTree());
|
|
|
| + if (!hasSVGRareData())
|
| + return;
|
| +
|
| WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement> >& instances = svgRareData()->elementInstances();
|
| ASSERT(instances.contains(instance));
|
|
|
| @@ -1042,6 +1059,8 @@ void SVGElement::invalidateInstances()
|
| }
|
| }
|
|
|
| + svgRareData()->elementInstances().clear();
|
| +
|
| document().updateRenderTreeIfNeeded();
|
| }
|
|
|
|
|