[Web Animations] Add animations to the timeline
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 22 Oct 2017 21:31:24 +0000 (21:31 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 22 Oct 2017 21:31:24 +0000 (21:31 +0000)
https://bugs.webkit.org/show_bug.cgi?id=178643

Patch by Antoine Quint <graouts@apple.com> on 2017-10-22
Reviewed by Dean Jackson.

Source/WebCore:

If a timeline is provided as a parameter to the Animation constructor,
add it to the timeline, and remove it when the object is destroyed.

We also start the basic mechanism to dump the contents of a timeline
as text for testing purposes, currently only logging the number of
animations in a timeline and just logging the class name for animation
themselves.

Test: webanimations/animation-creation-addition.html

* animation/AnimationTimeline.cpp:
(WebCore::AnimationTimeline::description):
* animation/AnimationTimeline.h:
* animation/AnimationTimeline.idl:
* animation/WebAnimation.cpp:
(WebCore::WebAnimation::create):
(WebCore::WebAnimation::~WebAnimation):
(WebCore::WebAnimation::description):
* animation/WebAnimation.h:
* testing/Internals.cpp:
(WebCore::Internals::timelineDescription):
* testing/Internals.h:
* testing/Internals.idl:

LayoutTests:

Add a new test that checks that animations created with a timeline
are added to the provided timeline.

* webanimations/animation-creation-addition-expected.txt: Added.
* webanimations/animation-creation-addition.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@223825 268f45cc-cd09-0410-ab3c-d52691b4dbfc

12 files changed:
LayoutTests/ChangeLog
LayoutTests/webanimations/animation-creation-addition-expected.txt [new file with mode: 0644]
LayoutTests/webanimations/animation-creation-addition.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/animation/AnimationTimeline.cpp
Source/WebCore/animation/AnimationTimeline.h
Source/WebCore/animation/AnimationTimeline.idl
Source/WebCore/animation/WebAnimation.cpp
Source/WebCore/animation/WebAnimation.h
Source/WebCore/testing/Internals.cpp
Source/WebCore/testing/Internals.h
Source/WebCore/testing/Internals.idl

index 13e201f..b7a5997 100644 (file)
@@ -1,3 +1,16 @@
+2017-10-22  Antoine Quint  <graouts@apple.com>
+
+        [Web Animations] Add animations to the timeline
+        https://bugs.webkit.org/show_bug.cgi?id=178643
+
+        Reviewed by Dean Jackson.
+
+        Add a new test that checks that animations created with a timeline
+        are added to the provided timeline.
+
+        * webanimations/animation-creation-addition-expected.txt: Added.
+        * webanimations/animation-creation-addition.html: Added.
+
 2017-10-21  Dean Jackson  <dino@apple.com>
 
         createImageBitmap with basic HTMLImageElement
diff --git a/LayoutTests/webanimations/animation-creation-addition-expected.txt b/LayoutTests/webanimations/animation-creation-addition-expected.txt
new file mode 100644 (file)
index 0000000..21cd248
--- /dev/null
@@ -0,0 +1,13 @@
+Constructing an Animation with a timeline should add the animation to the timeline.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+DocumentTimeline with 2 animations:
+  1. Animation
+  2. Animation
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/webanimations/animation-creation-addition.html b/LayoutTests/webanimations/animation-creation-addition.html
new file mode 100644 (file)
index 0000000..b3be178
--- /dev/null
@@ -0,0 +1,12 @@
+<script src="../resources/js-test-pre.js"></script>
+<script>
+
+description("Constructing an Animation with a timeline should add the animation to the timeline.");
+
+new Animation(document.timeline);
+new Animation();
+new Animation(document.timeline);
+debug(internals.timelineDescription(document.timeline));
+
+</script>
+<script src="../resources/js-test-post.js"></script>
\ No newline at end of file
index cbf1640..0f91122 100644 (file)
@@ -1,3 +1,34 @@
+2017-10-22  Antoine Quint  <graouts@apple.com>
+
+        [Web Animations] Add animations to the timeline
+        https://bugs.webkit.org/show_bug.cgi?id=178643
+
+        Reviewed by Dean Jackson.
+
+        If a timeline is provided as a parameter to the Animation constructor,
+        add it to the timeline, and remove it when the object is destroyed.
+
+        We also start the basic mechanism to dump the contents of a timeline
+        as text for testing purposes, currently only logging the number of
+        animations in a timeline and just logging the class name for animation
+        themselves.
+
+        Test: webanimations/animation-creation-addition.html
+
+        * animation/AnimationTimeline.cpp:
+        (WebCore::AnimationTimeline::description):
+        * animation/AnimationTimeline.h:
+        * animation/AnimationTimeline.idl:
+        * animation/WebAnimation.cpp:
+        (WebCore::WebAnimation::create):
+        (WebCore::WebAnimation::~WebAnimation):
+        (WebCore::WebAnimation::description):
+        * animation/WebAnimation.h:
+        * testing/Internals.cpp:
+        (WebCore::Internals::timelineDescription):
+        * testing/Internals.h:
+        * testing/Internals.idl:
+
 2017-10-21  Zalan Bujtas  <zalan@apple.com>
 
         [FrameView::layout cleanup] Drop allowSubtree parameter
index 1f15fb3..655739a 100644 (file)
@@ -28,6 +28,8 @@
 #include "AnimationTimeline.h"
 
 #include "DocumentTimeline.h"
+#include <wtf/text/TextStream.h>
+#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
@@ -50,4 +52,19 @@ void AnimationTimeline::removeAnimation(Ref<WebAnimation>&& animation)
     m_animations.remove(WTFMove(animation));
 }
 
