Index: Source/core/svg/SVGElementInstance.cpp |
diff --git a/Source/core/svg/SVGElementInstance.cpp b/Source/core/svg/SVGElementInstance.cpp |
index 752f4826415236708ef14fa9094bb23d8ecf8712..869ab37bcb7239884f6e6a8164cb1b35eba2a72e 100644 |
--- a/Source/core/svg/SVGElementInstance.cpp |
+++ b/Source/core/svg/SVGElementInstance.cpp |
@@ -26,6 +26,7 @@ |
#include "core/dom/ContainerNodeAlgorithms.h" |
#include "core/events/Event.h" |
#include "core/events/EventListener.h" |
+#include "core/svg/SVGDocumentExtensions.h" |
#include "core/svg/SVGElement.h" |
#include "core/svg/SVGUseElement.h" |
@@ -143,6 +144,9 @@ void SVGElementInstance::detach() |
m_shadowTreeElement = nullptr; |
+ // SMIL animations need to be restarted in order to exclude |shadowTreeElement()|. |
+ m_element->document().accessSVGExtensions().rebuildSMILElementReferencesForTarget(m_element.get()); |
+ |
m_directUseElement = nullptr; |
m_correspondingUseElement = nullptr; |
@@ -158,6 +162,8 @@ void SVGElementInstance::setShadowTreeElement(SVGElement* element) |
// Register as instance for passed element. |
m_element->mapInstanceToElement(shadowTreeElement()); |
+ // SMIL animations need to be restarted in order to include |shadowTreeElement()|. |
+ m_element->document().accessSVGExtensions().rebuildSMILElementReferencesForTarget(m_element.get()); |
} |
void SVGElementInstance::appendChild(PassRefPtr<SVGElementInstance> child) |