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

Side by Side Diff: Source/core/animation/css/CSSAnimations.cpp

Issue 566803002: Web Animations: Fix pseudo element keyframe style resolution crash (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 3 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
« no previous file with comments | « Source/core/animation/css/CSSAnimations.h ('k') | Source/core/css/resolver/StyleResolver.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 case CSSPropertyWebkitTransformOriginX: 74 case CSSPropertyWebkitTransformOriginX:
75 case CSSPropertyWebkitTransformOriginY: 75 case CSSPropertyWebkitTransformOriginY:
76 case CSSPropertyWebkitTransformOriginZ: 76 case CSSPropertyWebkitTransformOriginZ:
77 return CSSPropertyTransformOrigin; 77 return CSSPropertyTransformOrigin;
78 default: 78 default:
79 break; 79 break;
80 } 80 }
81 return property; 81 return property;
82 } 82 }
83 83
84 static void resolveKeyframes(StyleResolver* resolver, Element* element, const El ement& parentElement, const RenderStyle& style, RenderStyle* parentStyle, const AtomicString& name, TimingFunction* defaultTimingFunction, 84 static void resolveKeyframes(StyleResolver* resolver, const Element* animatingEl ement, Element& element, const RenderStyle& style, RenderStyle* parentStyle, con st AtomicString& name, TimingFunction* defaultTimingFunction,
85 AnimatableValueKeyframeVector& keyframes) 85 AnimatableValueKeyframeVector& keyframes)
86 { 86 {
87 // When the element is null, use its parent for scoping purposes. 87 // When the animating element is null, use its parent for scoping purposes.
88 const Element* elementForScoping = element ? element : &parentElement; 88 const Element* elementForScoping = animatingElement ? animatingElement : &el ement;
89 const StyleRuleKeyframes* keyframesRule = CSSAnimations::matchScopedKeyframe sRule(resolver, elementForScoping, name.impl()); 89 const StyleRuleKeyframes* keyframesRule = CSSAnimations::matchScopedKeyframe sRule(resolver, elementForScoping, name.impl());
90 if (!keyframesRule) 90 if (!keyframesRule)
91 return; 91 return;
92 92
93 const WillBeHeapVector<RefPtrWillBeMember<StyleKeyframe> >& styleKeyframes = keyframesRule->keyframes(); 93 const WillBeHeapVector<RefPtrWillBeMember<StyleKeyframe> >& styleKeyframes = keyframesRule->keyframes();
94 if (styleKeyframes.isEmpty()) 94 if (styleKeyframes.isEmpty())
95 return; 95 return;
96 96
97 // Construct and populate the style for each keyframe 97 // Construct and populate the style for each keyframe
98 PropertySet specifiedPropertiesForUseCounter; 98 PropertySet specifiedPropertiesForUseCounter;
99 for (size_t i = 0; i < styleKeyframes.size(); ++i) { 99 for (size_t i = 0; i < styleKeyframes.size(); ++i) {
100 const StyleKeyframe* styleKeyframe = styleKeyframes[i].get(); 100 const StyleKeyframe* styleKeyframe = styleKeyframes[i].get();
101 // It's OK to pass a null element here.
102 RefPtr<RenderStyle> keyframeStyle = resolver->styleForKeyframe(element, style, parentStyle, styleKeyframe, name); 101 RefPtr<RenderStyle> keyframeStyle = resolver->styleForKeyframe(element, style, parentStyle, styleKeyframe, name);
103 RefPtrWillBeRawPtr<AnimatableValueKeyframe> keyframe = AnimatableValueKe yframe::create(); 102 RefPtrWillBeRawPtr<AnimatableValueKeyframe> keyframe = AnimatableValueKe yframe::create();
104 const Vector<double>& offsets = styleKeyframe->keys(); 103 const Vector<double>& offsets = styleKeyframe->keys();
105 ASSERT(!offsets.isEmpty()); 104 ASSERT(!offsets.isEmpty());
106 keyframe->setOffset(offsets[0]); 105 keyframe->setOffset(offsets[0]);
107 keyframe->setEasing(defaultTimingFunction); 106 keyframe->setEasing(defaultTimingFunction);
108 const StylePropertySet& properties = styleKeyframe->properties(); 107 const StylePropertySet& properties = styleKeyframe->properties();
109 for (unsigned j = 0; j < properties.propertyCount(); j++) { 108 for (unsigned j = 0; j < properties.propertyCount(); j++) {
110 specifiedPropertiesForUseCounter.add(properties.propertyAt(j).id()); 109 specifiedPropertiesForUseCounter.add(properties.propertyAt(j).id());
111 CSSPropertyID property = propertyForAnimation(properties.propertyAt( j).id()); 110 CSSPropertyID property = propertyForAnimation(properties.propertyAt( j).id());
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 if (const StyleRuleKeyframes* keyframesRule = stack.at(i)->keyframeStyle sForAnimation(animationName)) 213 if (const StyleRuleKeyframes* keyframesRule = stack.at(i)->keyframeStyle sForAnimation(animationName))
215 return keyframesRule; 214 return keyframesRule;
216 } 215 }
217 return 0; 216 return 0;
218 } 217 }
219 218
220 CSSAnimations::CSSAnimations() 219 CSSAnimations::CSSAnimations()
221 { 220 {
222 } 221 }
223 222
224 PassOwnPtrWillBeRawPtr<CSSAnimationUpdate> CSSAnimations::calculateUpdate(Elemen t* element, const Element& parentElement, const RenderStyle& style, RenderStyle* parentStyle, StyleResolver* resolver) 223 PassOwnPtrWillBeRawPtr<CSSAnimationUpdate> CSSAnimations::calculateUpdate(const Element* animatingElement, Element& element, const RenderStyle& style, RenderSty le* parentStyle, StyleResolver* resolver)
225 { 224 {
226 OwnPtrWillBeRawPtr<CSSAnimationUpdate> update = adoptPtrWillBeNoop(new CSSAn imationUpdate()); 225 OwnPtrWillBeRawPtr<CSSAnimationUpdate> update = adoptPtrWillBeNoop(new CSSAn imationUpdate());
227 calculateAnimationUpdate(update.get(), element, parentElement, style, parent Style, resolver); 226 calculateAnimationUpdate(update.get(), animatingElement, element, style, par entStyle, resolver);
228 calculateAnimationActiveInterpolations(update.get(), element, parentElement. document().timeline().currentTimeInternal()); 227 calculateAnimationActiveInterpolations(update.get(), animatingElement, eleme nt.document().timeline().currentTimeInternal());
229 calculateTransitionUpdate(update.get(), element, style); 228 calculateTransitionUpdate(update.get(), animatingElement, style);
230 calculateTransitionActiveInterpolations(update.get(), element, parentElement .document().timeline().currentTimeInternal()); 229 calculateTransitionActiveInterpolations(update.get(), animatingElement, elem ent.document().timeline().currentTimeInternal());
231 return update->isEmpty() ? nullptr : update.release(); 230 return update->isEmpty() ? nullptr : update.release();
232 } 231 }
233 232
234 void CSSAnimations::calculateAnimationUpdate(CSSAnimationUpdate* update, Element * element, const Element& parentElement, const RenderStyle& style, RenderStyle* parentStyle, StyleResolver* resolver) 233 void CSSAnimations::calculateAnimationUpdate(CSSAnimationUpdate* update, const E lement* animatingElement, Element& element, const RenderStyle& style, RenderStyl e* parentStyle, StyleResolver* resolver)
235 { 234 {
236 const ActiveAnimations* activeAnimations = element ? element->activeAnimatio ns() : 0; 235 const ActiveAnimations* activeAnimations = animatingElement ? animatingEleme nt->activeAnimations() : 0;
237 236
238 #if !ENABLE(ASSERT) 237 #if !ENABLE(ASSERT)
239 // If we're in an animation style change, no animations can have started, be en cancelled or changed play state. 238 // If we're in an animation style change, no animations can have started, be en cancelled or changed play state.
240 // When ASSERT is enabled, we verify this optimization. 239 // When ASSERT is enabled, we verify this optimization.
241 if (activeAnimations && activeAnimations->isAnimationStyleChange()) 240 if (activeAnimations && activeAnimations->isAnimationStyleChange())
242 return; 241 return;
243 #endif 242 #endif
244 243
245 const CSSAnimationData* animationData = style.animations(); 244 const CSSAnimationData* animationData = style.animations();
246 const CSSAnimations* cssAnimations = activeAnimations ? &activeAnimations->c ssAnimations() : 0; 245 const CSSAnimations* cssAnimations = activeAnimations ? &activeAnimations->c ssAnimations() : 0;
(...skipping 24 matching lines...) Expand all
271 update->toggleAnimationPaused(animationName); 270 update->toggleAnimationPaused(animationName);
272 } 271 }
273 continue; 272 continue;
274 } 273 }
275 } 274 }
276 275
277 Timing timing = animationData->convertToTiming(i); 276 Timing timing = animationData->convertToTiming(i);
278 RefPtr<TimingFunction> keyframeTimingFunction = timing.timingFunctio n; 277 RefPtr<TimingFunction> keyframeTimingFunction = timing.timingFunctio n;
279 timing.timingFunction = Timing::defaults().timingFunction; 278 timing.timingFunction = Timing::defaults().timingFunction;
280 AnimatableValueKeyframeVector resolvedKeyframes; 279 AnimatableValueKeyframeVector resolvedKeyframes;
281 resolveKeyframes(resolver, element, parentElement, style, parentStyl e, animationName, keyframeTimingFunction.get(), resolvedKeyframes); 280 resolveKeyframes(resolver, animatingElement, element, style, parentS tyle, animationName, keyframeTimingFunction.get(), resolvedKeyframes);
282 if (!resolvedKeyframes.isEmpty()) { 281 if (!resolvedKeyframes.isEmpty()) {
283 ASSERT(!activeAnimations || !activeAnimations->isAnimationStyleC hange()); 282 ASSERT(!activeAnimations || !activeAnimations->isAnimationStyleC hange());
284 update->startAnimation(animationName, InertAnimation::create(Ani matableValueKeyframeEffectModel::create(resolvedKeyframes), timing, isPaused)); 283 update->startAnimation(animationName, InertAnimation::create(Ani matableValueKeyframeEffectModel::create(resolvedKeyframes), timing, isPaused));
285 } 284 }
286 } 285 }
287 } 286 }
288 287
289 ASSERT(inactive.isEmpty() || cssAnimations); 288 ASSERT(inactive.isEmpty() || cssAnimations);
290 for (HashSet<AtomicString>::const_iterator iter = inactive.begin(); iter != inactive.end(); ++iter) { 289 for (HashSet<AtomicString>::const_iterator iter = inactive.begin(); iter != inactive.end(); ++iter) {
291 ASSERT(!activeAnimations || !activeAnimations->isAnimationStyleChange()) ; 290 ASSERT(!activeAnimations || !activeAnimations->isAnimationStyleChange()) ;
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 RefPtrWillBeRawPtr<AnimatableValueKeyframe> endKeyframe = AnimatableValueKey frame::create(); 442 RefPtrWillBeRawPtr<AnimatableValueKeyframe> endKeyframe = AnimatableValueKey frame::create();
444 endKeyframe->setPropertyValue(id, to.get()); 443 endKeyframe->setPropertyValue(id, to.get());
445 endKeyframe->setOffset(1); 444 endKeyframe->setOffset(1);
446 keyframes.append(endKeyframe); 445 keyframes.append(endKeyframe);
447 446
448 RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = AnimatableVa lueKeyframeEffectModel::create(keyframes); 447 RefPtrWillBeRawPtr<AnimatableValueKeyframeEffectModel> effect = AnimatableVa lueKeyframeEffectModel::create(keyframes);
449 update->startTransition(id, eventId, from.get(), to.get(), InertAnimation::c reate(effect, timing, false)); 448 update->startTransition(id, eventId, from.get(), to.get(), InertAnimation::c reate(effect, timing, false));
450 ASSERT(!element->activeAnimations() || !element->activeAnimations()->isAnima tionStyleChange()); 449 ASSERT(!element->activeAnimations() || !element->activeAnimations()->isAnima tionStyleChange());
451 } 450 }
452 451
453 void CSSAnimations::calculateTransitionUpdate(CSSAnimationUpdate* update, const Element* element, const RenderStyle& style) 452 void CSSAnimations::calculateTransitionUpdate(CSSAnimationUpdate* update, const Element* animatingElement, const RenderStyle& style)
454 { 453 {
455 if (!element) 454 if (!animatingElement)
456 return; 455 return;
457 456
458 ActiveAnimations* activeAnimations = element->activeAnimations(); 457 ActiveAnimations* activeAnimations = animatingElement->activeAnimations();
459 const TransitionMap* activeTransitions = activeAnimations ? &activeAnimation s->cssAnimations().m_transitions : 0; 458 const TransitionMap* activeTransitions = activeAnimations ? &activeAnimation s->cssAnimations().m_transitions : 0;
460 const CSSTransitionData* transitionData = style.transitions(); 459 const CSSTransitionData* transitionData = style.transitions();
461 460
462 #if ENABLE(ASSERT) 461 #if ENABLE(ASSERT)
463 // In debug builds we verify that it would have been safe to avoid populatin g and testing listedProperties if the style recalc is due to animation. 462 // In debug builds we verify that it would have been safe to avoid populatin g and testing listedProperties if the style recalc is due to animation.
464 const bool animationStyleRecalc = false; 463 const bool animationStyleRecalc = false;
465 #else 464 #else
466 // In release builds we avoid the cost of checking for new and interrupted t ransitions if the style recalc is due to animation. 465 // In release builds we avoid the cost of checking for new and interrupted t ransitions if the style recalc is due to animation.
467 const bool animationStyleRecalc = activeAnimations && activeAnimations->isAn imationStyleChange(); 466 const bool animationStyleRecalc = activeAnimations && activeAnimations->isAn imationStyleChange();
468 #endif 467 #endif
469 468
470 BitArray<numCSSProperties> listedProperties; 469 BitArray<numCSSProperties> listedProperties;
471 bool anyTransitionHadTransitionAll = false; 470 bool anyTransitionHadTransitionAll = false;
472 const RenderObject* renderer = element->renderer(); 471 const RenderObject* renderer = animatingElement->renderer();
473 if (!animationStyleRecalc && style.display() != NONE && renderer && renderer ->style() && transitionData) { 472 if (!animationStyleRecalc && style.display() != NONE && renderer && renderer ->style() && transitionData) {
474 const RenderStyle& oldStyle = *renderer->style(); 473 const RenderStyle& oldStyle = *renderer->style();
475 474
476 for (size_t i = 0; i < transitionData->propertyList().size(); ++i) { 475 for (size_t i = 0; i < transitionData->propertyList().size(); ++i) {
477 const CSSTransitionData::TransitionProperty& transitionProperty = tr ansitionData->propertyList()[i]; 476 const CSSTransitionData::TransitionProperty& transitionProperty = tr ansitionData->propertyList()[i];
478 CSSTransitionData::TransitionPropertyType mode = transitionProperty. propertyType; 477 CSSTransitionData::TransitionPropertyType mode = transitionProperty. propertyType;
479 CSSPropertyID property = transitionProperty.propertyId; 478 CSSPropertyID property = transitionProperty.propertyId;
480 if (mode == CSSTransitionData::TransitionNone || mode == CSSTransiti onData::TransitionUnknown) 479 if (mode == CSSTransitionData::TransitionNone || mode == CSSTransiti onData::TransitionUnknown)
481 continue; 480 continue;
482 481
(...skipping 12 matching lines...) Expand all
495 if (CSSPropertyMetadata::isAnimatableProperty(id)) 494 if (CSSPropertyMetadata::isAnimatableProperty(id))
496 listedProperties.set(id); 495 listedProperties.set(id);
497 else 496 else
498 continue; 497 continue;
499 } 498 }
500 499
501 // FIXME: We should transition if an !important property changes even when an animation is running, 500 // FIXME: We should transition if an !important property changes even when an animation is running,
502 // but this is a bit hard to do with the current applyMatchedPro perties system. 501 // but this is a bit hard to do with the current applyMatchedPro perties system.
503 if (!update->activeInterpolationsForAnimations().contains(id) 502 if (!update->activeInterpolationsForAnimations().contains(id)
504 && (!activeAnimations || !activeAnimations->cssAnimations(). m_previousActiveInterpolationsForAnimations.contains(id))) { 503 && (!activeAnimations || !activeAnimations->cssAnimations(). m_previousActiveInterpolationsForAnimations.contains(id))) {
505 calculateTransitionUpdateForProperty(id, eventId, *transitio nData, i, oldStyle, style, activeTransitions, update, element); 504 calculateTransitionUpdateForProperty(id, eventId, *transitio nData, i, oldStyle, style, activeTransitions, update, animatingElement);
506 } 505 }
507 } 506 }
508 } 507 }
509 } 508 }
510 509
511 if (activeTransitions) { 510 if (activeTransitions) {
512 for (TransitionMap::const_iterator iter = activeTransitions->begin(); it er != activeTransitions->end(); ++iter) { 511 for (TransitionMap::const_iterator iter = activeTransitions->begin(); it er != activeTransitions->end(); ++iter) {
513 const AnimationPlayer& player = *iter->value.player; 512 const AnimationPlayer& player = *iter->value.player;
514 CSSPropertyID id = iter->key; 513 CSSPropertyID id = iter->key;
515 if (player.finishedInternal() || (!anyTransitionHadTransitionAll && !animationStyleRecalc && !listedProperties.get(id))) { 514 if (player.finishedInternal() || (!anyTransitionHadTransitionAll && !animationStyleRecalc && !listedProperties.get(id))) {
(...skipping 15 matching lines...) Expand all
531 for (TransitionMap::iterator iter = m_transitions.begin(); iter != m_transit ions.end(); ++iter) { 530 for (TransitionMap::iterator iter = m_transitions.begin(); iter != m_transit ions.end(); ++iter) {
532 iter->value.player->cancel(); 531 iter->value.player->cancel();
533 iter->value.player->update(TimingUpdateOnDemand); 532 iter->value.player->update(TimingUpdateOnDemand);
534 } 533 }
535 534
536 m_animations.clear(); 535 m_animations.clear();
537 m_transitions.clear(); 536 m_transitions.clear();
538 m_pendingUpdate = nullptr; 537 m_pendingUpdate = nullptr;
539 } 538 }
540 539
541 void CSSAnimations::calculateAnimationActiveInterpolations(CSSAnimationUpdate* u pdate, const Element* element, double timelineCurrentTime) 540 void CSSAnimations::calculateAnimationActiveInterpolations(CSSAnimationUpdate* u pdate, const Element* animatingElement, double timelineCurrentTime)
542 { 541 {
543 ActiveAnimations* activeAnimations = element ? element->activeAnimations() : 0; 542 ActiveAnimations* activeAnimations = animatingElement ? animatingElement->ac tiveAnimations() : 0;
544 AnimationStack* animationStack = activeAnimations ? &activeAnimations->defau ltStack() : 0; 543 AnimationStack* animationStack = activeAnimations ? &activeAnimations->defau ltStack() : 0;
545 544
546 if (update->newAnimations().isEmpty() && update->cancelledAnimationAnimation Players().isEmpty()) { 545 if (update->newAnimations().isEmpty() && update->cancelledAnimationAnimation Players().isEmpty()) {
547 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > act iveInterpolationsForAnimations(AnimationStack::activeInterpolations(animationSta ck, 0, 0, Animation::DefaultPriority, timelineCurrentTime)); 546 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > act iveInterpolationsForAnimations(AnimationStack::activeInterpolations(animationSta ck, 0, 0, Animation::DefaultPriority, timelineCurrentTime));
548 update->adoptActiveInterpolationsForAnimations(activeInterpolationsForAn imations); 547 update->adoptActiveInterpolationsForAnimations(activeInterpolationsForAn imations);
549 return; 548 return;
550 } 549 }
551 550
552 WillBeHeapVector<RawPtrWillBeMember<InertAnimation> > newAnimations; 551 WillBeHeapVector<RawPtrWillBeMember<InertAnimation> > newAnimations;
553 for (size_t i = 0; i < update->newAnimations().size(); ++i) { 552 for (size_t i = 0; i < update->newAnimations().size(); ++i) {
554 newAnimations.append(update->newAnimations()[i].animation.get()); 553 newAnimations.append(update->newAnimations()[i].animation.get());
555 } 554 }
556 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > activeI nterpolationsForAnimations(AnimationStack::activeInterpolations(animationStack, &newAnimations, &update->cancelledAnimationAnimationPlayers(), Animation::Defaul tPriority, timelineCurrentTime)); 555 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > activeI nterpolationsForAnimations(AnimationStack::activeInterpolations(animationStack, &newAnimations, &update->cancelledAnimationAnimationPlayers(), Animation::Defaul tPriority, timelineCurrentTime));
557 update->adoptActiveInterpolationsForAnimations(activeInterpolationsForAnimat ions); 556 update->adoptActiveInterpolationsForAnimations(activeInterpolationsForAnimat ions);
558 } 557 }
559 558
560 void CSSAnimations::calculateTransitionActiveInterpolations(CSSAnimationUpdate* update, const Element* element, double timelineCurrentTime) 559 void CSSAnimations::calculateTransitionActiveInterpolations(CSSAnimationUpdate* update, const Element* animatingElement, double timelineCurrentTime)
561 { 560 {
562 ActiveAnimations* activeAnimations = element ? element->activeAnimations() : 0; 561 ActiveAnimations* activeAnimations = animatingElement ? animatingElement->ac tiveAnimations() : 0;
563 AnimationStack* animationStack = activeAnimations ? &activeAnimations->defau ltStack() : 0; 562 AnimationStack* animationStack = activeAnimations ? &activeAnimations->defau ltStack() : 0;
564 563
565 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > activeI nterpolationsForTransitions; 564 WillBeHeapHashMap<CSSPropertyID, RefPtrWillBeMember<Interpolation> > activeI nterpolationsForTransitions;
566 if (update->newTransitions().isEmpty() && update->cancelledTransitions().isE mpty()) { 565 if (update->newTransitions().isEmpty() && update->cancelledTransitions().isE mpty()) {
567 activeInterpolationsForTransitions = AnimationStack::activeInterpolation s(animationStack, 0, 0, Animation::TransitionPriority, timelineCurrentTime); 566 activeInterpolationsForTransitions = AnimationStack::activeInterpolation s(animationStack, 0, 0, Animation::TransitionPriority, timelineCurrentTime);
568 } else { 567 } else {
569 WillBeHeapVector<RawPtrWillBeMember<InertAnimation> > newTransitions; 568 WillBeHeapVector<RawPtrWillBeMember<InertAnimation> > newTransitions;
570 for (CSSAnimationUpdate::NewTransitionMap::const_iterator iter = update- >newTransitions().begin(); iter != update->newTransitions().end(); ++iter) 569 for (CSSAnimationUpdate::NewTransitionMap::const_iterator iter = update- >newTransitions().begin(); iter != update->newTransitions().end(); ++iter)
571 newTransitions.append(iter->value.animation.get()); 570 newTransitions.append(iter->value.animation.get());
572 571
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 #if ENABLE(OILPAN) 729 #if ENABLE(OILPAN)
731 visitor->trace(m_newTransitions); 730 visitor->trace(m_newTransitions);
732 visitor->trace(m_activeInterpolationsForAnimations); 731 visitor->trace(m_activeInterpolationsForAnimations);
733 visitor->trace(m_activeInterpolationsForTransitions); 732 visitor->trace(m_activeInterpolationsForTransitions);
734 visitor->trace(m_newAnimations); 733 visitor->trace(m_newAnimations);
735 visitor->trace(m_cancelledAnimationPlayers); 734 visitor->trace(m_cancelledAnimationPlayers);
736 #endif 735 #endif
737 } 736 }
738 737
739 } // namespace blink 738 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/animation/css/CSSAnimations.h ('k') | Source/core/css/resolver/StyleResolver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698