+String AnimationTimeline::description()
+{
+    TextStream stream;
+    int count = 1;
+    stream << (m_classType == DocumentTimelineClass ? "DocumentTimeline" : "AnimationTimeline") << " with " << m_animations.size() << " animations:";
+    stream << "\n";
+    for (const auto& animation : m_animations) {
+        writeIndent(stream, 1);
+        stream << count << ". " << animation->description();
+        stream << "\n";
+        count++;
+    }
+    return stream.release();
+}
+
 } // namespace WebCore
index 893f8a1..4a48a1d 100644 (file)
@@ -27,6 +27,7 @@
 #pragma once
 
 #include "WebAnimation.h"
+#include <wtf/Forward.h>
 #include <wtf/HashSet.h>
 #include <wtf/Ref.h>
 #include <wtf/RefCounted.h>
@@ -40,6 +41,7 @@ public:
     bool isDocumentTimeline() const { return m_classType == DocumentTimelineClass; }
     void addAnimation(Ref<WebAnimation>&&);
     void removeAnimation(Ref<WebAnimation>&&);
+    WEBCORE_EXPORT String description();
 
     virtual ~AnimationTimeline();
 
index f4f6c51..ee8ed06 100644 (file)
@@ -25,6 +25,7 @@
 
 [
     EnabledAtRuntime=WebAnimations,
+    ExportMacro=WEBCORE_EXPORT,
     CustomToJSObject
 ] interface AnimationTimeline {
 };
index 7df36be..969d842 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "config.h"
 #include "WebAnimation.h"
+#include <wtf/text/WTFString.h>
 
 #include "AnimationTimeline.h"
 
@@ -32,7 +33,12 @@ namespace WebCore {
 
 Ref<WebAnimation> WebAnimation::create(AnimationTimeline* timeline)
 {
-    return adoptRef(*new WebAnimation(timeline));
+    auto result = adoptRef(*new WebAnimation(timeline));
+
+    if (timeline)
+        timeline->addAnimation(result.copyRef());
+    
+    return result;
 }
 
 WebAnimation::WebAnimation(AnimationTimeline* timeline)
@@ -42,6 +48,13 @@ WebAnimation::WebAnimation(AnimationTimeline* timeline)
 
 WebAnimation::~WebAnimation()
 {
+    if (m_timeline)
+        m_timeline->removeAnimation(*this);
+}
+
+String WebAnimation::description()
+{
+    return "Animation";
 }
 
 } // namespace WebCore
index 5b91dde..e7d8bf8 100644 (file)
@@ -25,6 +25,7 @@
 
 #pragma once
 
+#include <wtf/Forward.h>
 #include <wtf/Ref.h>
 #include <wtf/RefCounted.h>
 #include <wtf/RefPtr.h>
@@ -39,6 +40,7 @@ public:
     ~WebAnimation();
 
     AnimationTimeline* timeline() const { return m_timeline.get(); }
+    String description();
 
 private:
     WebAnimation(AnimationTimeline*);
index 87c0561..39929b8 100644 (file)
@@ -4245,4 +4245,9 @@ Ref<ExtendableEvent> Internals::createTrustedExtendableEvent()
 }
 #endif
 
+String Internals::timelineDescription(AnimationTimeline& timeline)
+{
+    return timeline.description();
+}
+
 } // namespace WebCore
index 17b8c68..f05e6e5 100644 (file)
@@ -42,6 +42,7 @@
 
 namespace WebCore {
 
+class AnimationTimeline;
 class AudioContext;
 class CacheStorageConnection;
 class DOMRect;
@@ -617,6 +618,8 @@ public:
 
     bool hasServiceWorkerRegisteredForOrigin(const String&);
 
+    String timelineDescription(AnimationTimeline&);
+
 private:
     explicit Internals(Document&);
     Document* contextDocument() const;
index de87ae9..52aaf0f 100644 (file)
@@ -560,4 +560,6 @@ enum EventThrottlingBehavior {
     [Conditional=SERVICE_WORKER] ExtendableEvent createTrustedExtendableEvent();
 
     boolean hasServiceWorkerRegisteredForOrigin(DOMString origin);
+
+    [EnabledAtRuntime=WebAnimations] DOMString timelineDescription(AnimationTimeline timeline);
 };