Summary: | Toggling animation-play-state can re-start a finished animation | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | Simon Fraser (smfr) <simon.fraser> | ||||||||
Component: | Animations | Assignee: | Simon Fraser (smfr) <simon.fraser> | ||||||||
Status: | RESOLVED FIXED | ||||||||||
Severity: | Normal | CC: | commit-queue, dino, dstockwell, ryanhaddad, simon.fraser | ||||||||
Priority: | P2 | ||||||||||
Version: | WebKit Nightly Build | ||||||||||
Hardware: | Unspecified | ||||||||||
OS: | Unspecified | ||||||||||
Attachments: |
|
Created attachment 277219 [details]
Patch
Created attachment 277273 [details]
Patch
Comment on attachment 277273 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=277273&action=review > Source/WebCore/ChangeLog:14 > + Fix by keeping state for keyframe animations in the Done state in the m_keyframeAnimations > + map. This allows for the removal of the You forgot to end this sentence This change appears to have caused fast/layers/no-clipping-overflow-hidden-added-after-transform.html to fail on mac-wk1 debug https://build.webkit.org/results/Apple%20El%20Capitan%20Debug%20WK1%20%28Tests%29/r200051%20%284689%29/results.html |
Created attachment 276694 [details] Testcase In the attached test case, hover the box and wait for the animation to finish. Then un-hover and re-hover. Note how the animation restarts. In other browsers, the animation does not restart, which is correct because the animation-name property still applies to the element. Our mistake is to completely remove finished animations in CompositeAnimation::updateKeyframeAnimations(). We need to keep some state around to know that we shouldn't re-run this animation when play-state changes.