Diff
Modified: trunk/Source/WebCore/CMakeLists.txt (237852 => 237853)
--- trunk/Source/WebCore/CMakeLists.txt 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/CMakeLists.txt 2018-11-06 11:15:30 UTC (rev 237853)
@@ -482,9 +482,7 @@
animation/Animatable.idl
animation/AnimationEffect.idl
- animation/AnimationEffectTiming.idl
animation/EffectTiming.idl
- animation/AnimationEffectTimingReadOnly.idl
animation/AnimationPlaybackEvent.idl
animation/AnimationPlaybackEventInit.idl
animation/AnimationTimeline.idl
@@ -499,6 +497,7 @@
animation/KeyframeAnimationOptions.idl
animation/KeyframeEffect.idl
animation/KeyframeEffectOptions.idl
+ animation/OptionalEffectTiming.idl
animation/PlaybackDirection.idl
animation/WebAnimation.idl
Modified: trunk/Source/WebCore/ChangeLog (237852 => 237853)
--- trunk/Source/WebCore/ChangeLog 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/ChangeLog 2018-11-06 11:15:30 UTC (rev 237853)
@@ -1,5 +1,84 @@
2018-11-06 Antoine Quint <grao...@apple.com>
+ [Web Animations] Implement getTiming() and updateTiming()
+ https://bugs.webkit.org/show_bug.cgi?id=186511
+ <rdar://problem/41000677>
+
+ Reviewed by Dean Jackson.
+
+ The Web Animations API has been further simplified by removing the AnimationEffectTiming and AnimationEffectTimingReadOnly
+ interfaces, removing the "timing" property on AnimationEffect replacing it with getTiming() and updateTiming() methods. This
+ does not change the features of the API but simply how they are exposed.
+
+ * CMakeLists.txt:
+ * DerivedSources.make:
+ * Sources.txt:
+ * WebCore.xcodeproj/project.pbxproj:
+ * animation/AnimationEffect.cpp:
+ (WebCore::AnimationEffect::AnimationEffect):
+ (WebCore::AnimationEffect::~AnimationEffect):
+ (WebCore::AnimationEffect::phase const):
+ (WebCore::AnimationEffect::activeTime const):
+ (WebCore::AnimationEffect::overallProgress const):
+ (WebCore::AnimationEffect::simpleIterationProgress const):
+ (WebCore::AnimationEffect::currentIteration const):
+ (WebCore::AnimationEffect::currentDirection const):
+ (WebCore::AnimationEffect::transformedProgress const):
+ (WebCore::AnimationEffect::getTiming):
+ (WebCore::AnimationEffect::getComputedTiming):
+ (WebCore::AnimationEffect::updateTiming):
+ (WebCore::AnimationEffect::setIterationStart):
+ (WebCore::AnimationEffect::setIterations):
+ (WebCore::AnimationEffect::endTime const):
+ (WebCore::AnimationEffect::setDelay):
+ (WebCore::AnimationEffect::setEndDelay):
+ (WebCore::AnimationEffect::setFill):
+ (WebCore::AnimationEffect::setIterationDuration):
+ (WebCore::AnimationEffect::setDirection):
+ (WebCore::AnimationEffect::setTimingFunction):
+ (WebCore::AnimationEffect::activeDuration const):
+ * animation/AnimationEffect.h:
+ (WebCore::AnimationEffect::delay const):
+ (WebCore::AnimationEffect::endDelay const):
+ (WebCore::AnimationEffect::fill const):
+ (WebCore::AnimationEffect::iterationStart const):
+ (WebCore::AnimationEffect::iterations const):
+ (WebCore::AnimationEffect::iterationDuration const):
+ (WebCore::AnimationEffect::direction const):
+ (WebCore::AnimationEffect::timingFunction const):
+ * animation/AnimationEffect.idl:
+ * animation/AnimationEffectTiming.idl: Removed.
+ * animation/AnimationEffectTimingReadOnly.cpp: Removed.
+ * animation/AnimationEffectTimingReadOnly.h: Removed.
+ * animation/AnimationEffectTimingReadOnly.idl: Removed.
+ * animation/CSSAnimation.cpp:
+ (WebCore::CSSAnimation::syncPropertiesWithBackingAnimation):
+ * animation/CSSTransition.cpp:
+ (WebCore::CSSTransition::setTimingProperties):
+ * animation/DeclarativeAnimation.cpp:
+ (WebCore::DeclarativeAnimation::invalidateDOMEvents):
+ * animation/DocumentTimeline.cpp:
+ * animation/EffectTiming.idl:
+ * animation/KeyframeEffect.cpp:
+ (WebCore::KeyframeEffect::create):
+ (WebCore::KeyframeEffect::KeyframeEffect):
+ (WebCore::KeyframeEffect::copyPropertiesFromSource):
+ (WebCore::KeyframeEffect::setAnimatedPropertiesInStyle):
+ (WebCore::KeyframeEffect::applyPendingAcceleratedActions):
+ (WebCore::KeyframeEffect::backingAnimationForCompositedRenderer const):
+ * animation/KeyframeEffect.h:
+ * animation/OptionalEffectTiming.h: Renamed from Source/WebCore/animation/AnimationEffectTiming.h.
+ * animation/OptionalEffectTiming.idl: Renamed from Source/WebCore/animation/AnimationEffectTiming.cpp.
+ * animation/WebAnimation.cpp:
+ (WebCore::WebAnimation::effectTimingDidChange):
+ (WebCore::WebAnimation::updatePlaybackRate):
+ * animation/WebAnimation.h:
+ (WebCore::WebAnimation::isRelevant const):
+ * bindings/js/JSAnimationEffectTimingReadOnlyCustom.cpp: Removed.
+ * bindings/js/WebCoreBuiltinNames.h:
+
+2018-11-06 Antoine Quint <grao...@apple.com>
+
[Web Animations] Update the Web Animations API to remove all the ReadOnly interfaces
https://bugs.webkit.org/show_bug.cgi?id=186512
<rdar://problem/41000691>
Modified: trunk/Source/WebCore/DerivedSources.make (237852 => 237853)
--- trunk/Source/WebCore/DerivedSources.make 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/DerivedSources.make 2018-11-06 11:15:30 UTC (rev 237853)
@@ -398,9 +398,7 @@
$(WebCore)/accessibility/AriaAttributes.idl \
$(WebCore)/animation/Animatable.idl \
$(WebCore)/animation/AnimationEffect.idl \
- $(WebCore)/animation/AnimationEffectTiming.idl \
$(WebCore)/animation/EffectTiming.idl \
- $(WebCore)/animation/AnimationEffectTimingReadOnly.idl \
$(WebCore)/animation/AnimationPlaybackEvent.idl \
$(WebCore)/animation/AnimationPlaybackEventInit.idl \
$(WebCore)/animation/AnimationTimeline.idl \
@@ -415,6 +413,7 @@
$(WebCore)/animation/KeyframeAnimationOptions.idl \
$(WebCore)/animation/KeyframeEffect.idl \
$(WebCore)/animation/KeyframeEffectOptions.idl \
+ $(WebCore)/animation/OptionalEffectTiming.idl \
$(WebCore)/animation/PlaybackDirection.idl \
$(WebCore)/animation/WebAnimation.idl \
$(WebCore)/crypto/CryptoAlgorithmParameters.idl \
Modified: trunk/Source/WebCore/Sources.txt (237852 => 237853)
--- trunk/Source/WebCore/Sources.txt 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/Sources.txt 2018-11-06 11:15:30 UTC (rev 237853)
@@ -349,8 +349,6 @@
accessibility/AccessibleSetValueEvent.cpp
animation/AnimationEffect.cpp
-animation/AnimationEffectTiming.cpp
-animation/AnimationEffectTimingReadOnly.cpp
animation/AnimationPlaybackEvent.cpp
animation/AnimationTimeline.cpp
animation/CSSAnimation.cpp
@@ -371,7 +369,6 @@
bindings/js/IDBBindingUtilities.cpp
bindings/js/JSAuthenticatorResponseCustom.cpp
bindings/js/JSAnimationEffectCustom.cpp
-bindings/js/JSAnimationEffectTimingReadOnlyCustom.cpp
bindings/js/JSAnimationTimelineCustom.cpp
bindings/js/JSAttrCustom.cpp
bindings/js/JSAudioTrackCustom.cpp
@@ -2451,9 +2448,7 @@
JSAnalyserNode.cpp
JSAnimationEvent.cpp
JSAnimationEffect.cpp
-JSAnimationEffectTiming.cpp
JSEffectTiming.cpp
-JSAnimationEffectTimingReadOnly.cpp
JSAnimationPlaybackEvent.cpp
JSAnimationPlaybackEventInit.cpp
JSAnimationTimeline.cpp
@@ -2860,12 +2855,13 @@
JSOfflineAudioContext.cpp
JSOffscreenCanvas.cpp
JSOffscreenCanvasRenderingContext2D.cpp
-JSPaintRenderingContext2D.cpp
+JSOptionalEffectTiming.cpp
JSOscillatorNode.cpp
JSOverconstrainedError.cpp
JSOverconstrainedErrorEvent.cpp
JSOverflowEvent.cpp
JSPageTransitionEvent.cpp
+JSPaintRenderingContext2D.cpp
JSPannerNode.cpp
JSParentNode.cpp
JSPath2D.cpp
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (237852 => 237853)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2018-11-06 11:15:30 UTC (rev 237853)
@@ -2034,6 +2034,8 @@
7116E2CF1FED765B00C06FDE /* JSComputedEffectTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 7116E2CE1FED765200C06FDE /* JSComputedEffectTiming.h */; settings = {ATTRIBUTES = (Private, ); }; };
7117445914BC34EC00EE5FC8 /* SVGTextMetricsBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7117445714BC34E200EE5FC8 /* SVGTextMetricsBuilder.h */; };
7118FED515685CC60030B79A /* JSSVGViewSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 7118FED315685CC60030B79A /* JSSVGViewSpec.h */; };
+ 71207340216DFB0000C78329 /* OptionalEffectTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 7120733D216DFAF100C78329 /* OptionalEffectTiming.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 71207343216DFB4100C78329 /* JSOptionalEffectTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 71207341216DFB3100C78329 /* JSOptionalEffectTiming.h */; settings = {ATTRIBUTES = (Private, ); }; };
71247E371FEA5F86008C08CE /* CompositeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 71247E351FEA5F81008C08CE /* CompositeOperation.h */; settings = {ATTRIBUTES = (Private, ); }; };
71247E381FEA5F86008C08CE /* IterationCompositeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 71247E331FEA5F80008C08CE /* IterationCompositeOperation.h */; settings = {ATTRIBUTES = (Private, ); }; };
71247E391FEA5F86008C08CE /* KeyframeAnimationOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 71247E2F1FEA5F7D008C08CE /* KeyframeAnimationOptions.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -2050,17 +2052,13 @@
713171341FBE78DB00F758DE /* CSSPropertyBlendingClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 713171321FBE78C500F758DE /* CSSPropertyBlendingClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
7132445120109DA500AE7FB2 /* WebAnimationUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 7132444F20109D9B00AE7FB2 /* WebAnimationUtilities.h */; settings = {ATTRIBUTES = (Private, ); }; };
7134496E146941B300720312 /* SVGLengthContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 7134496C146941B300720312 /* SVGLengthContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 71495DD6202B065700ADFD34 /* AnimationEffectTimingReadOnly.h in Headers */ = {isa = PBXBuildFile; fileRef = 71495DD5202B064300ADFD34 /* AnimationEffectTimingReadOnly.h */; settings = {ATTRIBUTES = (Private, ); }; };
71495DDB202B06F100ADFD34 /* JSEffectTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 71495DDA202B06DE00ADFD34 /* JSEffectTiming.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 71495DDC202B06F700ADFD34 /* JSAnimationEffectTimingReadOnly.h in Headers */ = {isa = PBXBuildFile; fileRef = 71495DD7202B06DA00ADFD34 /* JSAnimationEffectTimingReadOnly.h */; settings = {ATTRIBUTES = (Private, ); }; };
714C7C661FDAD2A100F2BEE1 /* AnimationPlaybackEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 714C7C651FDAD27B00F2BEE1 /* AnimationPlaybackEvent.h */; settings = {ATTRIBUTES = (Private, ); }; };
714C7C671FDAD2A900F2BEE1 /* AnimationPlaybackEventInit.h in Headers */ = {isa = PBXBuildFile; fileRef = 714C7C621FDAD27A00F2BEE1 /* AnimationPlaybackEventInit.h */; settings = {ATTRIBUTES = (Private, ); }; };
714C7C6C1FDADAF300F2BEE1 /* JSAnimationPlaybackEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 714C7C6A1FDADAD500F2BEE1 /* JSAnimationPlaybackEvent.h */; };
714C7C6D1FDADAF600F2BEE1 /* JSAnimationPlaybackEventInit.h in Headers */ = {isa = PBXBuildFile; fileRef = 714C7C6B1FDADAD500F2BEE1 /* JSAnimationPlaybackEventInit.h */; };
71537A01146BD9D7008BD615 /* SVGPathData.h in Headers */ = {isa = PBXBuildFile; fileRef = 715379FF146BD9D6008BD615 /* SVGPathData.h */; };
- 71556CB31F9F09BA00E78D08 /* AnimationEffectTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 71556CAE1F9F099D00E78D08 /* AnimationEffectTiming.h */; settings = {ATTRIBUTES = (Private, ); }; };
71556CB41F9F09BA00E78D08 /* KeyframeEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 71556CAA1F9F099B00E78D08 /* KeyframeEffect.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 71556CBD1F9F0A4900E78D08 /* JSAnimationEffectTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 71556CB91F9F09FD00E78D08 /* JSAnimationEffectTiming.h */; };
71556CBE1F9F0A4900E78D08 /* JSKeyframeEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 71556CB71F9F09FC00E78D08 /* JSKeyframeEffect.h */; };
715AD7202050513200D592DC /* DeclarativeAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 715AD71D2050512400D592DC /* DeclarativeAnimation.h */; settings = {ATTRIBUTES = (Private, ); }; };
715AD7212050513F00D592DC /* CSSTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 7123C186204739BA00789392 /* CSSTransition.h */; };
@@ -9163,7 +9161,6 @@
71025EDC1F99F1A8004A250C /* JSDocumentTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDocumentTimeline.h; sourceTree = "<group>"; };
710FA74B1DEE576D004C715E /* controls-bar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode._javascript_; path = "controls-bar.js"; sourceTree = "<group>"; };
710FA74C1DEE577E004C715E /* controls-visibility-support.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode._javascript_; path = "controls-visibility-support.js"; sourceTree = "<group>"; };
- 7110F953202B67D500C466D7 /* JSAnimationEffectTimingReadOnlyCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAnimationEffectTimingReadOnlyCustom.cpp; sourceTree = "<group>"; };
7116E2C91FED75D000C06FDE /* ComputedEffectTiming.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ComputedEffectTiming.idl; sourceTree = "<group>"; };
7116E2CB1FED75D100C06FDE /* ComputedEffectTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ComputedEffectTiming.h; sourceTree = "<group>"; };
7116E2CD1FED765200C06FDE /* JSComputedEffectTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSComputedEffectTiming.cpp; sourceTree = "<group>"; };
@@ -9173,6 +9170,10 @@
7118FED215685CC60030B79A /* JSSVGViewSpec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGViewSpec.cpp; sourceTree = "<group>"; };
7118FED315685CC60030B79A /* JSSVGViewSpec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSVGViewSpec.h; sourceTree = "<group>"; };
711FB0751DC7688F00C4C708 /* placard-support.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode._javascript_; path = "placard-support.js"; sourceTree = "<group>"; };
+ 7120733D216DFAF100C78329 /* OptionalEffectTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionalEffectTiming.h; sourceTree = "<group>"; };
+ 7120733F216DFAF200C78329 /* OptionalEffectTiming.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = OptionalEffectTiming.idl; sourceTree = "<group>"; };
+ 71207341216DFB3100C78329 /* JSOptionalEffectTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSOptionalEffectTiming.h; sourceTree = "<group>"; };
+ 71207342216DFB3100C78329 /* JSOptionalEffectTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSOptionalEffectTiming.cpp; sourceTree = "<group>"; };
712157C01DCCCA0700AA7A92 /* macos-fullscreen-media-controls.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "macos-fullscreen-media-controls.css"; sourceTree = "<group>"; };
712157C11DCCCA0700AA7A92 /* macos-fullscreen-media-controls.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode._javascript_; path = "macos-fullscreen-media-controls.js"; sourceTree = "<group>"; };
7123C1822047399200789392 /* JSCSSTransition.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCSSTransition.cpp; sourceTree = "<group>"; };
@@ -9216,12 +9217,7 @@
714131481DC9D6EF00336107 /* js-files */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "js-files"; sourceTree = "<group>"; };
7146DF8B1DEFC2ED0046F98B /* tracks-panel.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "tracks-panel.css"; sourceTree = "<group>"; };
7146DF8C1DEFC2ED0046F98B /* tracks-panel.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode._javascript_; path = "tracks-panel.js"; sourceTree = "<group>"; };
- 71495DD2202B064100ADFD34 /* AnimationEffectTimingReadOnly.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AnimationEffectTimingReadOnly.idl; sourceTree = "<group>"; };
- 71495DD4202B064200ADFD34 /* AnimationEffectTimingReadOnly.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimationEffectTimingReadOnly.cpp; sourceTree = "<group>"; };
- 71495DD5202B064300ADFD34 /* AnimationEffectTimingReadOnly.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimationEffectTimingReadOnly.h; sourceTree = "<group>"; };
- 71495DD7202B06DA00ADFD34 /* JSAnimationEffectTimingReadOnly.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAnimationEffectTimingReadOnly.h; sourceTree = "<group>"; };
71495DD8202B06DC00ADFD34 /* JSEffectTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSEffectTiming.cpp; sourceTree = "<group>"; };
- 71495DD9202B06DD00ADFD34 /* JSAnimationEffectTimingReadOnly.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAnimationEffectTimingReadOnly.cpp; sourceTree = "<group>"; };
71495DDA202B06DE00ADFD34 /* JSEffectTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSEffectTiming.h; sourceTree = "<group>"; };
714C7C601FDAD27900F2BEE1 /* AnimationPlaybackEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimationPlaybackEvent.cpp; sourceTree = "<group>"; };
714C7C621FDAD27A00F2BEE1 /* AnimationPlaybackEventInit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimationPlaybackEventInit.h; sourceTree = "<group>"; };
@@ -9244,13 +9240,8 @@
71556CA81F9F099B00E78D08 /* KeyframeEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KeyframeEffect.cpp; sourceTree = "<group>"; };
71556CAA1F9F099B00E78D08 /* KeyframeEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyframeEffect.h; sourceTree = "<group>"; };
71556CAB1F9F099C00E78D08 /* KeyframeEffect.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = KeyframeEffect.idl; sourceTree = "<group>"; };
- 71556CAC1F9F099D00E78D08 /* AnimationEffectTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimationEffectTiming.cpp; sourceTree = "<group>"; };
- 71556CAE1F9F099D00E78D08 /* AnimationEffectTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimationEffectTiming.h; sourceTree = "<group>"; };
- 71556CAF1F9F099E00E78D08 /* AnimationEffectTiming.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AnimationEffectTiming.idl; sourceTree = "<group>"; };
71556CB61F9F09FC00E78D08 /* JSKeyframeEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSKeyframeEffect.cpp; sourceTree = "<group>"; };
71556CB71F9F09FC00E78D08 /* JSKeyframeEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSKeyframeEffect.h; sourceTree = "<group>"; };
- 71556CB91F9F09FD00E78D08 /* JSAnimationEffectTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAnimationEffectTiming.h; sourceTree = "<group>"; };
- 71556CBB1F9F09FE00E78D08 /* JSAnimationEffectTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAnimationEffectTiming.cpp; sourceTree = "<group>"; };
7157E3D11DC1EE4B0094550E /* scrubbing-support.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode._javascript_; path = "scrubbing-support.js"; sourceTree = "<group>"; };
7157F061150B6564006EAABD /* SVGAnimatedTransformList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedTransformList.cpp; sourceTree = "<group>"; };
715AD71D2050512400D592DC /* DeclarativeAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeclarativeAnimation.h; sourceTree = "<group>"; };
@@ -16132,12 +16123,8 @@
1221E0581C02B409006A1A00 /* Animation */ = {
isa = PBXGroup;
children = (
- 71556CBB1F9F09FE00E78D08 /* JSAnimationEffectTiming.cpp */,
- 71556CB91F9F09FD00E78D08 /* JSAnimationEffectTiming.h */,
71495DD8202B06DC00ADFD34 /* JSEffectTiming.cpp */,
71495DDA202B06DE00ADFD34 /* JSEffectTiming.h */,
- 71495DD9202B06DD00ADFD34 /* JSAnimationEffectTimingReadOnly.cpp */,
- 71495DD7202B06DA00ADFD34 /* JSAnimationEffectTimingReadOnly.h */,
714C7C691FDADAD500F2BEE1 /* JSAnimationPlaybackEvent.cpp */,
714C7C6A1FDADAD500F2BEE1 /* JSAnimationPlaybackEvent.h */,
714C7C681FDADAD400F2BEE1 /* JSAnimationPlaybackEventInit.cpp */,
@@ -16166,6 +16153,8 @@
71556CB71F9F09FC00E78D08 /* JSKeyframeEffect.h */,
71247E2D1FEA5F65008C08CE /* JSKeyframeEffectOptions.cpp */,
71247E2A1FEA5F62008C08CE /* JSKeyframeEffectOptions.h */,
+ 71207342216DFB3100C78329 /* JSOptionalEffectTiming.cpp */,
+ 71207341216DFB3100C78329 /* JSOptionalEffectTiming.h */,
712BE4871FE8685A002031CC /* JSPlaybackDirection.cpp */,
712BE4861FE86859002031CC /* JSPlaybackDirection.h */,
71025ED71F99F1A6004A250C /* JSWebAnimation.cpp */,
@@ -20016,14 +20005,8 @@
71EFCEDA202B388F00D7C411 /* AnimationEffect.cpp */,
71EFCED7202B388D00D7C411 /* AnimationEffect.h */,
71EFCED6202B388C00D7C411 /* AnimationEffect.idl */,
- 71556CAC1F9F099D00E78D08 /* AnimationEffectTiming.cpp */,
- 71556CAE1F9F099D00E78D08 /* AnimationEffectTiming.h */,
- 71556CAF1F9F099E00E78D08 /* AnimationEffectTiming.idl */,
712BE47C1FE86448002031CC /* EffectTiming.h */,
712BE47A1FE86447002031CC /* EffectTiming.idl */,
- 71495DD4202B064200ADFD34 /* AnimationEffectTimingReadOnly.cpp */,
- 71495DD5202B064300ADFD34 /* AnimationEffectTimingReadOnly.h */,
- 71495DD2202B064100ADFD34 /* AnimationEffectTimingReadOnly.idl */,
714C7C601FDAD27900F2BEE1 /* AnimationPlaybackEvent.cpp */,
714C7C651FDAD27B00F2BEE1 /* AnimationPlaybackEvent.h */,
714C7C641FDAD27B00F2BEE1 /* AnimationPlaybackEvent.idl */,
@@ -20063,6 +20046,8 @@
71556CAB1F9F099C00E78D08 /* KeyframeEffect.idl */,
71247E321FEA5F7F008C08CE /* KeyframeEffectOptions.h */,
71247E301FEA5F7E008C08CE /* KeyframeEffectOptions.idl */,
+ 7120733D216DFAF100C78329 /* OptionalEffectTiming.h */,
+ 7120733F216DFAF200C78329 /* OptionalEffectTiming.idl */,
712BE47E1FE8649D002031CC /* PlaybackDirection.h */,
712BE47F1FE8649E002031CC /* PlaybackDirection.idl */,
71025EC31F99F096004A250C /* WebAnimation.cpp */,
@@ -20229,7 +20214,6 @@
isa = PBXGroup;
children = (
71EFCEDE202B39C700D7C411 /* JSAnimationEffectCustom.cpp */,
- 7110F953202B67D500C466D7 /* JSAnimationEffectTimingReadOnlyCustom.cpp */,
71025ED51F99F147004A250C /* JSAnimationTimelineCustom.cpp */,
BC2ED6BB0C6BD2F000920BFF /* JSAttrCustom.cpp */,
BE6DF70E171CA2DA00DD52B8 /* JSAudioTrackCustom.cpp */,
@@ -27635,9 +27619,7 @@
49E912AB0EFAC906009D0CAF /* Animation.h in Headers */,
316FE1120E6E1DA700BF6088 /* AnimationBase.h in Headers */,
71EFCEDC202B38A900D7C411 /* AnimationEffect.h in Headers */,
- 71556CB31F9F09BA00E78D08 /* AnimationEffectTiming.h in Headers */,
712BE47D1FE86458002031CC /* EffectTiming.h in Headers */,
- 71495DD6202B065700ADFD34 /* AnimationEffectTimingReadOnly.h in Headers */,
319848011A1D817B00A13318 /* AnimationEvent.h in Headers */,
49E912AD0EFAC906009D0CAF /* AnimationList.h in Headers */,
714C7C661FDAD2A100F2BEE1 /* AnimationPlaybackEvent.h in Headers */,
@@ -29009,9 +28991,7 @@
57B5F8101E5E2A4E00F34F90 /* JSAesGcmParams.h in Headers */,
576814451E70CB1F00E77754 /* JSAesKeyParams.h in Headers */,
FDA15ECA12B03F50003A583A /* JSAnalyserNode.h in Headers */,
- 71556CBD1F9F0A4900E78D08 /* JSAnimationEffectTiming.h in Headers */,
71495DDB202B06F100ADFD34 /* JSEffectTiming.h in Headers */,
- 71495DDC202B06F700ADFD34 /* JSAnimationEffectTimingReadOnly.h in Headers */,
3198480C1A1E6CE800A13318 /* JSAnimationEvent.h in Headers */,
714C7C6C1FDADAF300F2BEE1 /* JSAnimationPlaybackEvent.h in Headers */,
714C7C6D1FDADAF600F2BEE1 /* JSAnimationPlaybackEventInit.h in Headers */,
@@ -29595,6 +29575,7 @@
6515EC920D9723FF0063D49A /* JSSVGAltGlyphElement.h in Headers */,
24D9129613CA956100D21915 /* JSSVGAltGlyphItemElement.h in Headers */,
B222F6990AB771950022EFAD /* JSSVGAngle.h in Headers */,
+ 71207340216DFB0000C78329 /* OptionalEffectTiming.h in Headers */,
B2FA3D370AB75A6F000E5AC4 /* JSSVGAnimateColorElement.h in Headers */,
B2FA3D390AB75A6F000E5AC4 /* JSSVGAnimatedAngle.h in Headers */,
B2FA3D3B0AB75A6F000E5AC4 /* JSSVGAnimatedBoolean.h in Headers */,
@@ -30606,6 +30587,7 @@
514C76790CE923A1007EF3CD /* ResourceHandle.h in Headers */,
514C767A0CE923A1007EF3CD /* ResourceHandleClient.h in Headers */,
514C767B0CE923A1007EF3CD /* ResourceHandleInternal.h in Headers */,
+ 71207343216DFB4100C78329 /* JSOptionalEffectTiming.h in Headers */,
656D373F0ADBA5DE00A4554D /* ResourceLoader.h in Headers */,
D0A3A7311405A39800FB8ED3 /* ResourceLoaderOptions.h in Headers */,
51AF503616F100F60095B2E8 /* ResourceLoaderTypes.h in Headers */,
Modified: trunk/Source/WebCore/animation/AnimationEffect.cpp (237852 => 237853)
--- trunk/Source/WebCore/animation/AnimationEffect.cpp 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/AnimationEffect.cpp 2018-11-06 11:15:30 UTC (rev 237853)
@@ -26,7 +26,6 @@
#include "config.h"
#include "AnimationEffect.h"
-#include "AnimationEffectTimingReadOnly.h"
#include "FillMode.h"
#include "JSComputedEffectTiming.h"
#include "WebAnimationUtilities.h"
@@ -33,23 +32,15 @@
namespace WebCore {
-AnimationEffect::AnimationEffect(Ref<AnimationEffectTimingReadOnly>&& timing)
- , m_timing(WTFMove(timing))
+AnimationEffect::AnimationEffect()
+ : m_timingFunction(LinearTimingFunction::create())
{
- m_timing->setEffect(this);
}
AnimationEffect::~AnimationEffect()
{
- m_timing->setEffect(nullptr);
}
-void AnimationEffect::timingDidChange()
-{
- if (m_animation)
- m_animation->effectTimingPropertiesDidChange();
-}
-
std::optional<Seconds> AnimationEffect::localTime() const
{
if (m_animation)
@@ -63,8 +54,8 @@
// https://drafts.csswg.org/web-animations-1/#animation-effect-phases-and-states
bool animationIsBackwards = m_animation && m_animation->playbackRate() < 0;
- auto beforeActiveBoundaryTime = std::max(std::min(m_timing->delay(), m_timing->endTime()), 0_s);
- auto activeAfterBoundaryTime = std::max(std::min(m_timing->delay() + m_timing->activeDuration(), m_timing->endTime()), 0_s);
+ auto beforeActiveBoundaryTime = std::max(std::min(m_delay, endTime()), 0_s);
+ auto activeAfterBoundaryTime = std::max(std::min(m_delay + activeDuration(), endTime()), 0_s);
// (This should be the last statement, but it's more efficient to cache the local time and return right away if it's not resolved.)
// Furthermore, it is often convenient to refer to the case when an animation effect is in none of the above phases
@@ -111,8 +102,8 @@
if (effectPhase == Phase::Before) {
// If the fill mode is backwards or both, return the result of evaluating
// max(local time - start delay, 0).
- if (m_timing->fill() == FillMode::Backwards || m_timing->fill() == FillMode::Both)
- return std::max(localTime().value() - m_timing->delay(), 0_s);
+ if (m_fill == FillMode::Backwards || m_fill == FillMode::Both)
+ return std::max(localTime().value() - m_delay, 0_s);
// Otherwise, return an unresolved time value.
return std::nullopt;
}
@@ -119,7 +110,7 @@
// If the animation effect is in the active phase, return the result of evaluating local time - start delay.
if (effectPhase == Phase::Active)
- return localTime().value() - m_timing->delay();
+ return localTime().value() - m_delay;
// If the animation effect is in the after phase, the result depends on the first matching
// condition from the following,
@@ -126,8 +117,8 @@
if (effectPhase == Phase::After) {
// If the fill mode is forwards or both, return the result of evaluating
// max(min(local time - start delay, active duration), 0).
- if (m_timing->fill() == FillMode::Forwards || m_timing->fill() == FillMode::Both)
- return std::max(std::min(localTime().value() - m_timing->delay(), m_timing->activeDuration()), 0_s);
+ if (m_fill == FillMode::Forwards || m_fill == FillMode::Both)
+ return std::max(std::min(localTime().value() - m_delay, activeDuration()), 0_s);
// Otherwise, return an unresolved time value.
return std::nullopt;
}
@@ -151,17 +142,17 @@
// 2. Calculate an initial value for overall progress based on the first matching condition from below,
double overallProgress;
- if (!m_timing->iterationDuration()) {
+ if (!m_iterationDuration) {
// If the iteration duration is zero, if the animation effect is in the before phase, let overall progress be zero,
// otherwise, let it be equal to the iteration count.
- overallProgress = phase() == Phase::Before ? 0 : m_timing->iterations();
+ overallProgress = phase() == Phase::Before ? 0 : m_iterations;
} else {
// Otherwise, let overall progress be the result of calculating active time / iteration duration.
- overallProgress = secondsToWebAnimationsAPITime(effectActiveTime.value()) / secondsToWebAnimationsAPITime(m_timing->iterationDuration());
+ overallProgress = secondsToWebAnimationsAPITime(effectActiveTime.value()) / secondsToWebAnimationsAPITime(m_iterationDuration);
}
// 3. Return the result of calculating overall progress + iteration start.
- overallProgress += m_timing->iterationStart();
+ overallProgress += m_iterationStart;
return std::abs(overallProgress);
}
@@ -182,7 +173,7 @@
// 2. If overall progress is infinity, let the simple iteration progress be iteration start % 1.0,
// otherwise, let the simple iteration progress be overall progress % 1.0.
double overallProgressValue = effectOverallProgress.value();
- double simpleIterationProgress = std::isinf(overallProgressValue) ? fmod(m_timing->iterationStart(), 1) : fmod(overallProgressValue, 1);
+ double simpleIterationProgress = std::isinf(overallProgressValue) ? fmod(m_iterationStart, 1) : fmod(overallProgressValue, 1);
// 3. If all of the following conditions are true,
//
@@ -192,7 +183,7 @@
// the iteration count is not equal to zero.
// let the simple iteration progress be 1.0.
auto effectPhase = phase();
- if (!simpleIterationProgress && (effectPhase == Phase::Active || effectPhase == Phase::After) && std::abs(activeTime().value().microseconds() - m_timing->activeDuration().microseconds()) < timeEpsilon.microseconds() && m_timing->iterations())
+ if (!simpleIterationProgress && (effectPhase == Phase::Active || effectPhase == Phase::After) && std::abs(activeTime().value().microseconds() - activeDuration().microseconds()) < timeEpsilon.microseconds() && m_iterations)
return 1;
return simpleIterationProgress;
@@ -210,7 +201,7 @@
return std::nullopt;
// 2. If the animation effect is in the after phase and the iteration count is infinity, return infinity.
- if (phase() == Phase::After && std::isinf(m_timing->iterations()))
+ if (phase() == Phase::After && std::isinf(m_iterations))
return std::numeric_limits<double>::infinity();
// 3. If the simple iteration progress is 1.0, return floor(overall progress) - 1.
@@ -227,17 +218,17 @@
// https://drafts.csswg.org/web-animations-1/#calculating-the-directed-progress
// If playback direction is normal, let the current direction be forwards.
- if (m_timing->direction() == PlaybackDirection::Normal)
+ if (m_direction == PlaybackDirection::Normal)
return AnimationEffect::ComputedDirection::Forwards;
// If playback direction is reverse, let the current direction be reverse.
- if (m_timing->direction() == PlaybackDirection::Reverse)
+ if (m_direction == PlaybackDirection::Reverse)
return AnimationEffect::ComputedDirection::Reverse;
// Otherwise, let d be the current iteration.
auto d = currentIteration().value();
// If playback direction is alternate-reverse increment d by 1.
- if (m_timing->direction() == PlaybackDirection::AlternateReverse)
+ if (m_direction == PlaybackDirection::AlternateReverse)
d++;
// If d % 2 == 0, let the current direction be forwards, otherwise let the current direction be reverse.
// If d is infinity, let the current direction be forwards.
@@ -282,11 +273,10 @@
auto effectDirectedProgressValue = effectDirectedProgress.value();
- if (auto iterationDuration = m_timing->iterationDuration().seconds()) {
+ if (auto iterationDuration = m_iterationDuration.seconds()) {
bool before = false;
- auto* timingFunction = m_timing->timingFunction();
// 2. Calculate the value of the before flag as follows:
- if (is<StepsTimingFunction>(timingFunction)) {
+ if (is<StepsTimingFunction>(m_timingFunction)) {
// 1. Determine the current direction using the procedure defined in §3.9.1 Calculating the directed progress.
// 2. If the current direction is forwards, let going forwards be true, otherwise it is false.
bool goingForwards = currentDirection() == AnimationEffect::ComputedDirection::Forwards;
@@ -298,7 +288,7 @@
// 3. Return the result of evaluating the animation effect’s timing function passing directed progress as the
// input progress value and before flag as the before flag.
- return timingFunction->transformTime(effectDirectedProgressValue, iterationDuration, before);
+ return m_timingFunction->transformTime(effectDirectedProgressValue, iterationDuration, before);
}
return effectDirectedProgressValue;
@@ -309,20 +299,36 @@
return transformedProgress();
}
+EffectTiming AnimationEffect::getTiming()
+{
+ EffectTiming timing;
+ timing.delay = secondsToWebAnimationsAPITime(m_delay);
+ timing.endDelay = secondsToWebAnimationsAPITime(m_endDelay);
+ timing.fill = m_fill;
+ timing.iterationStart = m_iterationStart;
+ timing.iterations = m_iterations;
+ if (m_iterationDuration == 0_s)
+ timing.duration = "auto";
+ else
+ timing.duration = secondsToWebAnimationsAPITime(m_iterationDuration);
+ timing.direction = m_direction;
+ timing.easing = m_timingFunction->cssText();
+ return timing;
+}
+
ComputedEffectTiming AnimationEffect::getComputedTiming()
{
ComputedEffectTiming computedTiming;
- computedTiming.delay = m_timing->bindingsDelay();
- computedTiming.endDelay = m_timing->bindingsEndDelay();
- auto fillMode = m_timing->fill();
- computedTiming.fill = fillMode == FillMode::Auto ? FillMode::None : fillMode;
- computedTiming.iterationStart = m_timing->iterationStart();
- computedTiming.iterations = m_timing->iterations();
- computedTiming.duration = secondsToWebAnimationsAPITime(m_timing->iterationDuration());
- computedTiming.direction = m_timing->direction();
- computedTiming.easing = m_timing->easing();
- computedTiming.endTime = secondsToWebAnimationsAPITime(m_timing->endTime());
- computedTiming.activeDuration = secondsToWebAnimationsAPITime(m_timing->activeDuration());
+ computedTiming.delay = secondsToWebAnimationsAPITime(m_delay);
+ computedTiming.endDelay = secondsToWebAnimationsAPITime(m_endDelay);
+ computedTiming.fill = m_fill == FillMode::Auto ? FillMode::None : m_fill;
+ computedTiming.iterationStart = m_iterationStart;
+ computedTiming.iterations = m_iterations;
+ computedTiming.duration = secondsToWebAnimationsAPITime(m_iterationDuration);
+ computedTiming.direction = m_direction;
+ computedTiming.easing = m_timingFunction->cssText();
+ computedTiming.endTime = secondsToWebAnimationsAPITime(endTime());
+ computedTiming.activeDuration = secondsToWebAnimationsAPITime(activeDuration());
if (auto effectLocalTime = localTime())
computedTiming.localTime = secondsToWebAnimationsAPITime(effectLocalTime.value());
computedTiming.progress = iterationProgress();
@@ -330,4 +336,184 @@
return computedTiming;
}
+ExceptionOr<void> AnimationEffect::updateTiming(std::optional<OptionalEffectTiming> timing)
+{
+ // 6.5.4. Updating the timing of an AnimationEffect
+ // https://drafts.csswg.org/web-animations/#updating-animationeffect-timing
+
+ // To update the timing properties of an animation effect, effect, from an EffectTiming or OptionalEffectTiming object, input, perform the following steps:
+ if (!timing)
+ return { };
+
+ // 1. If the iterationStart member of input is present and less than zero, throw a TypeError and abort this procedure.
+ if (timing->iterationStart) {
+ if (timing->iterationStart.value() < 0)
+ return Exception { TypeError };
+ }
+
+ // 2. If the iterations member of input is present, and less than zero or is the value NaN, throw a TypeError and abort this procedure.
+ if (timing->iterations) {
+ if (timing->iterations.value() < 0 || std::isnan(timing->iterations.value()))
+ return Exception { TypeError };
+ }
+
+ // 3. If the duration member of input is present, and less than zero or is the value NaN, throw a TypeError and abort this procedure.
+ // FIXME: should it not throw an exception on a string other than "auto"?
+ if (timing->duration) {
+ if (WTF::holds_alternative<double>(timing->duration.value())) {
+ auto durationAsDouble = WTF::get<double>(timing->duration.value());
+ if (durationAsDouble < 0 || std::isnan(durationAsDouble))
+ return Exception { TypeError };
+ } else {
+ if (WTF::get<String>(timing->duration.value()) != "auto")
+ return Exception { TypeError };
+ }
+ }
+
+ // 4. If the easing member of input is present but cannot be parsed using the <timing-function> production [CSS-EASING-1], throw a TypeError and abort this procedure.
+ if (!timing->easing.isNull()) {
+ auto timingFunctionResult = TimingFunction::createFromCSSText(timing->easing);
+ if (timingFunctionResult.hasException())
+ return timingFunctionResult.releaseException();
+ m_timingFunction = timingFunctionResult.returnValue();
+ }
+
+ // 5. Assign each member present in input to the corresponding timing property of effect as follows:
+ //
+ // delay → start delay
+ // endDelay → end delay
+ // fill → fill mode
+ // iterationStart → iteration start
+ // iterations → iteration count
+ // duration → iteration duration
+ // direction → playback direction
+ // easing → timing function
+
+ if (timing->delay)
+ m_delay = Seconds::fromMilliseconds(timing->delay.value());
+
+ if (timing->endDelay)
+ m_endDelay = Seconds::fromMilliseconds(timing->endDelay.value());
+
+ if (timing->fill)
+ m_fill = timing->fill.value();
+
+ if (timing->iterationStart)
+ m_iterationStart = timing->iterationStart.value();
+
+ if (timing->iterations)
+ m_iterations = timing->iterations.value();
+
+ if (timing->duration)
+ m_iterationDuration = WTF::holds_alternative<double>(timing->duration.value()) ? Seconds::fromMilliseconds(WTF::get<double>(timing->duration.value())) : 0_s;
+
+ if (timing->direction)
+ m_direction = timing->direction.value();
+
+ if (m_animation)
+ m_animation->effectTimingDidChange();
+
+ return { };
+}
+
+ExceptionOr<void> AnimationEffect::setIterationStart(double iterationStart)
+{
+ // https://drafts.csswg.org/web-animations-1/#dom-animationeffecttiming-iterationstart
+ // If an attempt is made to set this attribute to a value less than zero, a TypeError must
+ // be thrown and the value of the iterationStart attribute left unchanged.
+ if (iterationStart < 0)
+ return Exception { TypeError };
+
+ if (m_iterationStart == iterationStart)
+ return { };
+
+ m_iterationStart = iterationStart;
+
+ return { };
+}
+
+ExceptionOr<void> AnimationEffect::setIterations(double iterations)
+{
+ // https://drafts.csswg.org/web-animations-1/#dom-animationeffecttiming-iterations
+ // If an attempt is made to set this attribute to a value less than zero or a NaN value, a
+ // TypeError must be thrown and the value of the iterations attribute left unchanged.
+ if (iterations < 0 || std::isnan(iterations))
+ return Exception { TypeError };
+
+ if (m_iterations == iterations)
+ return { };
+
+ m_iterations = iterations;
+
+ return { };
+}
+
+Seconds AnimationEffect::endTime() const
+{
+ // 3.5.3 The active interval
+ // https://drafts.csswg.org/web-animations-1/#end-time
+
+ // The end time of an animation effect is the result of evaluating max(start delay + active duration + end delay, 0).
+ auto endTime = m_delay + activeDuration() + m_endDelay;
+ return endTime > 0_s ? endTime : 0_s;
+}
+
+void AnimationEffect::setDelay(const Seconds& delay)
+{
+ if (m_delay == delay)
+ return;
+
+ m_delay = delay;
+}
+
+void AnimationEffect::setEndDelay(const Seconds& endDelay)
+{
+ if (m_endDelay == endDelay)
+ return;
+
+ m_endDelay = endDelay;
+}
+
+void AnimationEffect::setFill(FillMode fill)
+{
+ if (m_fill == fill)
+ return;
+
+ m_fill = fill;
+}
+
+void AnimationEffect::setIterationDuration(const Seconds& duration)
+{
+ if (m_iterationDuration == duration)
+ return;
+
+ m_iterationDuration = duration;
+}
+
+void AnimationEffect::setDirection(PlaybackDirection direction)
+{
+ if (m_direction == direction)
+ return;
+
+ m_direction = direction;
+}
+
+void AnimationEffect::setTimingFunction(const RefPtr<TimingFunction>& timingFunction)
+{
+ m_timingFunction = timingFunction;
+}
+
+Seconds AnimationEffect::activeDuration() const
+{
+ // 3.8.2. Calculating the active duration
+ // https://drafts.csswg.org/web-animations-1/#calculating-the-active-duration
+
+ // The active duration is calculated as follows:
+ // active duration = iteration duration × iteration count
+ // If either the iteration duration or iteration count are zero, the active duration is zero.
+ if (!m_iterationDuration || !m_iterations)
+ return 0_s;
+ return m_iterationDuration * m_iterations;
+}
+
} // namespace WebCore
Modified: trunk/Source/WebCore/animation/AnimationEffect.h (237852 => 237853)
--- trunk/Source/WebCore/animation/AnimationEffect.h 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/AnimationEffect.h 2018-11-06 11:15:30 UTC (rev 237853)
@@ -25,25 +25,36 @@
#pragma once
+#include "AnimationEffect.h"
#include "ComputedEffectTiming.h"
+#include "ExceptionOr.h"
+#include "FillMode.h"
+#include "KeyframeEffectOptions.h"
+#include "OptionalEffectTiming.h"
+#include "PlaybackDirection.h"
+#include "TimingFunction.h"
#include "WebAnimation.h"
+#include "WebAnimationUtilities.h"
#include <wtf/Forward.h>
#include <wtf/Ref.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
+#include <wtf/Seconds.h>
+#include <wtf/Variant.h>
#include <wtf/WeakPtr.h>
namespace WebCore {
-class AnimationEffectTimingReadOnly;
-
class AnimationEffect : public RefCounted<AnimationEffect> {
public:
virtual ~AnimationEffect();
virtual bool isKeyframeEffect() const { return false; }
- AnimationEffectTimingReadOnly* timing() const { return m_timing.get(); }
+
+ EffectTiming getTiming();
ComputedEffectTiming getComputedTiming();
+ ExceptionOr<void> updateTiming(std::optional<OptionalEffectTiming>);
+
virtual void apply(RenderStyle&) = 0;
virtual void invalidate() = 0;
virtual void animationDidSeek() = 0;
@@ -52,18 +63,42 @@
WebAnimation* animation() const { return m_animation.get(); }
void setAnimation(WebAnimation* animation) { m_animation = makeWeakPtr(animation); }
+ Seconds delay() const { return m_delay; }
+ void setDelay(const Seconds&);
+
+ Seconds endDelay() const { return m_endDelay; }
+ void setEndDelay(const Seconds&);
+
+ FillMode fill() const { return m_fill; }
+ void setFill(FillMode);
+
+ double iterationStart() const { return m_iterationStart; }
+ ExceptionOr<void> setIterationStart(double);
+
+ double iterations() const { return m_iterations; }
+ ExceptionOr<void> setIterations(double);
+
+ Seconds iterationDuration() const { return m_iterationDuration; }
+ void setIterationDuration(const Seconds&);
+
+ PlaybackDirection direction() const { return m_direction; }
+ void setDirection(PlaybackDirection);
+
+ TimingFunction* timingFunction() const { return m_timingFunction.get(); }
+ void setTimingFunction(const RefPtr<TimingFunction>&);
+
std::optional<Seconds> localTime() const;
std::optional<Seconds> activeTime() const;
+ Seconds endTime() const;
std::optional<double> iterationProgress() const;
std::optional<double> currentIteration() const;
+ Seconds activeDuration() const;
enum class Phase { Before, Active, After, Idle };
Phase phase() const;
- void timingDidChange();
-
protected:
- explicit AnimationEffect(Ref<AnimationEffectTimingReadOnly>&&);
+ explicit AnimationEffect();
private:
enum class ComputedDirection { Forwards, Reverse };
@@ -73,9 +108,16 @@
AnimationEffect::ComputedDirection currentDirection() const;
std::optional<double> directedProgress() const;
std::optional<double> transformedProgress() const;
-
+
+ Seconds m_delay { 0_s };
+ Seconds m_endDelay { 0_s };
+ FillMode m_fill { FillMode::Auto };
+ double m_iterationStart { 0 };
+ double m_iterations { 1 };
+ Seconds m_iterationDuration { 0_s };
+ PlaybackDirection m_direction { PlaybackDirection::Normal };
+ RefPtr<TimingFunction> m_timingFunction;
WeakPtr<WebAnimation> m_animation;
- RefPtr<AnimationEffectTimingReadOnly> m_timing;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/animation/AnimationEffect.idl (237852 => 237853)
--- trunk/Source/WebCore/animation/AnimationEffect.idl 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/AnimationEffect.idl 2018-11-06 11:15:30 UTC (rev 237853)
@@ -28,6 +28,7 @@
Exposed=Window,
CustomToJSObject
] interface AnimationEffect {
- readonly attribute AnimationEffectTimingReadOnly timing;
+ EffectTiming getTiming();
ComputedEffectTiming getComputedTiming();
+ [MayThrowException] void updateTiming(optional OptionalEffectTiming timing);
};
Deleted: trunk/Source/WebCore/animation/AnimationEffectTiming.cpp (237852 => 237853)
--- trunk/Source/WebCore/animation/AnimationEffectTiming.cpp 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/AnimationEffectTiming.cpp 2018-11-06 11:15:30 UTC (rev 237853)
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2017-2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "AnimationEffectTiming.h"
-
-namespace WebCore {
-
-Ref<AnimationEffectTiming> AnimationEffectTiming::create()
-{
- return adoptRef(*new AnimationEffectTiming());
-}
-
-AnimationEffectTiming::AnimationEffectTiming()
- : AnimationEffectTimingReadOnly(AnimationEffectTimingClass)
-{
-}
-
-AnimationEffectTiming::~AnimationEffectTiming()
-{
-}
-
-} // namespace WebCore
Deleted: trunk/Source/WebCore/animation/AnimationEffectTiming.h (237852 => 237853)
--- trunk/Source/WebCore/animation/AnimationEffectTiming.h 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/AnimationEffectTiming.h 2018-11-06 11:15:30 UTC (rev 237853)
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2017-2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "AnimationEffectTimingReadOnly.h"
-#include "ExceptionOr.h"
-#include "FillMode.h"
-#include "PlaybackDirection.h"
-#include "TimingFunction.h"
-#include "WebAnimationUtilities.h"
-#include <wtf/Forward.h>
-#include <wtf/Ref.h>
-#include <wtf/RefCounted.h>
-#include <wtf/RefPtr.h>
-#include <wtf/Seconds.h>
-#include <wtf/Variant.h>
-
-namespace WebCore {
-
-class AnimationEffectTiming final : public AnimationEffectTimingReadOnly {
-public:
- static Ref<AnimationEffectTiming> create();
- ~AnimationEffectTiming();
-
-private:
- AnimationEffectTiming();
-};
-
-} // namespace WebCore
-
-SPECIALIZE_TYPE_TRAITS_ANIMATION_EFFECT_TIMING(AnimationEffectTiming, isAnimationEffectTiming());
Deleted: trunk/Source/WebCore/animation/AnimationEffectTiming.idl (237852 => 237853)
--- trunk/Source/WebCore/animation/AnimationEffectTiming.idl 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/AnimationEffectTiming.idl 2018-11-06 11:15:30 UTC (rev 237853)
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2017-2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-[
- EnabledAtRuntime=WebAnimations,
- Exposed=Window,
- ImplementationLacksVTable
-] interface AnimationEffectTiming : AnimationEffectTimingReadOnly {
- [ImplementedAs=bindingsDelay] inherit attribute double delay;
- [ImplementedAs=bindingsEndDelay] inherit attribute double endDelay;
- inherit attribute FillMode fill;
- [MayThrowException] inherit attribute double iterationStart;
- [MayThrowException] inherit attribute unrestricted double iterations;
- [MayThrowException, ImplementedAs=bindingsDuration] inherit attribute (unrestricted double or DOMString) duration;
- inherit attribute PlaybackDirection direction;
- [MayThrowException] inherit attribute DOMString easing;
-};
Deleted: trunk/Source/WebCore/animation/AnimationEffectTimingReadOnly.cpp (237852 => 237853)
--- trunk/Source/WebCore/animation/AnimationEffectTimingReadOnly.cpp 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/AnimationEffectTimingReadOnly.cpp 2018-11-06 11:15:30 UTC (rev 237853)
@@ -1,251 +0,0 @@
-/*
- * Copyright (C) 2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "AnimationEffectTimingReadOnly.h"
-
-#include "AnimationEffect.h"
-
-namespace WebCore {
-
-Ref<AnimationEffectTimingReadOnly> AnimationEffectTimingReadOnly::create()
-{
- return adoptRef(*new AnimationEffectTimingReadOnly(AnimationEffectTimingReadOnlyClass));
-}
-
-AnimationEffectTimingReadOnly::AnimationEffectTimingReadOnly(ClassType classType)
- : m_classType(classType)
- , m_timingFunction(LinearTimingFunction::create())
-{
-}
-
-AnimationEffectTimingReadOnly::~AnimationEffectTimingReadOnly()
-{
-}
-
-void AnimationEffectTimingReadOnly::propertyDidChange()
-{
- m_effect->timingDidChange();
-}
-
-ExceptionOr<void> AnimationEffectTimingReadOnly::setProperties(std::optional<Variant<double, KeyframeEffectOptions>>&& options)
-{
- if (!options)
- return { };
-
- auto optionsValue = options.value();
- Variant<double, String> bindingsDuration;
- if (WTF::holds_alternative<double>(optionsValue))
- bindingsDuration = WTF::get<double>(optionsValue);
- else {
- auto keyframeEffectOptions = WTF::get<KeyframeEffectOptions>(optionsValue);
- bindingsDuration = keyframeEffectOptions.duration;
- setBindingsDelay(keyframeEffectOptions.delay);
- setBindingsEndDelay(keyframeEffectOptions.endDelay);
- setFill(keyframeEffectOptions.fill);
-
- auto setIterationStartResult = setIterationStart(keyframeEffectOptions.iterationStart);
- if (setIterationStartResult.hasException())
- return setIterationStartResult.releaseException();
-
- auto setIterationsResult = setIterations(keyframeEffectOptions.iterations);
- if (setIterationsResult.hasException())
- return setIterationsResult.releaseException();
-
- setDirection(keyframeEffectOptions.direction);
- auto setEasingResult = setEasing(keyframeEffectOptions.easing);
- if (setEasingResult.hasException())
- return setEasingResult.releaseException();
- }
-
- auto setBindingsDurationResult = setBindingsDuration(WTFMove(bindingsDuration));
- if (setBindingsDurationResult.hasException())
- return setBindingsDurationResult.releaseException();
-
- return { };
-}
-
-void AnimationEffectTimingReadOnly::copyPropertiesFromSource(AnimationEffectTimingReadOnly* source)
-{
- m_fill = source->m_fill;
- m_delay = source->m_delay;
- m_endDelay = source->m_endDelay;
- m_direction = source->m_direction;
- m_iterations = source->m_iterations;
- m_timingFunction = source->m_timingFunction;
- m_iterationStart = source->m_iterationStart;
- m_iterationDuration = source->m_iterationDuration;
-}
-
-ExceptionOr<void> AnimationEffectTimingReadOnly::setIterationStart(double iterationStart)
-{
- // https://drafts.csswg.org/web-animations-1/#dom-animationeffecttiming-iterationstart
- // If an attempt is made to set this attribute to a value less than zero, a TypeError must
- // be thrown and the value of the iterationStart attribute left unchanged.
- if (iterationStart < 0)
- return Exception { TypeError };
-
- if (m_iterationStart == iterationStart)
- return { };
-
- m_iterationStart = iterationStart;
- propertyDidChange();
-
- return { };
-}
-
-ExceptionOr<void> AnimationEffectTimingReadOnly::setIterations(double iterations)
-{
- // https://drafts.csswg.org/web-animations-1/#dom-animationeffecttiming-iterations
- // If an attempt is made to set this attribute to a value less than zero or a NaN value, a
- // TypeError must be thrown and the value of the iterations attribute left unchanged.
- if (iterations < 0 || std::isnan(iterations))
- return Exception { TypeError };
-
- if (m_iterations == iterations)
- return { };
-
- m_iterations = iterations;
- propertyDidChange();
-
- return { };
-}
-
-Variant<double, String> AnimationEffectTimingReadOnly::bindingsDuration() const
-{
- if (m_iterationDuration == 0_s)
- return "auto";
- return secondsToWebAnimationsAPITime(m_iterationDuration);
-}
-
-ExceptionOr<void> AnimationEffectTimingReadOnly::setBindingsDuration(Variant<double, String>&& duration)
-{
- // https://drafts.csswg.org/web-animations-1/#dom-animationeffecttimingreadonly-duration
- // The iteration duration which is a real number greater than or equal to zero (including positive infinity)
- // representing the time taken to complete a single iteration of the animation effect.
- // In this level of this specification, the string value auto is equivalent to zero. This is a forwards-compatiblity
- // measure since a future level of this specification will introduce group effects where the auto value expands to
- // include the duration of the child effects.
-
- if (WTF::holds_alternative<double>(duration)) {
- auto durationAsDouble = WTF::get<double>(duration);
- if (durationAsDouble < 0 || std::isnan(durationAsDouble))
- return Exception { TypeError };
- setIterationDuration(Seconds::fromMilliseconds(durationAsDouble));
- return { };
- }
-
- if (WTF::get<String>(duration) != "auto")
- return Exception { TypeError };
-
- setIterationDuration(0_s);
-
- return { };
-}
-
-ExceptionOr<void> AnimationEffectTimingReadOnly::setEasing(const String& easing)
-{
- auto timingFunctionResult = TimingFunction::createFromCSSText(easing);
- if (timingFunctionResult.hasException())
- return timingFunctionResult.releaseException();
- setTimingFunction(timingFunctionResult.returnValue());
- return { };
-}
-
-Seconds AnimationEffectTimingReadOnly::endTime() const
-{
- // 3.5.3 The active interval
- // https://drafts.csswg.org/web-animations-1/#end-time
-
- // The end time of an animation effect is the result of evaluating max(start delay + active duration + end delay, 0).
- auto endTime = m_delay + activeDuration() + m_endDelay;
- return endTime > 0_s ? endTime : 0_s;
-}
-
-void AnimationEffectTimingReadOnly::setDelay(const Seconds& delay)
-{
- if (m_delay == delay)
- return;
-
- m_delay = delay;
- propertyDidChange();
-}
-
-void AnimationEffectTimingReadOnly::setEndDelay(const Seconds& endDelay)
-{
- if (m_endDelay == endDelay)
- return;
-
- m_endDelay = endDelay;
- propertyDidChange();
-}
-
-void AnimationEffectTimingReadOnly::setFill(FillMode fill)
-{
- if (m_fill == fill)
- return;
-
- m_fill = fill;
- propertyDidChange();
-}
-
-void AnimationEffectTimingReadOnly::setIterationDuration(const Seconds& duration)
-{
- if (m_iterationDuration == duration)
- return;
-
- m_iterationDuration = duration;
- propertyDidChange();
-}
-
-void AnimationEffectTimingReadOnly::setDirection(PlaybackDirection direction)
-{
- if (m_direction == direction)
- return;
-
- m_direction = direction;
- propertyDidChange();
-}
-
-void AnimationEffectTimingReadOnly::setTimingFunction(const RefPtr<TimingFunction>& timingFunction)
-{
- m_timingFunction = timingFunction;
- propertyDidChange();
-}
-
-Seconds AnimationEffectTimingReadOnly::activeDuration() const
-{
- // 3.8.2. Calculating the active duration
- // https://drafts.csswg.org/web-animations-1/#calculating-the-active-duration
-
- // The active duration is calculated as follows:
- // active duration = iteration duration × iteration count
- // If either the iteration duration or iteration count are zero, the active duration is zero.
- if (!m_iterationDuration || !m_iterations)
- return 0_s;
- return m_iterationDuration * m_iterations;
-}
-
-} // namespace WebCore
Deleted: trunk/Source/WebCore/animation/AnimationEffectTimingReadOnly.h (237852 => 237853)
--- trunk/Source/WebCore/animation/AnimationEffectTimingReadOnly.h 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/AnimationEffectTimingReadOnly.h 2018-11-06 11:15:30 UTC (rev 237853)
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "AnimationEffect.h"
-#include "ExceptionOr.h"
-#include "FillMode.h"
-#include "KeyframeEffectOptions.h"
-#include "PlaybackDirection.h"
-#include "TimingFunction.h"
-#include "WebAnimationUtilities.h"
-#include <wtf/Forward.h>
-#include <wtf/Ref.h>
-#include <wtf/RefCounted.h>
-#include <wtf/RefPtr.h>
-#include <wtf/Seconds.h>
-#include <wtf/Variant.h>
-
-namespace WebCore {
-
-class AnimationEffectTimingReadOnly : public RefCounted<AnimationEffectTimingReadOnly> {
-public:
- static Ref<AnimationEffectTimingReadOnly> create();
- ~AnimationEffectTimingReadOnly();
-
- bool isAnimationEffectTiming() const { return m_classType == AnimationEffectTimingClass; }
-
- void setEffect(AnimationEffect* effect) { m_effect = effect; }
-
- ExceptionOr<void> setProperties(std::optional<Variant<double, KeyframeEffectOptions>>&&);
- void copyPropertiesFromSource(AnimationEffectTimingReadOnly*);
-
- double bindingsDelay() const { return secondsToWebAnimationsAPITime(m_delay); }
- void setBindingsDelay(double delay) { setDelay(Seconds::fromMilliseconds(delay)); }
-
- double bindingsEndDelay() const { return secondsToWebAnimationsAPITime(m_endDelay); }
- void setBindingsEndDelay(double endDelay) { setEndDelay(Seconds::fromMilliseconds(endDelay)); }
-
- Variant<double, String> bindingsDuration() const;
- ExceptionOr<void> setBindingsDuration(Variant<double, String>&&);
-
- Seconds delay() const { return m_delay; }
- void setDelay(const Seconds&);
-
- Seconds endDelay() const { return m_endDelay; }
- void setEndDelay(const Seconds&);
-
- FillMode fill() const { return m_fill; }
- void setFill(FillMode);
-
- double iterationStart() const { return m_iterationStart; }
- ExceptionOr<void> setIterationStart(double);
-
- double iterations() const { return m_iterations; }
- ExceptionOr<void> setIterations(double);
-
- Seconds iterationDuration() const { return m_iterationDuration; }
- void setIterationDuration(const Seconds&);
-
- PlaybackDirection direction() const { return m_direction; }
- void setDirection(PlaybackDirection);
-
- String easing() const { return m_timingFunction->cssText(); }
- ExceptionOr<void> setEasing(const String&);
-
- TimingFunction* timingFunction() const { return m_timingFunction.get(); }
- void setTimingFunction(const RefPtr<TimingFunction>&);
-
- Seconds endTime() const;
- Seconds activeDuration() const;
-
-protected:
- enum ClassType {
- AnimationEffectTimingClass,
- AnimationEffectTimingReadOnlyClass
- };
-
- ClassType classType() const { return m_classType; }
-
- explicit AnimationEffectTimingReadOnly(ClassType);
-
-private:
- void propertyDidChange();
-
- ClassType m_classType;
- AnimationEffect* m_effect;
- Seconds m_delay { 0_s };
- Seconds m_endDelay { 0_s };
- FillMode m_fill { FillMode::Auto };
- double m_iterationStart { 0 };
- double m_iterations { 1 };
- Seconds m_iterationDuration { 0_s };
- PlaybackDirection m_direction { PlaybackDirection::Normal };
- RefPtr<TimingFunction> m_timingFunction;
-
-};
-
-} // namespace WebCore
-
-#define SPECIALIZE_TYPE_TRAITS_ANIMATION_EFFECT_TIMING(ToValueTypeName, predicate) \
-SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ToValueTypeName) \
-static bool isType(const WebCore::AnimationEffectTimingReadOnly& value) { return value.predicate; } \
-SPECIALIZE_TYPE_TRAITS_END()
Deleted: trunk/Source/WebCore/animation/AnimationEffectTimingReadOnly.idl (237852 => 237853)
--- trunk/Source/WebCore/animation/AnimationEffectTimingReadOnly.idl 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/AnimationEffectTimingReadOnly.idl 2018-11-06 11:15:30 UTC (rev 237853)
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-[
- EnabledAtRuntime=WebAnimations,
- Exposed=Window,
- CustomToJSObject
-] interface AnimationEffectTimingReadOnly {
- [ImplementedAs=bindingsDelay] readonly attribute double delay;
- [ImplementedAs=bindingsEndDelay] readonly attribute double endDelay;
- readonly attribute FillMode fill;
- readonly attribute double iterationStart;
- readonly attribute unrestricted double iterations;
- [MayThrowException, ImplementedAs=bindingsDuration] readonly attribute (unrestricted double or DOMString) duration;
- readonly attribute PlaybackDirection direction;
- readonly attribute DOMString easing;
-};
\ No newline at end of file
Modified: trunk/Source/WebCore/animation/CSSAnimation.cpp (237852 => 237853)
--- trunk/Source/WebCore/animation/CSSAnimation.cpp 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/CSSAnimation.cpp 2018-11-06 11:15:30 UTC (rev 237853)
@@ -55,43 +55,43 @@
suspendEffectInvalidation();
auto& animation = backingAnimation();
- auto* timing = effect()->timing();
+ auto* animationEffect = effect();
switch (animation.fillMode()) {
case AnimationFillMode::None:
- timing->setFill(FillMode::None);
+ animationEffect->setFill(FillMode::None);
break;
case AnimationFillMode::Backwards:
- timing->setFill(FillMode::Backwards);
+ animationEffect->setFill(FillMode::Backwards);
break;
case AnimationFillMode::Forwards:
- timing->setFill(FillMode::Forwards);
+ animationEffect->setFill(FillMode::Forwards);
break;
case AnimationFillMode::Both:
- timing->setFill(FillMode::Both);
+ animationEffect->setFill(FillMode::Both);
break;
}
switch (animation.direction()) {
case Animation::AnimationDirectionNormal:
- timing->setDirection(PlaybackDirection::Normal);
+ animationEffect->setDirection(PlaybackDirection::Normal);
break;
case Animation::AnimationDirectionAlternate:
- timing->setDirection(PlaybackDirection::Alternate);
+ animationEffect->setDirection(PlaybackDirection::Alternate);
break;
case Animation::AnimationDirectionReverse:
- timing->setDirection(PlaybackDirection::Reverse);
+ animationEffect->setDirection(PlaybackDirection::Reverse);
break;
case Animation::AnimationDirectionAlternateReverse:
- timing->setDirection(PlaybackDirection::AlternateReverse);
+ animationEffect->setDirection(PlaybackDirection::AlternateReverse);
break;
}
auto iterationCount = animation.iterationCount();
- timing->setIterations(iterationCount == Animation::IterationCountInfinite ? std::numeric_limits<double>::infinity() : iterationCount);
+ animationEffect->setIterations(iterationCount == Animation::IterationCountInfinite ? std::numeric_limits<double>::infinity() : iterationCount);
- timing->setDelay(Seconds(animation.delay()));
- timing->setIterationDuration(Seconds(animation.duration()));
+ animationEffect->setDelay(Seconds(animation.delay()));
+ animationEffect->setIterationDuration(Seconds(animation.duration()));
// Synchronize the play state
if (animation.playState() == AnimationPlayState::Playing && playState() == WebAnimation::PlayState::Paused) {
Modified: trunk/Source/WebCore/animation/CSSTransition.cpp (237852 => 237853)
--- trunk/Source/WebCore/animation/CSSTransition.cpp 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/CSSTransition.cpp 2018-11-06 11:15:30 UTC (rev 237853)
@@ -61,15 +61,14 @@
suspendEffectInvalidation();
// This method is only called from CSSTransition::create() where we're guaranteed to have an effect.
- ASSERT(effect());
+ auto* animationEffect = effect();
+ ASSERT(animationEffect);
- auto* timing = effect()->timing();
-
// In order for CSS Transitions to be seeked backwards, they need to have their fill mode set to backwards
// such that the original CSS value applied prior to the transition is used for a negative current time.
- timing->setFill(FillMode::Backwards);
- timing->setDelay(delay);
- timing->setIterationDuration(duration);
+ animationEffect->setFill(FillMode::Backwards);
+ animationEffect->setDelay(delay);
+ animationEffect->setIterationDuration(duration);
unsuspendEffectInvalidation();
}
Modified: trunk/Source/WebCore/animation/DeclarativeAnimation.cpp (237852 => 237853)
--- trunk/Source/WebCore/animation/DeclarativeAnimation.cpp 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/DeclarativeAnimation.cpp 2018-11-06 11:15:30 UTC (rev 237853)
@@ -27,7 +27,6 @@
#include "DeclarativeAnimation.h"
#include "Animation.h"
-#include "AnimationEffectTimingReadOnly.h"
#include "AnimationEvent.h"
#include "Element.h"
#include "EventNames.h"
@@ -250,9 +249,8 @@
bool isBefore = currentPhase == AnimationEffect::Phase::Before;
bool isIdle = currentPhase == AnimationEffect::Phase::Idle;
- auto* effectTiming = animationEffect ? animationEffect->timing() : nullptr;
- auto intervalStart = effectTiming ? std::max(0_s, std::min(-effectTiming->delay(), effectTiming->activeDuration())) : 0_s;
- auto intervalEnd = effectTiming ? std::max(0_s, std::min(effectTiming->endTime() - effectTiming->delay(), effectTiming->activeDuration())) : 0_s;
+ auto intervalStart = animationEffect ? std::max(0_s, std::min(-animationEffect->delay(), animationEffect->activeDuration())) : 0_s;
+ auto intervalEnd = animationEffect ? std::max(0_s, std::min(animationEffect->endTime() - animationEffect->delay(), animationEffect->activeDuration())) : 0_s;
if (is<CSSAnimation>(this)) {
// https://drafts.csswg.org/css-animations-2/#events
@@ -267,7 +265,7 @@
auto iterationBoundary = iteration;
if (m_previousIteration > iteration)
iterationBoundary++;
- auto elapsedTime = effectTiming ? effectTiming->iterationDuration() * (iterationBoundary - effectTiming->iterationStart()) : 0_s;
+ auto elapsedTime = animationEffect ? animationEffect->iterationDuration() * (iterationBoundary - animationEffect->iterationStart()) : 0_s;
enqueueDOMEvent(eventNames().animationiterationEvent, elapsedTime);
} else if (wasActive && isAfter)
enqueueDOMEvent(eventNames().animationendEvent, intervalEnd);
Modified: trunk/Source/WebCore/animation/DocumentTimeline.cpp (237852 => 237853)
--- trunk/Source/WebCore/animation/DocumentTimeline.cpp 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/DocumentTimeline.cpp 2018-11-06 11:15:30 UTC (rev 237853)
@@ -33,6 +33,7 @@
#include "DOMWindow.h"
#include "DeclarativeAnimation.h"
#include "Document.h"
+#include "DocumentAnimationScheduler.h"
#include "GraphicsLayer.h"
#include "KeyframeEffect.h"
#include "Microtasks.h"
Modified: trunk/Source/WebCore/animation/EffectTiming.idl (237852 => 237853)
--- trunk/Source/WebCore/animation/EffectTiming.idl 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/EffectTiming.idl 2018-11-06 11:15:30 UTC (rev 237853)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 Apple Inc. All rights reserved.
+ * Copyright (C) 2017-2018 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,7 +23,9 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-dictionary EffectTiming {
+[
+ JSGenerateToJSObject
+] dictionary EffectTiming {
double delay = 0;
double endDelay = 0;
FillMode fill = "auto";
Modified: trunk/Source/WebCore/animation/KeyframeEffect.cpp (237852 => 237853)
--- trunk/Source/WebCore/animation/KeyframeEffect.cpp 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/KeyframeEffect.cpp 2018-11-06 11:15:30 UTC (rev 237853)
@@ -27,7 +27,6 @@
#include "KeyframeEffect.h"
#include "Animation.h"
-#include "AnimationEffectTiming.h"
#include "CSSAnimation.h"
#include "CSSComputedStyleDeclaration.h"
#include "CSSKeyframeRule.h"
@@ -466,12 +465,33 @@
ExceptionOr<Ref<KeyframeEffect>> KeyframeEffect::create(ExecState& state, Element* target, Strong<JSObject>&& keyframes, std::optional<Variant<double, KeyframeEffectOptions>>&& options)
{
- auto keyframeEffect = adoptRef(*new KeyframeEffect(AnimationEffectTiming::create(), target));
+ auto keyframeEffect = adoptRef(*new KeyframeEffect(target));
- auto setPropertiesResult = keyframeEffect->timing()->setProperties(WTFMove(options));
- if (setPropertiesResult.hasException())
- return setPropertiesResult.releaseException();
+ if (options) {
+ OptionalEffectTiming timing;
+ auto optionsValue = options.value();
+ if (WTF::holds_alternative<double>(optionsValue)) {
+ Variant<double, String> duration = WTF::get<double>(optionsValue);
+ timing.duration = duration;
+ } else {
+ auto keyframeEffectOptions = WTF::get<KeyframeEffectOptions>(optionsValue);
+ timing = {
+ keyframeEffectOptions.delay,
+ keyframeEffectOptions.endDelay,
+ keyframeEffectOptions.fill,
+ keyframeEffectOptions.iterationStart,
+ keyframeEffectOptions.iterations,
+ keyframeEffectOptions.duration,
+ keyframeEffectOptions.direction,
+ keyframeEffectOptions.easing
+ };
+ }
+ auto updateTimingResult = keyframeEffect->updateTiming(timing);
+ if (updateTimingResult.hasException())
+ return updateTimingResult.releaseException();
+ }
+
auto processKeyframesResult = keyframeEffect->processKeyframes(state, WTFMove(keyframes));
if (processKeyframesResult.hasException())
return processKeyframesResult.releaseException();
@@ -481,7 +501,7 @@
ExceptionOr<Ref<KeyframeEffect>> KeyframeEffect::create(JSC::ExecState&, Ref<KeyframeEffect>&& source)
{
- auto keyframeEffect = adoptRef(*new KeyframeEffect(AnimationEffectTiming::create(), nullptr));
+ auto keyframeEffect = adoptRef(*new KeyframeEffect(nullptr));
keyframeEffect->copyPropertiesFromSource(WTFMove(source));
return WTFMove(keyframeEffect);
}
@@ -488,12 +508,11 @@
Ref<KeyframeEffect> KeyframeEffect::create(const Element& target)
{
- return adoptRef(*new KeyframeEffect(AnimationEffectTiming::create(), const_cast<Element*>(&target)));
+ return adoptRef(*new KeyframeEffect(const_cast<Element*>(&target)));
}
-KeyframeEffect::KeyframeEffect(Ref<AnimationEffectTiming>&& timing, Element* target)
- : AnimationEffect(WTFMove(timing))
- , m_target(target)
+KeyframeEffect::KeyframeEffect(Element* target)
+ : m_target(target)
, m_blendingKeyframes(emptyString())
{
}
@@ -518,7 +537,14 @@
}
m_parsedKeyframes = WTFMove(parsedKeyframes);
- timing()->copyPropertiesFromSource(source->timing());
+ setFill(source->fill());
+ setDelay(source->delay());
+ setEndDelay(source->endDelay());
+ setDirection(source->direction());
+ setIterations(source->iterations());
+ setTimingFunction(source->timingFunction());
+ setIterationStart(source->iterationStart());
+ setIterationDuration(source->iterationDuration());
KeyframeList keyframeList("keyframe-effect-" + createCanonicalUUIDString());
for (auto& keyframe : source->m_blendingKeyframes.keyframes()) {
@@ -1163,8 +1189,8 @@
// passing interval distance as the input progress.
auto transformedDistance = intervalDistance;
if (startKeyframeIndex) {
- if (auto iterationDuration = timing()->iterationDuration()) {
- auto rangeDuration = (endOffset - startOffset) * iterationDuration.seconds();
+ if (auto duration = iterationDuration()) {
+ auto rangeDuration = (endOffset - startOffset) * duration.seconds();
if (auto* timingFunction = timingFunctionForKeyframeAtIndex(startKeyframeIndex.value()))
transformedDistance = timingFunction->transformTime(intervalDistance, rangeDuration);
}
@@ -1292,7 +1318,7 @@
auto* compositedRenderer = downcast<RenderBoxModelObject>(renderer);
// To simplify the code we use a default of 0s for an unresolved current time since for a Stop action that is acceptable.
- auto timeOffset = animation()->currentTime().value_or(0_s).seconds() - timing()->delay().seconds();
+ auto timeOffset = animation()->currentTime().value_or(0_s).seconds() - delay().seconds();
for (const auto& action : pendingAcceleratedActions) {
switch (action) {
@@ -1327,14 +1353,13 @@
// FIXME: The iterationStart and endDelay AnimationEffectTiming properties do not have
// corresponding Animation properties.
- auto effectTiming = timing();
auto animation = Animation::create();
- animation->setDuration(effectTiming->iterationDuration().seconds());
- animation->setDelay(effectTiming->delay().seconds());
- animation->setIterationCount(effectTiming->iterations());
- animation->setTimingFunction(effectTiming->timingFunction()->clone());
+ animation->setDuration(iterationDuration().seconds());
+ animation->setDelay(delay().seconds());
+ animation->setIterationCount(iterations());
+ animation->setTimingFunction(timingFunction()->clone());
- switch (effectTiming->fill()) {
+ switch (fill()) {
case FillMode::None:
case FillMode::Auto:
animation->setFillMode(AnimationFillMode::None);
@@ -1350,7 +1375,7 @@
break;
}
- switch (effectTiming->direction()) {
+ switch (direction()) {
case PlaybackDirection::Normal:
animation->setDirection(Animation::AnimationDirectionNormal);
break;
Modified: trunk/Source/WebCore/animation/KeyframeEffect.h (237852 => 237853)
--- trunk/Source/WebCore/animation/KeyframeEffect.h 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/KeyframeEffect.h 2018-11-06 11:15:30 UTC (rev 237853)
@@ -26,7 +26,6 @@
#pragma once
#include "AnimationEffect.h"
-#include "AnimationEffectTiming.h"
#include "CSSPropertyBlendingClient.h"
#include "CompositeOperation.h"
#include "EffectTiming.h"
@@ -137,7 +136,7 @@
bool forceLayoutIfNeeded();
private:
- KeyframeEffect(Ref<AnimationEffectTiming>&&, Element*);
+ KeyframeEffect(Element*);
enum class AcceleratedAction { Play, Pause, Seek, Stop };
Copied: trunk/Source/WebCore/animation/OptionalEffectTiming.h (from rev 237852, trunk/Source/WebCore/animation/AnimationEffectTiming.h) (0 => 237853)
--- trunk/Source/WebCore/animation/OptionalEffectTiming.h (rev 0)
+++ trunk/Source/WebCore/animation/OptionalEffectTiming.h 2018-11-06 11:15:30 UTC (rev 237853)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2018 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "FillMode.h"
+#include "PlaybackDirection.h"
+#include <wtf/Variant.h>
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+struct OptionalEffectTiming {
+ std::optional<double> delay;
+ std::optional<double> endDelay;
+ std::optional<FillMode> fill;
+ std::optional<double> iterationStart;
+ std::optional<double> iterations;
+ std::optional<Variant<double, String>> duration;
+ std::optional<PlaybackDirection> direction;
+ String easing;
+};
+
+} // namespace WebCore
Copied: trunk/Source/WebCore/animation/OptionalEffectTiming.idl (from rev 237852, trunk/Source/WebCore/animation/AnimationEffectTiming.cpp) (0 => 237853)
--- trunk/Source/WebCore/animation/OptionalEffectTiming.idl (rev 0)
+++ trunk/Source/WebCore/animation/OptionalEffectTiming.idl 2018-11-06 11:15:30 UTC (rev 237853)
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2018 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+dictionary OptionalEffectTiming {
+ double delay;
+ double endDelay;
+ FillMode fill;
+ double iterationStart;
+ unrestricted double iterations;
+ (unrestricted double or DOMString) duration;
+ PlaybackDirection direction;
+ DOMString easing;
+};
Modified: trunk/Source/WebCore/animation/WebAnimation.cpp (237852 => 237853)
--- trunk/Source/WebCore/animation/WebAnimation.cpp 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/WebAnimation.cpp 2018-11-06 11:15:30 UTC (rev 237853)
@@ -27,7 +27,6 @@
#include "WebAnimation.h"
#include "AnimationEffect.h"
-#include "AnimationEffectTimingReadOnly.h"
#include "AnimationPlaybackEvent.h"
#include "AnimationTimeline.h"
#include "Document.h"
@@ -90,7 +89,7 @@
--m_suspendCount;
}
-void WebAnimation::effectTimingPropertiesDidChange()
+void WebAnimation::effectTimingDidChange()
{
timingDidChange(DidSeek::No, SynchronouslyNotify::Yes);
}
@@ -476,7 +475,7 @@
{
// The target effect end of an animation is equal to the end time of the animation's target effect.
// If the animation has no target effect, the target effect end is zero.
- return m_effect ? m_effect->timing()->endTime() : 0_s;
+ return m_effect ? m_effect->endTime() : 0_s;
}
void WebAnimation::cancel()
Modified: trunk/Source/WebCore/animation/WebAnimation.h (237852 => 237853)
--- trunk/Source/WebCore/animation/WebAnimation.h 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/animation/WebAnimation.h 2018-11-06 11:15:30 UTC (rev 237853)
@@ -109,7 +109,7 @@
void applyPendingAcceleratedActions();
bool isRelevant() const { return m_isRelevant; }
- void effectTimingPropertiesDidChange();
+ void effectTimingDidChange();
void suspendEffectInvalidation();
void unsuspendEffectInvalidation();
void setSuspended(bool);
Deleted: trunk/Source/WebCore/bindings/js/JSAnimationEffectTimingReadOnlyCustom.cpp (237852 => 237853)
--- trunk/Source/WebCore/bindings/js/JSAnimationEffectTimingReadOnlyCustom.cpp 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/bindings/js/JSAnimationEffectTimingReadOnlyCustom.cpp 2018-11-06 11:15:30 UTC (rev 237853)
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "JSAnimationEffectTimingReadOnly.h"
-
-#include "AnimationEffectTiming.h"
-#include "JSAnimationEffectTiming.h"
-#include "JSDOMBinding.h"
-
-using namespace JSC;
-
-namespace WebCore {
-
-JSValue toJSNewlyCreated(ExecState*, JSDOMGlobalObject* globalObject, Ref<AnimationEffectTimingReadOnly>&& value)
-{
- if (value->isAnimationEffectTiming())
- return createWrapper<AnimationEffectTiming>(globalObject, WTFMove(value));
- return createWrapper<AnimationEffectTimingReadOnly>(globalObject, WTFMove(value));
-}
-
-JSValue toJS(ExecState* state, JSDOMGlobalObject* globalObject, AnimationEffectTimingReadOnly& value)
-{
- return wrap(state, globalObject, value);
-}
-
-} // namespace WebCore
Modified: trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h (237852 => 237853)
--- trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h 2018-11-06 11:15:15 UTC (rev 237852)
+++ trunk/Source/WebCore/bindings/js/WebCoreBuiltinNames.h 2018-11-06 11:15:30 UTC (rev 237853)
@@ -33,8 +33,6 @@
#define WEBCORE_COMMON_PRIVATE_IDENTIFIERS_EACH_PROPERTY_NAME(macro) \
macro(Animation) \
macro(AnimationEffect) \
- macro(AnimationEffectTiming) \
- macro(AnimationEffectTimingReadOnly) \
macro(AnimationPlaybackEvent) \
macro(AnimationTimeline) \
macro(ApplePaySession) \