diff --git a/css/css-animations/idlharness.html b/css/css-animations/idlharness.html
new file mode 100644
index 0000000000..2c6191d4fd
--- /dev/null
+++ b/css/css-animations/idlharness.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+ css-animations IDL tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/interfaces/css-animations.idl b/interfaces/css-animations.idl
new file mode 100644
index 0000000000..3162c9e83b
--- /dev/null
+++ b/interfaces/css-animations.idl
@@ -0,0 +1,45 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the
+// "CSS Animations Level 1" spec.
+// See: https://drafts.csswg.org/css-animations/
+
+[Exposed=Window,
+ Constructor(CSSOMString type, optional AnimationEventInit animationEventInitDict)]
+interface AnimationEvent : Event {
+ readonly attribute CSSOMString animationName;
+ readonly attribute double elapsedTime;
+ readonly attribute CSSOMString pseudoElement;
+};
+dictionary AnimationEventInit : EventInit {
+ CSSOMString animationName = "";
+ double elapsedTime = 0.0;
+ CSSOMString pseudoElement = "";
+};
+
+partial interface CSSRule {
+ const unsigned short KEYFRAMES_RULE = 7;
+ const unsigned short KEYFRAME_RULE = 8;
+};
+
+[Exposed=Window]
+interface CSSKeyframeRule : CSSRule {
+ attribute CSSOMString keyText;
+ [SameObject, PutForwards=cssText] readonly attribute CSSStyleDeclaration style;
+};
+
+[Exposed=Window]
+interface CSSKeyframesRule : CSSRule {
+ attribute CSSOMString name;
+ readonly attribute CSSRuleList cssRules;
+
+ void appendRule(CSSOMString rule);
+ void deleteRule(CSSOMString select);
+ CSSKeyframeRule? findRule(CSSOMString select);
+};
+
+partial interface GlobalEventHandlers {
+ attribute EventHandler onanimationstart;
+ attribute EventHandler onanimationiteration;
+ attribute EventHandler onanimationend;
+ attribute EventHandler onanimationcancel;
+};