OLD | NEW |
---|---|
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 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
232 { | 232 { |
233 clearResourceAndEventBaseReferences(); | 233 clearResourceAndEventBaseReferences(); |
234 | 234 |
235 if (!inDocument()) { | 235 if (!inDocument()) { |
236 // Reset the target element if we are no longer in the document. | 236 // Reset the target element if we are no longer in the document. |
237 setTargetElement(nullptr); | 237 setTargetElement(nullptr); |
238 return; | 238 return; |
239 } | 239 } |
240 | 240 |
241 AtomicString id; | 241 AtomicString id; |
242 AtomicString href = getAttribute(XLinkNames::hrefAttr); | 242 AtomicString href = getAttribute(SVGNames::hrefAttr); |
pdr.
2016/02/09 23:17:07
Can we use Element::hrefURL here?
fs
2016/02/10 14:44:46
We probably could (considering SVGSMILElements are
fs
2016/02/11 13:35:12
I did an attempt at "hiding" the details a bit. No
| |
243 if (href.isNull()) | |
244 href = getAttribute(XLinkNames::hrefAttr); | |
243 Element* target; | 245 Element* target; |
244 if (href.isEmpty()) | 246 if (href.isEmpty()) |
245 target = parentNode() && parentNode()->isElementNode() ? toElement(paren tNode()) : nullptr; | 247 target = parentNode() && parentNode()->isElementNode() ? toElement(paren tNode()) : nullptr; |
246 else | 248 else |
247 target = SVGURIReference::targetElementFromIRIString(href, treeScope(), &id); | 249 target = SVGURIReference::targetElementFromIRIString(href, treeScope(), &id); |
248 SVGElement* svgTarget = target && target->isSVGElement() ? toSVGElement(targ et) : nullptr; | 250 SVGElement* svgTarget = target && target->isSVGElement() ? toSVGElement(targ et) : nullptr; |
249 | 251 |
250 if (svgTarget && !svgTarget->inDocument()) | 252 if (svgTarget && !svgTarget->inDocument()) |
251 svgTarget = nullptr; | 253 svgTarget = nullptr; |
252 | 254 |
(...skipping 27 matching lines...) Expand all Loading... | |
280 | 282 |
281 AtomicString prefix; | 283 AtomicString prefix; |
282 AtomicString localName; | 284 AtomicString localName; |
283 if (!Document::parseQualifiedName(attributeName, prefix, localName, IGNORE_E XCEPTION)) | 285 if (!Document::parseQualifiedName(attributeName, prefix, localName, IGNORE_E XCEPTION)) |
284 return anyQName(); | 286 return anyQName(); |
285 | 287 |
286 const AtomicString& namespaceURI = svgElement->lookupNamespaceURI(prefix); | 288 const AtomicString& namespaceURI = svgElement->lookupNamespaceURI(prefix); |
287 if (namespaceURI.isEmpty()) | 289 if (namespaceURI.isEmpty()) |
288 return anyQName(); | 290 return anyQName(); |
289 | 291 |
290 return QualifiedName(nullAtom, localName, namespaceURI); | 292 QualifiedName resolvedAttrName(nullAtom, localName, namespaceURI); |
293 // 'xlink:href' should map to 'href' for animation purposes. (It's possible that I just dreamt this.) | |
294 if (resolvedAttrName == XLinkNames::hrefAttr) | |
295 return SVGNames::hrefAttr; | |
296 return resolvedAttrName; | |
291 } | 297 } |
292 | 298 |
293 static inline void clearTimesWithDynamicOrigins(Vector<SMILTimeWithOrigin>& time List) | 299 static inline void clearTimesWithDynamicOrigins(Vector<SMILTimeWithOrigin>& time List) |
294 { | 300 { |
295 for (int i = timeList.size() - 1; i >= 0; --i) { | 301 for (int i = timeList.size() - 1; i >= 0; --i) { |
296 if (timeList[i].originIsScript()) | 302 if (timeList[i].originIsScript()) |
297 timeList.remove(i); | 303 timeList.remove(i); |
298 } | 304 } |
299 } | 305 } |
300 | 306 |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
537 setAttributeEventListener(EventTypeNames::endEvent, createAttributeEvent Listener(this, name, value, eventParameterName())); | 543 setAttributeEventListener(EventTypeNames::endEvent, createAttributeEvent Listener(this, name, value, eventParameterName())); |
538 } else if (name == SVGNames::onrepeatAttr) { | 544 } else if (name == SVGNames::onrepeatAttr) { |
539 setAttributeEventListener(EventTypeNames::repeatEvent, createAttributeEv entListener(this, name, value, eventParameterName())); | 545 setAttributeEventListener(EventTypeNames::repeatEvent, createAttributeEv entListener(this, name, value, eventParameterName())); |
540 } else { | 546 } else { |
541 SVGElement::parseAttribute(name, oldValue, value); | 547 SVGElement::parseAttribute(name, oldValue, value); |
542 } | 548 } |
543 } | 549 } |
544 | 550 |
545 void SVGSMILElement::svgAttributeChanged(const QualifiedName& attrName) | 551 void SVGSMILElement::svgAttributeChanged(const QualifiedName& attrName) |
546 { | 552 { |
547 if (attrName == SVGNames::durAttr) | 553 if (attrName == SVGNames::durAttr) { |
548 m_cachedDur = invalidCachedTime; | 554 m_cachedDur = invalidCachedTime; |
549 else if (attrName == SVGNames::repeatDurAttr) | 555 } else if (attrName == SVGNames::repeatDurAttr) { |
550 m_cachedRepeatDur = invalidCachedTime; | 556 m_cachedRepeatDur = invalidCachedTime; |
551 else if (attrName == SVGNames::repeatCountAttr) | 557 } else if (attrName == SVGNames::repeatCountAttr) { |
552 m_cachedRepeatCount = invalidCachedTime; | 558 m_cachedRepeatCount = invalidCachedTime; |
553 else if (attrName == SVGNames::minAttr) | 559 } else if (attrName == SVGNames::minAttr) { |
554 m_cachedMin = invalidCachedTime; | 560 m_cachedMin = invalidCachedTime; |
555 else if (attrName == SVGNames::maxAttr) | 561 } else if (attrName == SVGNames::maxAttr) { |
556 m_cachedMax = invalidCachedTime; | 562 m_cachedMax = invalidCachedTime; |
557 else if (attrName == SVGNames::attributeNameAttr) | 563 } else if (attrName == SVGNames::attributeNameAttr) { |
558 setAttributeName(constructQualifiedName(this, fastGetAttribute(SVGNames: :attributeNameAttr))); | 564 setAttributeName(constructQualifiedName(this, fastGetAttribute(SVGNames: :attributeNameAttr))); |
559 else if (attrName.matches(XLinkNames::hrefAttr)) { | 565 } else if (attrName.matches(SVGNames::hrefAttr) || attrName.matches(XLinkNam es::hrefAttr)) { |
566 // TODO(fs): Could be smarter here when 'href' is specified and 'xlink:h ref' is changed. | |
560 SVGElement::InvalidationGuard invalidationGuard(this); | 567 SVGElement::InvalidationGuard invalidationGuard(this); |
561 buildPendingResource(); | 568 buildPendingResource(); |
562 if (m_targetElement) | 569 if (m_targetElement) |
563 clearAnimatedType(); | 570 clearAnimatedType(); |
564 } else if (attrName == SVGNames::beginAttr || attrName == SVGNames::endAttr) { | 571 } else if (attrName == SVGNames::beginAttr || attrName == SVGNames::endAttr) { |
565 if (inDocument()) { | 572 if (inDocument()) { |
566 connectEventBaseConditions(); | 573 connectEventBaseConditions(); |
567 if (attrName == SVGNames::beginAttr) | 574 if (attrName == SVGNames::beginAttr) |
568 beginListChanged(elapsed()); | 575 beginListChanged(elapsed()); |
569 else if (attrName == SVGNames::endAttr) | 576 else if (attrName == SVGNames::endAttr) |
(...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1361 visitor->trace(m_targetElement); | 1368 visitor->trace(m_targetElement); |
1362 visitor->trace(m_timeContainer); | 1369 visitor->trace(m_timeContainer); |
1363 visitor->trace(m_conditions); | 1370 visitor->trace(m_conditions); |
1364 visitor->trace(m_syncBaseDependents); | 1371 visitor->trace(m_syncBaseDependents); |
1365 #endif | 1372 #endif |
1366 SVGElement::trace(visitor); | 1373 SVGElement::trace(visitor); |
1367 SVGTests::trace(visitor); | 1374 SVGTests::trace(visitor); |
1368 } | 1375 } |
1369 | 1376 |
1370 } // namespace blink | 1377 } // namespace blink |
OLD | NEW |