haikuwebkit/LayoutTests/transitions/transition-to-from-auto.html

64 lines
1.2 KiB
HTML
Raw Permalink Normal View History

Remove the legacy animation code https://bugs.webkit.org/show_bug.cgi?id=216608 Reviewed by Dean Jackson. Source/WebCore: We remove the legacy animation code found in Source/WebCore/page/animation/, save for CSSPropertyAnimation which is also used by the new Web Animations engine and now moved to Source/WebCore/animation/. Since we now have a single animation engine, the runtime flags to optionally enable the Web Animations engine are not needed anymore and removed as well. We also remove some testing utilities and some RenderLayerBacking methods specific to accelerated transitions which the new animation engine does not use. * CMakeLists.txt: * Headers.cmake: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * animation/Animatable.idl: * animation/AnimationEffect.idl: * animation/AnimationPlaybackEvent.idl: * animation/AnimationPlaybackEventInit.idl: * animation/AnimationTimeline.idl: * animation/CSSAnimation.idl: * animation/CSSPropertyAnimation.cpp: Renamed from Source/WebCore/page/animation/CSSPropertyAnimation.cpp. (WebCore::PropertyWrapperVisitedAffectedColor::PropertyWrapperVisitedAffectedColor): * animation/CSSPropertyAnimation.h: Renamed from Source/WebCore/page/animation/CSSPropertyAnimation.h. * animation/CSSTransition.idl: * animation/DocumentAnimations.idl: * animation/DocumentOrShadowRootAnimations.idl: * animation/DocumentTimeline.idl: * animation/KeyframeEffect.idl: * animation/WebAnimation.idl: * animation/WebAnimationTypes.h: * css/CSSComputedStyleDeclaration.cpp: (WebCore::computeRenderStyleForProperty): * dom/Document.cpp: (WebCore::Document::resolveStyle): (WebCore::Document::didBecomeCurrentDocumentInFrame): (WebCore::Document::willBeRemovedFromFrame): (WebCore::Document::implicitClose): (WebCore::Document::resume): * dom/Element.cpp: (WebCore::Element::removedFromAncestor): * dom/PseudoElement.cpp: (WebCore::PseudoElement::clearHostElement): * history/CachedFrame.cpp: (WebCore::CachedFrame::destroy): * page/Frame.cpp: (WebCore::Frame::Frame): (WebCore::Frame::clearTimers): (WebCore::Frame::resumeActiveDOMObjectsAndAnimations): * page/Frame.h: * page/FrameView.cpp: (WebCore::FrameView::didDestroyRenderTree): (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive): * page/FrameViewLayoutContext.cpp: (WebCore::FrameViewLayoutContext::layout): * page/Page.cpp: (WebCore::Page::handleLowModePowerChange): (WebCore::Page::setIsVisibleInternal): (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged): * page/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setWebAnimationsEnabled): Deleted. (WebCore::RuntimeEnabledFeatures::webAnimationsEnabled const): Deleted. (WebCore::RuntimeEnabledFeatures::setWebAnimationsCSSIntegrationEnabled): Deleted. (WebCore::RuntimeEnabledFeatures::webAnimationsCSSIntegrationEnabled const): Deleted. * page/animation/AnimationBase.cpp: Removed. * page/animation/AnimationBase.h: Removed. * page/animation/CSSAnimationController.cpp: Removed. * page/animation/CSSAnimationController.h: Removed. * page/animation/CSSAnimationControllerPrivate.h: Removed. * page/animation/CompositeAnimation.cpp: Removed. * page/animation/CompositeAnimation.h: Removed. * page/animation/ImplicitAnimation.cpp: Removed. * page/animation/ImplicitAnimation.h: Removed. * page/animation/KeyframeAnimation.cpp: Removed. * page/animation/KeyframeAnimation.h: Removed. * platform/graphics/GraphicsLayer.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::isKeyframe): (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): * rendering/RenderElement.cpp: (WebCore::RenderElement::animatedStyle): * rendering/RenderElement.h: (WebCore::RenderElement::startTransition): Deleted. (WebCore::RenderElement::transitionPaused): Deleted. (WebCore::RenderElement::transitionFinished): Deleted. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::currentTransform const): (WebCore::RenderLayer::calculateClipRects const): * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::updateGeometry): (WebCore::RenderLayerBacking::notifyAnimationStarted): (WebCore::RenderLayerBacking::startTransition): Deleted. (WebCore::RenderLayerBacking::transitionPaused): Deleted. (WebCore::RenderLayerBacking::transitionFinished): Deleted. * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::flushPendingLayerChanges): (WebCore::RenderLayerCompositor::updateCompositingLayers): (WebCore::RenderLayerCompositor::requiresCompositingForAnimation const): (WebCore::RenderLayerCompositor::isRunningTransformAnimation const): * rendering/RenderLayerModelObject.cpp: (WebCore::RenderLayerModelObject::startTransition): Deleted. (WebCore::RenderLayerModelObject::transitionPaused): Deleted. (WebCore::RenderLayerModelObject::transitionFinished): Deleted. * rendering/RenderLayerModelObject.h: * rendering/RenderObject.h: (WebCore::RenderObject::legacyAnimation const): Deleted. * rendering/updating/RenderTreeUpdater.cpp: (WebCore::RenderTreeUpdater::tearDownRenderers): * style/StyleAdjuster.cpp: * style/StyleTreeResolver.cpp: (WebCore::Style::TreeResolver::createAnimatedElementUpdate): * testing/InternalSettings.cpp: (WebCore::InternalSettings::webAnimationsCSSIntegrationEnabled): Deleted. * testing/InternalSettings.h: * testing/InternalSettings.idl: * testing/Internals.cpp: (WebCore::Internals::numberOfActiveAnimations const): (WebCore::Internals::animationsAreSuspended const): (WebCore::Internals::animationsInterval const): (WebCore::Internals::suspendAnimations const): (WebCore::Internals::resumeAnimations const): (WebCore::Internals::acceleratedAnimationsForElement): (WebCore::Internals::numberOfAnimationTimelineInvalidations const): (WebCore::Internals::pauseAnimationAtTimeOnElement): Deleted. (WebCore::Internals::pauseAnimationAtTimeOnPseudoElement): Deleted. (WebCore::Internals::pauseTransitionAtTimeOnElement): Deleted. (WebCore::Internals::pauseTransitionAtTimeOnPseudoElement): Deleted. * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Since we now have a single animation engine, the runtime flags to optionally enable the Web Animations engine are not needed anymore and are now removed. * Shared/WebPreferencesExperimental.yaml: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesSetWebAnimationsEnabled): Deleted. (WKPreferencesGetWebAnimationsEnabled): Deleted. (WKPreferencesSetWebAnimationsCSSIntegrationEnabled): Deleted. (WKPreferencesGetWebAnimationsCSSIntegrationEnabled): Deleted. * UIProcess/API/C/WKPreferencesRefPrivate.h: * UIProcess/API/Cocoa/WKPreferences.mm: (-[WKPreferences _setWebAnimationsCSSIntegrationEnabled:]): Deleted. (-[WKPreferences _webAnimationsCSSIntegrationEnabled]): Deleted. * UIProcess/API/Cocoa/WKPreferencesPrivate.h: * WebProcess/InjectedBundle/InjectedBundle.cpp: (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): (WebKit::InjectedBundle::setWebAnimationsEnabled): Deleted. (WebKit::InjectedBundle::setWebAnimationsCSSIntegrationEnabled): Deleted. * WebProcess/InjectedBundle/InjectedBundle.h: Source/WebKitLegacy/mac: Since we now have a single animation engine, the runtime flags to optionally enable the Web Animations engine are not needed anymore and are now removed. * WebView/WebPreferenceKeysPrivate.h: * WebView/WebPreferences.mm: (+[WebPreferences initialize]): (-[WebPreferences webAnimationsEnabled]): Deleted. (-[WebPreferences setWebAnimationsEnabled:]): Deleted. (-[WebPreferences webAnimationsCSSIntegrationEnabled]): Deleted. (-[WebPreferences setWebAnimationsCSSIntegrationEnabled:]): Deleted. * WebView/WebPreferencesPrivate.h: * WebView/WebView.mm: (-[WebView _preferencesChanged:]): Source/WebKitLegacy/win: Since we now have a single animation engine, the runtime flags to optionally enable the Web Animations engine are not needed anymore and are now removed. * Interfaces/IWebFramePrivate.idl: * Interfaces/IWebPreferencesPrivate.idl: * WebFrame.cpp: (WebFrame::resumeAnimations): Deleted. (WebFrame::suspendAnimations): Deleted. (WebFrame::pauseAnimation): Deleted. (WebFrame::pauseTransition): Deleted. (WebFrame::numberOfActiveAnimations): Deleted. * WebFrame.h: * WebPreferenceKeysPrivate.h: * WebPreferences.cpp: (WebPreferences::initializeDefaultSettings): (WebPreferences::webAnimationsCSSIntegrationEnabled): Deleted. (WebPreferences::setWebAnimationsCSSIntegrationEnabled): Deleted. (WebPreferences::setWebAnimationsEnabled): Deleted. (WebPreferences::webAnimationsEnabled): Deleted. * WebPreferences.h: * WebView.cpp: (WebView::notifyPreferencesChanged): Tools: Since we now have a single animation engine, the runtime flags to optionally enable the Web Animations engine are not needed anymore and are now removed. * DumpRenderTree/TestOptions.cpp: (TestOptions::TestOptions): (TestOptions::webViewIsCompatibleWithOptions const): * DumpRenderTree/TestOptions.h: * DumpRenderTree/mac/DumpRenderTree.mm: (enableExperimentalFeatures): (setWebPreferencesForTestOptions): * DumpRenderTree/win/DumpRenderTree.cpp: (enableExperimentalFeatures): (setWebPreferencesForTestOptions): LayoutTests: Remove any use of now-removed testing methods and some runtime flags from layout tests. * animations/legacy-encoding-timing-function.html: * animations/resources/animation-test-helpers.js: (pauseAnimationAtTimeOnElement): * http/tests/contentextensions/css-display-none-keyframe.html: * imported/blink/transitions/resources/opacity-transform-transitions-inside-iframe-inner.html: Removed. * transitions/background-position-transitions.html: * transitions/background-transitions.html: * transitions/blendmode-transitions.html: * transitions/border-radius-transition.html: * transitions/clip-path-path-transitions.html: * transitions/clip-path-transitions.html: * transitions/clip-transition.html: * transitions/color-transition-all.html: * transitions/color-transition-premultiplied.html: * transitions/color-transition-rounding.html: * transitions/cross-fade-background-image.html: * transitions/cross-fade-border-image.html: * transitions/cubic-bezier-overflow-color.html: * transitions/cubic-bezier-overflow-length.html: * transitions/cubic-bezier-overflow-shadow.html: * transitions/cubic-bezier-overflow-svg-length.html: * transitions/cubic-bezier-overflow-transform.html: * transitions/default-timing-function.html: * transitions/delay.html: * transitions/flex-transitions.html: * transitions/font-family-during-transition.html: * transitions/frames-timing-function.html: * transitions/interrupted-all-transition.html: * transitions/longhand-vs-shorthand-initial.html: * transitions/mask-transitions.html: * transitions/min-max-width-height-transitions.html: * transitions/mismatched-shadow-styles.html: * transitions/mismatched-shadow-transitions.html: * transitions/mixed-type.html: * transitions/move-after-transition.html: * transitions/multiple-background-size-transitions.html: * transitions/multiple-background-transitions.html: * transitions/multiple-mask-transitions.html: * transitions/multiple-shadow-transitions.html: * transitions/negative-delay.html: * transitions/opacity-transition-zindex.html: * transitions/resources/transition-test-helpers.js: * transitions/shape-outside-transitions.html: * transitions/shorthand-border-transitions.html: * transitions/shorthand-transitions.html: * transitions/steps-timing-function.html: * transitions/svg-layout-transition.html: * transitions/svg-text-shadow-transition.html: * transitions/svg-transitions.html: * transitions/text-indent-transition.html: * transitions/transform-op-list-match.html: * transitions/transform-op-list-no-match.html: * transitions/transition-end-event-rendering.html: * transitions/transition-hit-test-transform.html: * transitions/transition-hit-test.html: * transitions/transition-in-delay-phase.html: * transitions/transition-on-element-with-content.html: * transitions/transition-shorthand-delay.html: * transitions/transition-timing-function.html: * transitions/transition-to-from-auto.html: * transitions/transition-to-from-undefined.html: * transitions/visited-link-color.html: * transitions/zero-duration-in-list.html: * transitions/zero-duration-with-non-zero-delay-start.html: * webanimations/accelerated-animation-interruption-display-none.html: * webanimations/accelerated-animation-removal-upon-transition-completion.html: * webanimations/accelerated-animation-suspension.html: * webanimations/accelerated-transition-by-removing-property.html: * webanimations/accessing-current-time-after-clearing-css-animation-effect.html: * webanimations/accessing-current-time-after-finished-css-animation-target-removal.html: * webanimations/css-animation-effect-target-change-and-animation-removal-crash.html: * webanimations/css-animation-effect-target-change-and-get-keyframes-crash.html: * webanimations/css-animations.html: * webanimations/css-transition-in-flight-reversal-accelerated.html: * webanimations/empty-keyframes-crash.html: * webanimations/partly-accelerated-transition-by-removing-property.html: * webanimations/setting-css-animation-none-after-clearing-effect.html: * webanimations/setting-css-animation-timing-property-via-style-after-clearing-effect.html: Canonical link: https://commits.webkit.org/229462@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@267188 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-09-17 12:39:28 +00:00
<!DOCTYPE html>
<html>
<head>
<style>
.box {
position: relative;
height: 100px;
width: 100px;
margin: 10px;
background-color: gray;
transition: left 2s linear;
}
#test1 {
left: 100px;
}
body.final #test1 {
left: auto;
}
#test2 {
left: auto;
}
body.final #test2 {
left: 100px
}
#test3 {
left: 0;
}
body.final #test3 {
left: 100px
}
</style>
<script src="resources/transition-test-helpers.js"></script>
<script type="text/javascript">
const expectedValues = [
// [time, element-id, property, expected-value, tolerance]
[1, 'test3', 'left', '50', 2],
];
function setupTest()
{
document.body.classList.add('final');
[Web Animations] Implement "Starting of transitions" section from CSS Transitions https://bugs.webkit.org/show_bug.cgi?id=186517 <rdar://problem/41000798> Reviewed by Dean Jackson. LayoutTests/imported/mozilla: Mark some progressions in the Mozilla CSS Animations and CSS Transitions tests. * css-transitions/test_animation-cancel-expected.txt: * css-transitions/test_animation-ready-expected.txt: Source/WebCore: We implement the whole section at https://drafts.csswg.org/css-transitions-1/#starting so that we have spec-compliant starting of CSS Transitions. To correctly implement this we now maintain two maps of transitions for a given property, a set of running transitions (m_elementToRunningCSSTransitionByCSSPropertyID) and a set of completed transition (m_elementToCompletedCSSTransitionByCSSPropertyID). * animation/AnimationTimeline.cpp: (WebCore::removeCSSTransitionFromMap): Add a utility to remove a CSSTransition from one of the two HashMap<Element*, HashMap<CSSPropertyID, RefPtr<CSSTransition>>> managed by AnimationTimeline (m_elementToRunningCSSTransitionByCSSPropertyID and m_elementToCompletedCSSTransitionByCSSPropertyID). (WebCore::AnimationTimeline::animationWasRemovedFromElement): Use the new removeCSSTransitionFromMap() utility. (WebCore::AnimationTimeline::updateCSSAnimationsForElement): We rename "oldStyle" to "currentStyle" to align with the naming used by updateCSSAnimationsForElement(). We also remove an initial check that has been pushed up to Style::TreeResolver::createAnimatedElementUpdate(). (WebCore::propertyInStyleMatchesValueForTransitionInMap): When running the steps mandated by the spec we often need to check whether a given property has a transition in an AnimationList that matches the value used in a given RenderStyle. (WebCore::transitionCombinedDuration): We need to compute the combined duration twice while running the steps mandated by the spec, so we have a dedicated utility. (WebCore::transitionMatchesProperty): New utility that indicates whether a WebCore::Animation matches a given property, by virtue of targeting it directly, targeting a shorthand for which this property is a longhand, or targeting "all". (WebCore::AnimationTimeline::updateCSSTransitionsForElement): This is where all of the new implementation for starting transitions happens. We implement the steps as they appear in the spec. (WebCore::shouldBackingAnimationBeConsideredForCSSTransition): Deleted. * animation/AnimationTimeline.h: * animation/CSSAnimation.cpp: (WebCore::CSSAnimation::syncPropertiesWithBackingAnimation): Since only CSS Animations respect the delay and duration values as parsed directly in a WebCore:Animation object, we move code that was previously in DeclarativeAnimation::syncPropertiesWithBackingAnimation to this method. CSS Transitions set those values based on the delay and duration parameters passed to CSSTransition::create() and computed in AnimationTimeline::updateCSSTransitionsForElement(). * animation/CSSTransition.cpp: (WebCore::CSSTransition::create): Since the transition's delay and duration is computed in AnimationTimeline::updateCSSTransitionsForElement(), we now require them to be passed when creating a CSSTransition and pass those to the new setTimingProperties() function. We also expect a target style and reversing-adjusted start style, as well as a reversing-shortening factor. (WebCore::CSSTransition::CSSTransition): (WebCore::CSSTransition::resolve): We need to be able to query the last style computed by a call to resolve() from AnimationTimeline::updateCSSTransitionsForElement(), we subclass this newly-virtual WebAnimation method and clone the style after we blended the property targeted by this transition. (WebCore::CSSTransition::setTimingProperties): Set the transition delay and duration as provided in the call to create(). (WebCore::CSSTransition::canBeListed const): Fix a crash that was found while working on this bug where we could access a null effect. (WebCore::CSSTransition::initialize): Deleted. (WebCore::CSSTransition::matchesBackingAnimationAndStyles const): Deleted. * animation/CSSTransition.h: * animation/DeclarativeAnimation.cpp: (WebCore::DeclarativeAnimation::syncPropertiesWithBackingAnimation): This virtual method now has an empty definition since the timing properties are now only set for CSSAnimation. * animation/KeyframeEffectReadOnly.cpp: (WebCore::KeyframeEffectReadOnly::stylesWouldYieldNewCSSTransitionsBlendingKeyframes const): Deleted. * animation/KeyframeEffectReadOnly.h: * animation/WebAnimation.h: * page/animation/CSSPropertyAnimation.cpp: (WebCore::AnimationPropertyWrapperBase::canInterpolate const): Since we need to be able to determine whether some property values can be interpolated, we add a new canInterpolate() method to the base wrapper class so the cases where we can't interpolate values (length with an "auto" type) may return false. (WebCore::LengthPropertyWrapper::LengthPropertyWrapper): Lengths can only be interpolated if both the start and end values are not "auto". (WebCore::LengthVariantPropertyWrapper::LengthVariantPropertyWrapper): (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap): (WebCore::CSSPropertyAnimation::canPropertyBeInterpolated): * page/animation/CSSPropertyAnimation.h: * style/StyleTreeResolver.cpp: (WebCore::Style::TreeResolver::createAnimatedElementUpdate): Move a check found in both updateCSSAnimationsForElement() and updateCSSTransitionsForElement() to their shared call site. LayoutTests: Implementing the CSS Transitions spec for starting transitions highlighted a couple of issues with existing tests. * TestExpectations: The test imported/mozilla/css-transitions/test_animation-ready.html now passes reliably. * animations/transition-and-animation-3-expected.txt: * animations/transition-and-animation-3.html: This test was mistakenly expecting a retargeted transition to pick up from the underlying value (100px) rather than the interrupted transition's value (~0px). We update the test to be more obvious about what it is testing and with the correct behavior per the spec. * transitions/background-position-transitions-expected.txt: * transitions/background-position-transitions.html: Shorthand properties are expected to yield a transitiong for each shorthand property, so we update this test to check the background-position shorthand properties. * transitions/resources/transition-test-helpers.js: We uncovered a crash, which is not new to this patch, that forces us to work around using the background-position longhand properties. So we work around this by reading from the shorthand background-position property and manually parsing the value. Fixing this crash is tracked by webkit.org/b/186766. * transitions/transition-to-from-auto-expected.txt: * transitions/transition-to-from-auto.html: Update the test to check that we only yield transitions when interpolating between non-auto values, as mandated by the spec. Canonical link: https://commits.webkit.org/202049@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@232946 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-06-18 21:20:47 +00:00
result += `Total number of animations: ${document.getAnimations().length} <br>`;
}
runTransitionTest(expectedValues, setupTest, usePauseAPI);
</script>
</head>
<body>
<div id="test1" class="box"></div>
<div id="test2" class="box"></div>
<div id="test3" class="box"></div>
<div id="result"></div>
</body>
</html>