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

Side by Side Diff: Source/core/svg/animation/SVGSMILElement.cpp

Issue 1238083002: Oilpan: Move the EventListener hierarchy to Oilpan's heap (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2008 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 { 100 {
101 DEFINE_STATIC_LOCAL(SMILEventSender, sender, (AtomicString("repeatn", Atomic String::ConstructFromLiteral))); 101 DEFINE_STATIC_LOCAL(SMILEventSender, sender, (AtomicString("repeatn", Atomic String::ConstructFromLiteral)));
102 return sender; 102 return sender;
103 } 103 }
104 104
105 // This is used for duration type time values that can't be negative. 105 // This is used for duration type time values that can't be negative.
106 static const double invalidCachedTime = -1.; 106 static const double invalidCachedTime = -1.;
107 107
108 class ConditionEventListener final : public EventListener { 108 class ConditionEventListener final : public EventListener {
109 public: 109 public:
110 static PassRefPtr<ConditionEventListener> create(SVGSMILElement* animation, SVGSMILElement::Condition* condition) 110 static PassRefPtrWillBeRawPtr<ConditionEventListener> create(SVGSMILElement* animation, SVGSMILElement::Condition* condition)
111 { 111 {
112 return adoptRef(new ConditionEventListener(animation, condition)); 112 return adoptRefWillBeNoop(new ConditionEventListener(animation, conditio n));
113 } 113 }
114 114
115 static const ConditionEventListener* cast(const EventListener* listener) 115 static const ConditionEventListener* cast(const EventListener* listener)
116 { 116 {
117 return listener->type() == ConditionEventListenerType 117 return listener->type() == ConditionEventListenerType
118 ? static_cast<const ConditionEventListener*>(listener) 118 ? static_cast<const ConditionEventListener*>(listener)
119 : nullptr; 119 : nullptr;
120 } 120 }
121 121
122 bool operator==(const EventListener& other) override; 122 bool operator==(const EventListener& other) override;
123 123
124 void disconnectAnimation() 124 void disconnectAnimation()
125 { 125 {
126 m_animation = nullptr; 126 m_animation = nullptr;
127 } 127 }
128 128
129 DEFINE_INLINE_VIRTUAL_TRACE()
130 {
131 visitor->trace(m_animation);
132 EventListener::trace(visitor);
133 }
134
129 private: 135 private:
130 ConditionEventListener(SVGSMILElement* animation, SVGSMILElement::Condition* condition) 136 ConditionEventListener(SVGSMILElement* animation, SVGSMILElement::Condition* condition)
131 : EventListener(ConditionEventListenerType) 137 : EventListener(ConditionEventListenerType)
132 , m_animation(animation) 138 , m_animation(animation)
133 , m_condition(condition) 139 , m_condition(condition)
134 { 140 {
135 } 141 }
136 142
137 void handleEvent(ExecutionContext*, Event*) override; 143 void handleEvent(ExecutionContext*, Event*) override;
138 144
139 SVGSMILElement* m_animation; 145 RawPtrWillBeMember<SVGSMILElement> m_animation;
140 SVGSMILElement::Condition* m_condition; 146 SVGSMILElement::Condition* m_condition;
141 }; 147 };
142 148
143 bool ConditionEventListener::operator==(const EventListener& listener) 149 bool ConditionEventListener::operator==(const EventListener& listener)
144 { 150 {
145 if (const ConditionEventListener* conditionEventListener = ConditionEventLis tener::cast(&listener)) 151 if (const ConditionEventListener* conditionEventListener = ConditionEventLis tener::cast(&listener))
146 return m_animation == conditionEventListener->m_animation && m_condition == conditionEventListener->m_condition; 152 return m_animation == conditionEventListener->m_animation && m_condition == conditionEventListener->m_condition;
147 return false; 153 return false;
148 } 154 }
149 155
150 void ConditionEventListener::handleEvent(ExecutionContext*, Event* event) 156 void ConditionEventListener::handleEvent(ExecutionContext*, Event* event)
151 { 157 {
152 if (!m_animation) 158 if (!m_animation)
153 return; 159 return;
154 m_animation->handleConditionEvent(event, m_condition); 160 m_animation->handleConditionEvent(event, m_condition);
155 } 161 }
156 162
157 void SVGSMILElement::Condition::setEventListener(PassRefPtr<ConditionEventListen er> eventListener) 163 void SVGSMILElement::Condition::setEventListener(PassRefPtrWillBeRawPtr<Conditio nEventListener> eventListener)
158 { 164 {
159 m_eventListener = eventListener; 165 m_eventListener = eventListener;
160 } 166 }
161 167
162 SVGSMILElement::Condition::Condition(Type type, BeginOrEnd beginOrEnd, const Str ing& baseID, const String& name, SMILTime offset, int repeat) 168 SVGSMILElement::Condition::Condition(Type type, BeginOrEnd beginOrEnd, const Str ing& baseID, const String& name, SMILTime offset, int repeat)
163 : m_type(type) 169 : m_type(type)
164 , m_beginOrEnd(beginOrEnd) 170 , m_beginOrEnd(beginOrEnd)
165 , m_baseID(baseID) 171 , m_baseID(baseID)
166 , m_name(name) 172 , m_name(name)
167 , m_offset(offset) 173 , m_offset(offset)
(...skipping 1171 matching lines...) Expand 10 before | Expand all | Expand 10 after
1339 m_isScheduled = false; 1345 m_isScheduled = false;
1340 } 1346 }
1341 1347
1342 SVGSMILElement::Condition::~Condition() 1348 SVGSMILElement::Condition::~Condition()
1343 { 1349 {
1344 } 1350 }
1345 1351
1346 DEFINE_TRACE(SVGSMILElement::Condition) 1352 DEFINE_TRACE(SVGSMILElement::Condition)
1347 { 1353 {
1348 visitor->trace(m_syncBase); 1354 visitor->trace(m_syncBase);
1355 visitor->trace(m_eventListener);
1349 } 1356 }
1350 1357
1351 DEFINE_TRACE(SVGSMILElement) 1358 DEFINE_TRACE(SVGSMILElement)
1352 { 1359 {
1353 #if ENABLE(OILPAN) 1360 #if ENABLE(OILPAN)
1354 visitor->trace(m_targetElement); 1361 visitor->trace(m_targetElement);
1355 visitor->trace(m_timeContainer); 1362 visitor->trace(m_timeContainer);
1356 visitor->trace(m_conditions); 1363 visitor->trace(m_conditions);
1357 visitor->trace(m_syncBaseDependents); 1364 visitor->trace(m_syncBaseDependents);
1358 #endif 1365 #endif
1359 SVGElement::trace(visitor); 1366 SVGElement::trace(visitor);
1360 SVGTests::trace(visitor); 1367 SVGTests::trace(visitor);
1361 } 1368 }
1362 1369
1363 } // namespace blink 1370 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698