Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(714)

Unified Diff: third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp

Issue 2739893002: Store element reference for event-bases too (Closed)
Patch Set: Fix order Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/svg/animation/SVGSMILElement.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
diff --git a/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp b/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
index 9a0ab683f6d97a6c7e3b89942ee3b5e9fbae97d1..19320b754f5cc0b3889533f5aabd3af4f8bfbd37 100644
--- a/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
+++ b/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
@@ -144,27 +144,29 @@ SVGSMILElement::Condition::Condition(Type type,
SVGSMILElement::Condition::~Condition() = default;
DEFINE_TRACE(SVGSMILElement::Condition) {
- visitor->trace(m_syncBase);
+ visitor->trace(m_baseElement);
visitor->trace(m_eventListener);
}
void SVGSMILElement::Condition::connectSyncBase(SVGSMILElement& timedElement) {
DCHECK(!m_baseID.isEmpty());
+ DCHECK_EQ(m_type, Syncbase);
Element* element = timedElement.treeScope().getElementById(m_baseID);
if (!element || !isSVGSMILElement(*element)) {
- m_syncBase = nullptr;
+ m_baseElement = nullptr;
return;
}
- m_syncBase = toSVGSMILElement(element);
- m_syncBase->addSyncBaseDependent(timedElement);
+ m_baseElement = toSVGSMILElement(element);
+ toSVGSMILElement(*element).addSyncBaseDependent(timedElement);
}
void SVGSMILElement::Condition::disconnectSyncBase(
SVGSMILElement& timedElement) {
- if (!m_syncBase)
+ DCHECK_EQ(m_type, Syncbase);
+ if (!m_baseElement)
return;
- m_syncBase->removeSyncBaseDependent(timedElement);
- m_syncBase = nullptr;
+ toSVGSMILElement(*m_baseElement).removeSyncBaseDependent(timedElement);
+ m_baseElement = nullptr;
}
SVGElement* SVGSMILElement::Condition::lookupEventBase(
@@ -178,7 +180,8 @@ SVGElement* SVGSMILElement::Condition::lookupEventBase(
}
void SVGSMILElement::Condition::connectEventBase(SVGSMILElement& timedElement) {
- DCHECK(!m_syncBase);
+ DCHECK_EQ(m_type, EventBase);
+ DCHECK(!m_baseElement);
SVGElement* eventBase = lookupEventBase(timedElement);
if (!eventBase) {
if (m_baseID.isEmpty())
@@ -191,22 +194,18 @@ void SVGSMILElement::Condition::connectEventBase(SVGSMILElement& timedElement) {
}
DCHECK(!m_eventListener);
m_eventListener = ConditionEventListener::create(&timedElement, this);
- eventBase->addEventListener(m_name, m_eventListener, false);
- timedElement.addReferenceTo(eventBase);
+ m_baseElement = eventBase;
+ m_baseElement->addEventListener(m_name, m_eventListener, false);
+ timedElement.addReferenceTo(m_baseElement);
}
void SVGSMILElement::Condition::disconnectEventBase(
SVGSMILElement& timedElement) {
- DCHECK(!m_syncBase);
+ DCHECK_EQ(m_type, EventBase);
if (!m_eventListener)
return;
- // Note: It's a memory optimization to try to remove our condition event
- // listener, but it's not guaranteed to work, since we have no guarantee that
- // we will be able to find our condition's original eventBase. So, we also
- // have to disconnect ourselves from our condition event listener, in case it
- // later fires.
- if (SVGElement* eventBase = lookupEventBase(timedElement))
- eventBase->removeEventListener(m_name, m_eventListener, false);
+ m_baseElement->removeEventListener(m_name, m_eventListener, false);
+ m_baseElement = nullptr;
m_eventListener->disconnectAnimation();
m_eventListener = nullptr;
}
« no previous file with comments | « third_party/WebKit/Source/core/svg/animation/SVGSMILElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698