Bug 762302 - Unprefix CSS Animation properties and @keyframes rule and provide temporary aliases for -moz-animation and exposed subproperties. r=dbaron
authorEmmanuele Bassi <ebassi@mozilla.com>
Sun, 08 Jul 2012 21:25:10 -0400
changeset 98672 7f35b944aaddd685b14579a4671127e61f520ff0
parent 98671 3af3e1615bfc01f81622eb631e1c3116cd22ab1d
child 98673 137f4655cf255762958f6a52f55b794a98dc13fd
push id11590
push userryanvm@gmail.com
push dateMon, 09 Jul 2012 01:25:23 +0000
treeherdermozilla-inbound@137f4655cf25 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdbaron
bugs762302
milestone16.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 762302 - Unprefix CSS Animation properties and @keyframes rule and provide temporary aliases for -moz-animation and exposed subproperties. r=dbaron
dom/interfaces/css/nsIDOMCSS2Properties.idl
layout/style/nsCSSParser.cpp
layout/style/nsCSSPropAliasList.h
layout/style/nsCSSPropList.h
layout/style/nsCSSRules.cpp
layout/style/nsComputedDOMStyle.cpp
layout/style/test/property_database.js
layout/style/test/test_animations.html
layout/style/test/test_bug716226.html
layout/style/test/test_garbage_at_end_of_declarations.html
layout/style/test/test_keyframes_rules.html
layout/style/test/test_rules_out_of_sheets.html
layout/style/test/test_transitions_computed_values.html
--- a/dom/interfaces/css/nsIDOMCSS2Properties.idl
+++ b/dom/interfaces/css/nsIDOMCSS2Properties.idl
@@ -9,17 +9,17 @@
  * The nsIDOMCSS2Properties interface is a datatype for additional
  * reflection of data already provided in nsIDOMCSSStyleDeclaration in
  * the Document Object Model.
  *
  * For more information on this interface please see
  * http://www.w3.org/TR/DOM-Level-2-Style
  */
 
-[builtinclass, scriptable, uuid(bb40a531-d92b-44d6-a543-cfc25054d5eb)]
+[builtinclass, scriptable, uuid(7775d662-0b71-4c9d-92c3-4d0a88a6729d)]
 interface nsIDOMCSS2Properties : nsISupports
 {
            attribute DOMString        background;
                                         // raises(DOMException) on setting
 
            attribute DOMString        backgroundAttachment;
                                         // raises(DOMException) on setting
 
@@ -705,16 +705,43 @@ interface nsIDOMCSS2Properties : nsISupp
                                         // raises(DOMException) on setting
 
            attribute DOMString        MozTabSize;
                                         // raises(DOMException) on setting
 
            attribute DOMString        resize;
                                         // raises(DOMException) on setting
 
+           attribute DOMString        animationName;
+                                        // raises(DOMException) on setting
+
+           attribute DOMString        animationDuration;
+                                        // raises(DOMException) on setting
+
+           attribute DOMString        animationDelay;
+                                        // raises(DOMException) on setting
+
+           attribute DOMString        animationTimingFunction;
+                                        // raises(DOMException) on setting
+
+           attribute DOMString        animationDirection;
+                                        // raises(DOMException) on setting
+
+           attribute DOMString        animationFillMode;
+                                        // raises(DOMException) on setting
+
+           attribute DOMString        animationIterationCount;
+                                        // raises(DOMException) on setting
+
+           attribute DOMString        animationPlayState;
+                                        // raises(DOMException) on setting
+
+           attribute DOMString        animation;
+                                        // raises(DOMException) on setting
+
            attribute DOMString        MozAnimationName;
                                         // raises(DOMException) on setting
 
            attribute DOMString        MozAnimationDuration;
                                         // raises(DOMException) on setting
 
            attribute DOMString        MozAnimationDelay;
                                         // raises(DOMException) on setting
--- a/layout/style/nsCSSParser.cpp
+++ b/layout/style/nsCSSParser.cpp
@@ -1493,17 +1493,18 @@ CSSParserImpl::ParseAtRule(RuleAppendFun
   } else if (mToken.mIdent.LowerCaseEqualsLiteral("font-face")) {
     parseFunc = &CSSParserImpl::ParseFontFaceRule;
     newSection = eCSSSection_General;
 
   } else if (mToken.mIdent.LowerCaseEqualsLiteral("page")) {
     parseFunc = &CSSParserImpl::ParsePageRule;
     newSection = eCSSSection_General;
 
-  } else if (mToken.mIdent.LowerCaseEqualsLiteral("-moz-keyframes")) {
+  } else if (mToken.mIdent.LowerCaseEqualsLiteral("-moz-keyframes") ||
+             mToken.mIdent.LowerCaseEqualsLiteral("keyframes")) {
     parseFunc = &CSSParserImpl::ParseKeyframesRule;
     newSection = eCSSSection_General;
 
   } else {
     if (!NonMozillaVendorIdentifier(mToken.mIdent)) {
       REPORT_UNEXPECTED_TOKEN(PEUnknownAtRule);
       OUTPUT_ERROR();
     }
--- a/layout/style/nsCSSPropAliasList.h
+++ b/layout/style/nsCSSPropAliasList.h
@@ -37,8 +37,17 @@
 
 CSS_PROP_ALIAS(-moz-transform, transform, MozTransform, "")
 CSS_PROP_ALIAS(-moz-transform-origin, transform_origin, MozTransformOrigin, "")
 CSS_PROP_ALIAS(-moz-perspective-origin, perspective_origin, MozPerspectiveOrigin, "")
 CSS_PROP_ALIAS(-moz-perspective, perspective, MozPerspective, "")
 CSS_PROP_ALIAS(-moz-transform-style, transform_style, MozTransformStyle, "")
 CSS_PROP_ALIAS(-moz-backface-visibility, backface_visibility, MozBackfaceVisibility, "")
 CSS_PROP_ALIAS(-moz-border-image, border_image, MozBorderImage, "")
+CSS_PROP_ALIAS(-moz-animation, animation, MozAnimation, "")
+CSS_PROP_ALIAS(-moz-animation-delay, animation_delay, MozAnimationDelay, "")
+CSS_PROP_ALIAS(-moz-animation-direction, animation_direction, MozAnimationDirection, "")
+CSS_PROP_ALIAS(-moz-animation-duration, animation_duration, MozAnimationDuration, "")
+CSS_PROP_ALIAS(-moz-animation-fill-mode, animation_fill_mode, MozAnimationFillMode, "")
+CSS_PROP_ALIAS(-moz-animation-iteration-count, animation_iteration_count, MozAnimationIterationCount, "")
+CSS_PROP_ALIAS(-moz-animation-name, animation_name, MozAnimationName, "")
+CSS_PROP_ALIAS(-moz-animation-play-state, animation_play_state, MozAnimationPlayState, "")
+CSS_PROP_ALIAS(-moz-animation-timing-function, animation_timing_function, MozAnimationTimingFunction, "")
--- a/layout/style/nsCSSPropList.h
+++ b/layout/style/nsCSSPropList.h
@@ -343,107 +343,107 @@ CSS_PROP_FONT(
         CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     "",
     0,
     kFontKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
-    -moz-animation,
+    animation,
     animation,
-    CSS_PROP_DOMPROP_PREFIXED(Animation),
+    Animation,
     CSS_PROPERTY_PARSE_FUNCTION,
     "")
 CSS_PROP_DISPLAY(
-    -moz-animation-delay,
+    animation-delay,
     animation_delay,
-    CSS_PROP_DOMPROP_PREFIXED(AnimationDelay),
+    AnimationDelay,
     CSS_PROPERTY_PARSE_VALUE_LIST |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_TIME, // used by list parsing
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
-    -moz-animation-direction,
+    animation-direction,
     animation_direction,
-    CSS_PROP_DOMPROP_PREFIXED(AnimationDirection),
+    AnimationDirection,
     CSS_PROPERTY_PARSE_VALUE_LIST |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kAnimationDirectionKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
-    -moz-animation-duration,
+    animation-duration,
     animation_duration,
-    CSS_PROP_DOMPROP_PREFIXED(AnimationDuration),
+    AnimationDuration,
     CSS_PROPERTY_PARSE_VALUE_LIST |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_TIME, // used by list parsing
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
-    -moz-animation-fill-mode,
+    animation-fill-mode,
     animation_fill_mode,
-    CSS_PROP_DOMPROP_PREFIXED(AnimationFillMode),
+    AnimationFillMode,
     CSS_PROPERTY_PARSE_VALUE_LIST |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kAnimationFillModeKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
-    -moz-animation-iteration-count,
+    animation-iteration-count,
     animation_iteration_count,
-    CSS_PROP_DOMPROP_PREFIXED(AnimationIterationCount),
+    AnimationIterationCount,
     CSS_PROPERTY_PARSE_VALUE_LIST |
         // nonnegative per
         // http://lists.w3.org/Archives/Public/www-style/2011Mar/0355.html
         CSS_PROPERTY_VALUE_NONNEGATIVE |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD | VARIANT_NUMBER, // used by list parsing
     kAnimationIterationCountKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
-    -moz-animation-name,
+    animation-name,
     animation_name,
-    CSS_PROP_DOMPROP_PREFIXED(AnimationName),
+    AnimationName,
     CSS_PROPERTY_PARSE_VALUE_LIST |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     // FIXME: The spec should say something about 'inherit' and 'initial'
     // not being allowed.
     VARIANT_NONE | VARIANT_IDENTIFIER_NO_INHERIT, // used by list parsing
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
-    -moz-animation-play-state,
+    animation-play-state,
     animation_play_state,
-    CSS_PROP_DOMPROP_PREFIXED(AnimationPlayState),
+    AnimationPlayState,
     CSS_PROPERTY_PARSE_VALUE_LIST |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD, // used by list parsing
     kAnimationPlayStateKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
-    -moz-animation-timing-function,
+    animation-timing-function,
     animation_timing_function,
-    CSS_PROP_DOMPROP_PREFIXED(AnimationTimingFunction),
+    AnimationTimingFunction,
     CSS_PROPERTY_PARSE_VALUE_LIST |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     "",
     VARIANT_KEYWORD | VARIANT_TIMING_FUNCTION, // used by list parsing
     kTransitionTimingFunctionKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SHORTHAND(
--- a/layout/style/nsCSSRules.cpp
+++ b/layout/style/nsCSSRules.cpp
@@ -2012,17 +2012,17 @@ nsCSSKeyframesRule::GetType(PRUint16* aT
 {
   *aType = nsIDOMCSSRule::MOZ_KEYFRAMES_RULE;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsCSSKeyframesRule::GetCssText(nsAString& aCssText)
 {
-  aCssText.AssignLiteral("@-moz-keyframes ");
+  aCssText.AssignLiteral("@keyframes ");
   aCssText.Append(mName);
   aCssText.AppendLiteral(" {\n");
   nsAutoString tmp;
   for (PRUint32 i = 0, i_end = mRules.Count(); i != i_end; ++i) {
     static_cast<nsCSSKeyframeRule*>(mRules[i])->GetCssText(tmp);
     aCssText.Append(tmp);
     aCssText.AppendLiteral("\n");
   }
--- a/layout/style/nsComputedDOMStyle.cpp
+++ b/layout/style/nsComputedDOMStyle.cpp
@@ -4613,16 +4613,25 @@ nsComputedDOMStyle::GetQueryableProperty
    * Properties commented out with // are not yet implemented            *
    * Properties commented out with //// are shorthands and not queryable *
   \* ******************************************************************* */
   static const ComputedStyleMapEntry map[] = {
     /* ***************************** *\
      * Implementations of CSS styles *
     \* ***************************** */
 
+    //// COMPUTED_STYLE_MAP_ENTRY(animation,                Animation),
+    COMPUTED_STYLE_MAP_ENTRY(animation_delay,               AnimationDelay),
+    COMPUTED_STYLE_MAP_ENTRY(animation_direction,           AnimationDirection),
+    COMPUTED_STYLE_MAP_ENTRY(animation_duration,            AnimationDuration),
+    COMPUTED_STYLE_MAP_ENTRY(animation_fill_mode,           AnimationFillMode),
+    COMPUTED_STYLE_MAP_ENTRY(animation_iteration_count,     AnimationIterationCount),
+    COMPUTED_STYLE_MAP_ENTRY(animation_name,                AnimationName),
+    COMPUTED_STYLE_MAP_ENTRY(animation_play_state,          AnimationPlayState),
+    COMPUTED_STYLE_MAP_ENTRY(animation_timing_function,     AnimationTimingFunction),
     COMPUTED_STYLE_MAP_ENTRY(backface_visibility,           BackfaceVisibility),
     //// COMPUTED_STYLE_MAP_ENTRY(background,               Background),
     COMPUTED_STYLE_MAP_ENTRY(background_attachment,         BackgroundAttachment),
     COMPUTED_STYLE_MAP_ENTRY(background_clip,               BackgroundClip),
     COMPUTED_STYLE_MAP_ENTRY(background_color,              BackgroundColor),
     COMPUTED_STYLE_MAP_ENTRY(background_image,              BackgroundImage),
     COMPUTED_STYLE_MAP_ENTRY(background_origin,             BackgroundOrigin),
     COMPUTED_STYLE_MAP_ENTRY(background_position,           BackgroundPosition),
@@ -4754,24 +4763,16 @@ nsComputedDOMStyle::GetQueryableProperty
     /* ******************************* *\
      * Implementations of -moz- styles *
     \* ******************************* */
 
 #ifdef MOZ_FLEXBOX
     COMPUTED_STYLE_MAP_ENTRY(align_items,                   AlignItems),
     COMPUTED_STYLE_MAP_ENTRY(align_self,                    AlignSelf),
 #endif // MOZ_FLEXBOX
-    COMPUTED_STYLE_MAP_ENTRY(animation_delay,               AnimationDelay),
-    COMPUTED_STYLE_MAP_ENTRY(animation_direction,           AnimationDirection),
-    COMPUTED_STYLE_MAP_ENTRY(animation_duration,            AnimationDuration),
-    COMPUTED_STYLE_MAP_ENTRY(animation_fill_mode,           AnimationFillMode),
-    COMPUTED_STYLE_MAP_ENTRY(animation_iteration_count,     AnimationIterationCount),
-    COMPUTED_STYLE_MAP_ENTRY(animation_name,                AnimationName),
-    COMPUTED_STYLE_MAP_ENTRY(animation_play_state,          AnimationPlayState),
-    COMPUTED_STYLE_MAP_ENTRY(animation_timing_function,     AnimationTimingFunction),
     COMPUTED_STYLE_MAP_ENTRY(appearance,                    Appearance),
     COMPUTED_STYLE_MAP_ENTRY(_moz_background_inline_policy, BackgroundInlinePolicy),
     COMPUTED_STYLE_MAP_ENTRY(binding,                       Binding),
     COMPUTED_STYLE_MAP_ENTRY(border_bottom_colors,          BorderBottomColors),
     COMPUTED_STYLE_MAP_ENTRY(border_left_colors,            BorderLeftColors),
     COMPUTED_STYLE_MAP_ENTRY(border_right_colors,           BorderRightColors),
     COMPUTED_STYLE_MAP_ENTRY(border_top_colors,             BorderTopColors),
     COMPUTED_STYLE_MAP_ENTRY(box_align,                     BoxAlign),
--- a/layout/style/test/property_database.js
+++ b/layout/style/test/property_database.js
@@ -38,85 +38,85 @@ function initial_font_family_is_sans_ser
 	// 'sans-serif'.
 	var div = document.createElement("div");
 	div.setAttribute("style", "font: -moz-initial");
 	return getComputedStyle(div, "").fontFamily == "sans-serif";
 }
 var gInitialFontFamilyIsSansSerif = initial_font_family_is_sans_serif();
 
 var gCSSProperties = {
-	"-moz-animation": {
-		domProp: "MozAnimation",
+	"animation": {
+		domProp: "animation",
 		inherited: false,
 		type: CSS_TYPE_TRUE_SHORTHAND,
-		subproperties: [ "-moz-animation-name", "-moz-animation-duration", "-moz-animation-timing-function", "-moz-animation-delay", "-moz-animation-direction", "-moz-animation-fill-mode", "-moz-animation-iteration-count" ],
+		subproperties: [ "animation-name", "animation-duration", "animation-timing-function", "animation-delay", "animation-direction", "animation-fill-mode", "animation-iteration-count" ],
 		initial_values: [ "none none 0s 0s ease normal 1.0", "none", "0s", "ease", "normal", "1.0" ],
 		other_values: [ "bounce 1s linear 2s", "bounce 1s 2s linear", "bounce linear 1s 2s", "linear bounce 1s 2s", "linear 1s bounce 2s", "linear 1s 2s bounce", "1s bounce linear 2s", "1s bounce 2s linear", "1s 2s bounce linear", "1s linear bounce 2s", "1s linear 2s bounce", "1s 2s linear bounce", "bounce linear 1s", "bounce 1s linear", "linear bounce 1s", "linear 1s bounce", "1s bounce linear", "1s linear bounce", "1s 2s bounce", "1s bounce 2s", "bounce 1s 2s", "1s 2s linear", "1s linear 2s", "linear 1s 2s", "bounce 1s", "1s bounce", "linear 1s", "1s linear", "1s 2s", "2s 1s", "bounce", "linear", "1s", "height", "2s", "ease-in-out", "2s ease-in", "opacity linear", "ease-out 2s", "2s color, 1s bounce, 500ms height linear, 1s opacity 4s cubic-bezier(0.0, 0.1, 1.0, 1.0)", "1s \\32bounce linear 2s", "1s -bounce linear 2s", "1s -\\32bounce linear 2s", "1s \\32 0bounce linear 2s", "1s -\\32 0bounce linear 2s", "1s \\2bounce linear 2s", "1s -\\2bounce linear 2s", "2s, 1s bounce", "1s bounce, 2s", "2s all, 1s bounce", "1s bounce, 2s all", "1s bounce, 2s none", "2s none, 1s bounce", "2s bounce, 1s all", "2s all, 1s bounce" ],
 		invalid_values: [  "2s inherit", "inherit 2s", "2s bounce, 1s inherit", "2s inherit, 1s bounce", "2s initial" ]
 	},
-	"-moz-animation-delay": {
-		domProp: "MozAnimationDelay",
+	"animation-delay": {
+		domProp: "animationDelay",
 		inherited: false,
 		type: CSS_TYPE_LONGHAND,
 		initial_values: [ "0s", "0ms" ],
 		other_values: [ "1s", "250ms", "-100ms", "-1s", "1s, 250ms, 2.3s"],
 		invalid_values: [ "0", "0px" ]
 	},
-	"-moz-animation-direction": {
-		domProp: "MozAnimationDirection",
+	"animation-direction": {
+		domProp: "animationDirection",
 		inherited: false,
 		type: CSS_TYPE_LONGHAND,
 		initial_values: [ "normal" ],
 		other_values: [ "alternate", "normal, alternate", "alternate, normal", "normal, normal", "normal, normal, normal", "reverse", "alternate-reverse", "normal, reverse, alternate-reverse, alternate" ],
 		invalid_values: [ "normal normal", "inherit, normal", "reverse-alternate" ]
 	},
-	"-moz-animation-duration": {
-		domProp: "MozAnimationDuration",
+	"animation-duration": {
+		domProp: "animationDuration",
 		inherited: false,
 		type: CSS_TYPE_LONGHAND,
 		initial_values: [ "0s", "0ms" ],
 		other_values: [ "1s", "250ms", "-1ms", "-2s", "1s, 250ms, 2.3s"],
 		invalid_values: [ "0", "0px" ]
 	},
-	"-moz-animation-fill-mode": {
-		domProp: "MozAnimationFillMode",
+	"animation-fill-mode": {
+		domProp: "animationFillMode",
 		inherited: false,
 		type: CSS_TYPE_LONGHAND,
 		initial_values: [ "none" ],
 		other_values: [ "forwards", "backwards", "both", "none, none", "forwards, backwards", "forwards, none", "none, both" ],
 		invalid_values: [ "all"]
 	},
-	"-moz-animation-iteration-count": {
-		domProp: "MozAnimationIterationCount",
+	"animation-iteration-count": {
+		domProp: "animationIterationCount",
 		inherited: false,
 		type: CSS_TYPE_LONGHAND,
 		initial_values: [ "1" ],
 		other_values: [ "infinite", "0", "0.5", "7.75", "-0.0", "1, 2, 3", "infinite, 2", "1, infinite" ],
 		// negatives forbidden per
 		// http://lists.w3.org/Archives/Public/www-style/2011Mar/0355.html
 		invalid_values: [ "none", "-1", "-0.5", "-1, infinite", "infinite, -3" ]
 	},
-	"-moz-animation-name": {
-		domProp: "MozAnimationName",
+	"animation-name": {
+		domProp: "animationName",
 		inherited: false,
 		type: CSS_TYPE_LONGHAND,
 		initial_values: [ "none" ],
 		other_values: [ "all", "ball", "mall", "color", "bounce, bubble, opacity", "foobar", "auto", "\\32bounce", "-bounce", "-\\32bounce", "\\32 0bounce", "-\\32 0bounce", "\\2bounce", "-\\2bounce" ],
 		invalid_values: [ "bounce, initial", "initial, bounce", "bounce, inherit", "inherit, bounce" ]
 	},
-	"-moz-animation-play-state": {
-		domProp: "MozAnimationPlayState",
+	"animation-play-state": {
+		domProp: "animationPlayState",
 		inherited: false,
 		type: CSS_TYPE_LONGHAND,
 		initial_values: [ "running" ],
 		other_values: [ "paused", "running, running", "paused, running", "paused, paused", "running, paused", "paused, running, running, running, paused, running" ],
 		invalid_values: [ "0" ]
 	},
-	"-moz-animation-timing-function": {
-		domProp: "MozAnimationTimingFunction",
+	"animation-timing-function": {
+		domProp: "animationTimingFunction",
 		inherited: false,
 		type: CSS_TYPE_LONGHAND,
 		initial_values: [ "ease", "cubic-bezier(0.25, 0.1, 0.25, 1.0)" ],
 		other_values: [ "linear", "ease-in", "ease-out", "ease-in-out", "linear, ease-in, cubic-bezier(0.1, 0.2, 0.8, 0.9)", "cubic-bezier(0.5, 0.5, 0.5, 0.5)", "cubic-bezier(0.25, 1.5, 0.75, -0.5)", "step-start", "step-end", "steps(1)", "steps(2, start)", "steps(386)", "steps(3, end)" ],
 		invalid_values: [ "none", "auto", "cubic-bezier(0.25, 0.1, 0.25)", "cubic-bezier(0.25, 0.1, 0.25, 0.25, 1.0)", "cubic-bezier(-0.5, 0.5, 0.5, 0.5)", "cubic-bezier(1.5, 0.5, 0.5, 0.5)", "cubic-bezier(0.5, 0.5, -0.5, 0.5)", "cubic-bezier(0.5, 0.5, 1.5, 0.5)", "steps(2, step-end)", "steps(0)", "steps(-2)", "steps(0, step-end, 1)" ]
 	},
 	"-moz-appearance": {
 		domProp: "MozAppearance",
--- a/layout/style/test/test_animations.html
+++ b/layout/style/test/test_animations.html
@@ -4,104 +4,104 @@
 https://bugzilla.mozilla.org/show_bug.cgi?id=435442
 -->
 <head>
   <title>Test for css3-animations (Bug 435442)</title>
   <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <script type="application/javascript" src="animation_utils.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
   <style type="text/css">
-  @-moz-keyframes anim1 {
+  @keyframes anim1 {
      0% { margin-left: 0px }
      50% { margin-left: 80px }
      100% { margin-left: 100px }
   }
-  @-moz-keyframes anim2 {
+  @keyframes anim2 {
     from { margin-right: 0 } to { margin-right: 100px }
   }
-  @-moz-keyframes anim3 {
+  @keyframes anim3 {
     from { margin-top: 0 } to { margin-top: 100px }
   }
-  @-moz-keyframes anim4 {
+  @keyframes anim4 {
     from { margin-bottom: 0 } to { margin-bottom: 100px }
   }
-  @-moz-keyframes anim5 {
+  @keyframes anim5 {
     from { margin-left: 0 } to { margin-left: 100px }
   }
 
-  @-moz-keyframes kf1 {
+  @keyframes kf1 {
     50% { margin-top: 50px }
     to { margin-top: 150px }
   }
-  @-moz-keyframes kf2 {
+  @keyframes kf2 {
     from { margin-top: 150px }
     50% { margin-top: 50px }
   }
-  @-moz-keyframes kf3 {
+  @keyframes kf3 {
     25% { margin-top: 100px }
   }
-  @-moz-keyframes kf4 {
+  @keyframes kf4 {
     to, from { display: inline; margin-top: 37px }
   }
-  @-moz-keyframes kf_cascade1 {
+  @keyframes kf_cascade1 {
     from { padding-top: 50px }
     50%, from { padding-top: 30px }      /* wins: 0% */
     75%, 85%, 50% { padding-top: 20px }  /* wins: 75%, 50% */
     100%, 85% { padding-top: 70px }      /* wins: 100% */
     85.1% { padding-top: 60px }          /* wins: 85.1% */
     85% { padding-top: 30px }            /* wins: 85% */
   }
-  @-moz-keyframes kf_cascade2 { from, to { margin-top: 100px } }
-  @-moz-keyframes kf_cascade2 { from, to { margin-left: 200px } }
-  @-moz-keyframes kf_cascade2 { from, to { margin-left: 300px } }
-  @-moz-keyframes kf_tf1 {
-    0%   { padding-bottom: 20px; -moz-animation-timing-function: ease }
+  @keyframes kf_cascade2 { from, to { margin-top: 100px } }
+  @keyframes kf_cascade2 { from, to { margin-left: 200px } }
+  @keyframes kf_cascade2 { from, to { margin-left: 300px } }
+  @keyframes kf_tf1 {
+    0%   { padding-bottom: 20px; animation-timing-function: ease }
     25%  { padding-bottom: 60px; }
-    50%  { padding-bottom: 160px; -moz-animation-timing-function: steps(5) }
-    75%  { padding-bottom: 120px; -moz-animation-timing-function: linear }
-    100% { padding-bottom: 20px; -moz-animation-timing-function: ease-out }
+    50%  { padding-bottom: 160px; animation-timing-function: steps(5) }
+    75%  { padding-bottom: 120px; animation-timing-function: linear }
+    100% { padding-bottom: 20px; animation-timing-function: ease-out }
   }
 
   #withbefore::before, #withafter::after {
     content: "";
-    -moz-animation: anim2 1s linear alternate infinite;
+    animation: anim2 1s linear alternate infinite;
   }
 
-  @-moz-keyframes multiprop {
+  @keyframes multiprop {
     0% {
       padding-top: 10px; padding-left: 30px;
-      -moz-animation-timing-function: ease;
+      animation-timing-function: ease;
     }
     25% {
       padding-left: 50px;
-      -moz-animation-timing-function: ease-out;
+      animation-timing-function: ease-out;
     }
     50% {
       padding-top: 40px;
     }
     75% {
       padding-top: 80px; padding-left: 60px;
-      -moz-animation-timing-function: ease-in;
+      animation-timing-function: ease-in;
     }
   }
 
-  @-moz-keyframes uaoverride {
+  @keyframes uaoverride {
     0%, 100% { line-height: 3; margin-top: 20px }
     50% { margin-top: 120px }
   }
 
-  @-moz-keyframes cascade {
+  @keyframes cascade {
     0%, 25%, 100% { top: 0 }
     50%, 75% { top: 100px }
     0%, 75%, 100% { left: 0 }
     25%, 50% { left: 100px }
   }
-  @-moz-keyframes cascade2 {
+  @keyframes cascade2 {
     0% { text-indent: 0 }
-    25% { text-indent: 30px; -moz-animation-timing-function: ease-in } /* beaten by rule below */
+    25% { text-indent: 30px; animation-timing-function: ease-in } /* beaten by rule below */
     50% { text-indent: 0 }
     25% { text-indent: 50px }
     100% { text-indent: 100px }
   }
   </style>
 </head>
 <body>
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=435442">Mozilla Bug 435442</a>
@@ -189,17 +189,17 @@ advance_clock(0);
  */
 
 // Test that animations don't affect the computed value before the
 // start of the animation or after its end.  Test without
 // animation-fill-mode, but then repeat the test with all the values of
 // animation-fill-mode.
 function test_fill_mode(fill_mode, fills_backwards, fills_forwards)
 {
-  var style = "margin-left: 30px; -moz-animation: 10s 3s anim1 linear";
+  var style = "margin-left: 30px; animation: 10s 3s anim1 linear";
   var desc;
   if (fill_mode.length > 0) {
     style += " " + fill_mode;
     desc = "fill mode " + fill_mode + ": ";
   } else {
     desc = "default fill mode: ";
   }
   new_div(style);
@@ -249,17 +249,17 @@ function test_fill_mode(fill_mode, fills
 test_fill_mode("", false, false);
 test_fill_mode("none", false, false);
 test_fill_mode("forwards", false, true);
 test_fill_mode("backwards", true, false);
 test_fill_mode("both", true, true);
 
 // Test that animations continue running when the animation name
 // list is changed.
-new_div("-moz-animation: anim1 linear 10s");
+new_div("animation: anim1 linear 10s");
   is(cs.getPropertyValue("margin-top"), "0px",
      "just anim1, margin-top at start");
   is(cs.getPropertyValue("margin-right"), "0px",
      "just anim1, margin-right at start");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "just anim1, margin-bottom at start");
   is(cs.getPropertyValue("margin-left"), "0px",
      "just anim1, margin-left at start");
@@ -268,17 +268,17 @@ advance_clock(1000);
      "just anim1, margin-top at 1s");
   is(cs.getPropertyValue("margin-right"), "0px",
      "just anim1, margin-right at 1s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "just anim1, margin-bottom at 1s");
   is(cs.getPropertyValue("margin-left"), "16px",
      "just anim1, margin-left at 1s");
 // append anim2
-div.style.MozAnimation = "anim1 linear 10s, anim2 linear 10s";
+div.style.animation = "anim1 linear 10s, anim2 linear 10s";
   is(cs.getPropertyValue("margin-top"), "0px",
      "anim1 + anim2, margin-top at 1s");
   is(cs.getPropertyValue("margin-right"), "0px",
      "anim1 + anim2, margin-right at 1s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim1 + anim2, margin-bottom at 1s");
   is(cs.getPropertyValue("margin-left"), "16px",
      "anim1 + anim2, margin-left at 1s");
@@ -287,17 +287,17 @@ advance_clock(1000);
      "anim1 + anim2, margin-top at 2s");
   is(cs.getPropertyValue("margin-right"), "10px",
      "anim1 + anim2, margin-right at 2s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim1 + anim2, margin-bottom at 2s");
   is(cs.getPropertyValue("margin-left"), "32px",
      "anim1 + anim2, margin-left at 2s");
 // prepend anim3
-div.style.MozAnimation = "anim3 linear 10s, anim1 linear 10s, anim2 linear 10s";
+div.style.animation = "anim3 linear 10s, anim1 linear 10s, anim2 linear 10s";
   is(cs.getPropertyValue("margin-top"), "0px",
      "anim3 + anim1 + anim2, margin-top at 2s");
   is(cs.getPropertyValue("margin-right"), "10px",
      "anim3 + anim1 + anim2, margin-right at 2s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim3 + anim1 + anim2, margin-bottom at 2s");
   is(cs.getPropertyValue("margin-left"), "32px",
      "anim3 + anim1 + anim2, margin-left at 2s");
@@ -306,17 +306,17 @@ advance_clock(1000);
      "anim3 + anim1 + anim2, margin-top at 3s");
   is(cs.getPropertyValue("margin-right"), "20px",
      "anim3 + anim1 + anim2, margin-right at 3s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim3 + anim1 + anim2, margin-bottom at 3s");
   is(cs.getPropertyValue("margin-left"), "48px",
      "anim3 + anim1 + anim2, margin-left at 3s");
 // remove anim2 from end
-div.style.MozAnimation = "anim3 linear 10s, anim1 linear 10s";
+div.style.animation = "anim3 linear 10s, anim1 linear 10s";
   is(cs.getPropertyValue("margin-top"), "10px",
      "anim3 + anim1, margin-top at 3s");
   is(cs.getPropertyValue("margin-right"), "0px",
      "anim3 + anim1, margin-right at 3s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim3 + anim1, margin-bottom at 3s");
   is(cs.getPropertyValue("margin-left"), "48px",
      "anim3 + anim1, margin-left at 3s");
@@ -325,17 +325,17 @@ advance_clock(1000);
      "anim3 + anim1, margin-top at 4s");
   is(cs.getPropertyValue("margin-right"), "0px",
      "anim3 + anim1, margin-right at 4s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim3 + anim1, margin-bottom at 4s");
   is(cs.getPropertyValue("margin-left"), "64px",
      "anim3 + anim1, margin-left at 4s");
 // swap anim1 and anim3, change duration of anim3
-div.style.MozAnimation = "anim1 linear 10s, anim3 linear 5s";
+div.style.animation = "anim1 linear 10s, anim3 linear 5s";
   is(cs.getPropertyValue("margin-top"), "40px",
      "anim1 + anim3, margin-top at 4s");
   is(cs.getPropertyValue("margin-right"), "0px",
      "anim1 + anim3, margin-right at 4s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim1 + anim3, margin-bottom at 4s");
   is(cs.getPropertyValue("margin-left"), "64px",
      "anim1 + anim3, margin-left at 4s");
@@ -344,28 +344,28 @@ advance_clock(1000);
      "anim1 + anim3, margin-top at 5s");
   is(cs.getPropertyValue("margin-right"), "0px",
      "anim1 + anim3, margin-right at 5s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim1 + anim3, margin-bottom at 5s");
   is(cs.getPropertyValue("margin-left"), "80px",
      "anim1 + anim3, margin-left at 5s");
 // list anim1 twice, last duration wins, original start time still applies
-div.style.MozAnimation = "anim1 linear 10s, anim3 linear 5s, anim1 linear 20s";
+div.style.animation = "anim1 linear 10s, anim3 linear 5s, anim1 linear 20s";
   is(cs.getPropertyValue("margin-top"), "60px",
      "anim1 + anim3 + anim1, margin-top at 5s");
   is(cs.getPropertyValue("margin-right"), "0px",
      "anim1 + anim3 + anim1, margin-right at 5s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim1 + anim3 + anim1, margin-bottom at 5s");
   is(cs.getPropertyValue("margin-left"), "40px",
      "anim1 + anim3 + anim1, margin-left at 5s");
 // drop one of the anim1, and list anim5 as well, which animates
 // the same property as anim1
-div.style.MozAnimation = "anim3 linear 5s, anim1 linear 20s, anim5 linear 10s";
+div.style.animation = "anim3 linear 5s, anim1 linear 20s, anim5 linear 10s";
   is(cs.getPropertyValue("margin-top"), "60px",
      "anim3 + anim1 + anim5, margin-top at 5s");
   is(cs.getPropertyValue("margin-right"), "0px",
      "anim3 + anim1 + anim5, margin-right at 5s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim3 + anim1 + anim5, margin-bottom at 5s");
   is(cs.getPropertyValue("margin-left"), "0px",
      "anim3 + anim1 + anim5, margin-left at 5s");
@@ -374,17 +374,17 @@ advance_clock(1000);
      "anim3 + anim1 + anim5, margin-top at 6s");
   is(cs.getPropertyValue("margin-right"), "0px",
      "anim3 + anim1 + anim5, margin-right at 6s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim3 + anim1 + anim5, margin-bottom at 6s");
   is(cs.getPropertyValue("margin-left"), "10px",
      "anim3 + anim1 + anim5, margin-left at 6s");
 // now swap the anim5 and anim1 order
-div.style.MozAnimation = "anim3 linear 5s, anim5 linear 10s, anim1 linear 20s";
+div.style.animation = "anim3 linear 5s, anim5 linear 10s, anim1 linear 20s";
   is(cs.getPropertyValue("margin-top"), "80px",
      "anim3 + anim1 + anim5, margin-top at 6s");
   is(cs.getPropertyValue("margin-right"), "0px",
      "anim3 + anim1 + anim5, margin-right at 6s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim3 + anim1 + anim5, margin-bottom at 6s");
   is(cs.getPropertyValue("margin-left"), "48px",
      "anim3 + anim1 + anim5, margin-left at 6s");
@@ -393,38 +393,38 @@ advance_clock(1000);
      "anim3 + anim1 + anim5, margin-top at 7s");
   is(cs.getPropertyValue("margin-right"), "0px",
      "anim3 + anim1 + anim5, margin-right at 7s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim3 + anim1 + anim5, margin-bottom at 7s");
   is(cs.getPropertyValue("margin-left"), "56px",
      "anim3 + anim1 + anim5, margin-left at 7s");
 // swap anim1 and anim5 back
-div.style.MozAnimation = "anim3 linear 5s, anim1 linear 20s, anim5 linear 10s";
+div.style.animation = "anim3 linear 5s, anim1 linear 20s, anim5 linear 10s";
   is(cs.getPropertyValue("margin-top"), "0px",
      "anim3 + anim1 + anim5, margin-top at 7s");
   is(cs.getPropertyValue("margin-right"), "0px",
      "anim3 + anim1 + anim5, margin-right at 7s");
   is(cs.getPropertyValue("margin-bottom"), "0px",
      "anim3 + anim1 + anim5, margin-bottom at 7s");
   is(cs.getPropertyValue("margin-left"), "20px",
      "anim3 + anim1 + anim5, margin-left at 7s");
 advance_clock(100);
   is(cs.getPropertyValue("margin-top"), "0px",
      "anim3 + anim1 + anim5, margin-top at 7.1s");
 // Change the animation fill mode on the completed animation.
-div.style.MozAnimation = "anim3 linear 5s forwards, anim1 linear 20s, anim5 linear 10s";
+div.style.animation = "anim3 linear 5s forwards, anim1 linear 20s, anim5 linear 10s";
   is(cs.getPropertyValue("margin-top"), "100px",
      "anim3 + anim1 + anim5, margin-top at 7.1s, with fill mode");
 advance_clock(900);
   is(cs.getPropertyValue("margin-top"), "100px",
      "anim3 + anim1 + anim5, margin-top at 8s, with fill mode");
 // Change the animation duration on the completed animation, so it is
 // no longer completed.
-div.style.MozAnimation = "anim3 linear 10s, anim1 linear 20s, anim5 linear 10s";
+div.style.animation = "anim3 linear 10s, anim1 linear 20s, anim5 linear 10s";
   is(cs.getPropertyValue("margin-top"), "60px",
      "anim3 + anim1 + anim5, margin-top at 8s, with fill mode");
   is(cs.getPropertyValue("margin-left"), "30px",
      "anim3 + anim1 + anim5, margin-left at 8s");
 done_div();
 
 /*
  * css3-animations:  3. Keyframes
@@ -433,17 +433,17 @@ done_div();
  * Also see test_keyframes_rules.html .
  */
 
 // Test the rules on keyframes that lack a 0% or 100% rule:
 // (simultaneously, test that reverse animations have their keyframes
 // run backwards)
 
 // 100px at 0%, 50px at 50%, 150px at 100%
-new_div("margin-top: 100px; -moz-animation: kf1 ease 1s alternate infinite");
+new_div("margin-top: 100px; animation: kf1 ease 1s alternate infinite");
 is(cs.marginTop, "100px", "no-0% at 0.0s");
 advance_clock(100);
 is_approx(px_to_num(cs.marginTop), 100 - 50 * gTF.ease(0.2), 0.01,
           "no-0% at 0.1s");
 advance_clock(200);
 is_approx(px_to_num(cs.marginTop), 100 - 50 * gTF.ease(0.6), 0.01,
           "no-0% at 0.3s");
 advance_clock(200);
@@ -468,17 +468,17 @@ is_approx(px_to_num(cs.marginTop), 100 -
 advance_clock(200);
 is_approx(px_to_num(cs.marginTop), 100 - 50 * gTF.ease(0.2), 0.01,
           "no-0% at 1.9s");
 advance_clock(100);
 is(cs.marginTop, "100px", "no-0% at 2.0s");
 done_div();
 
 // 150px at 0%, 50px at 50%, 100px at 100%
-new_div("margin-top: 100px; -moz-animation: kf2 ease-in 1s alternate infinite");
+new_div("margin-top: 100px; animation: kf2 ease-in 1s alternate infinite");
 is(cs.marginTop, "150px", "no-100% at 0.0s");
 advance_clock(100);
 is_approx(px_to_num(cs.marginTop), 150 - 100 * gTF.ease_in(0.2), 0.01,
           "no-100% at 0.1s");
 advance_clock(200);
 is_approx(px_to_num(cs.marginTop), 150 - 100 * gTF.ease_in(0.6), 0.01,
           "no-100% at 0.3s");
 advance_clock(200);
@@ -504,17 +504,17 @@ advance_clock(200);
 is_approx(px_to_num(cs.marginTop), 150 - 100 * gTF.ease_in(0.2), 0.01,
           "no-100% at 1.9s");
 advance_clock(100);
 is(cs.marginTop, "150px", "no-100% at 2.0s");
 done_div();
 
 
 // 50px at 0%, 100px at 25%, 50px at 100%
-new_div("margin-top: 50px; -moz-animation: kf3 ease-out 1s alternate infinite");
+new_div("margin-top: 50px; animation: kf3 ease-out 1s alternate infinite");
 is(cs.marginTop, "50px", "no-0%-no-100% at 0.0s");
 advance_clock(50);
 is_approx(px_to_num(cs.marginTop), 50 + 50 * gTF.ease_out(0.2), 0.01,
           "no-0%-no-100% at 0.05s");
 advance_clock(100);
 is_approx(px_to_num(cs.marginTop), 50 + 50 * gTF.ease_out(0.6), 0.01,
           "no-0%-no-100% at 0.15s");
 advance_clock(100);
@@ -542,41 +542,41 @@ is_approx(px_to_num(cs.marginTop), 50 + 
 advance_clock(50);
 is(cs.marginTop, "50px", "no-0%-no-100% at 2.0s");
 done_div();
 
 // Test that non-animatable properties are ignored.
 // Simultaneously, test that the block is still honored, and that
 // we still override the value when two consecutive keyframes have
 // the same value.
-new_div("-moz-animation: kf4 ease 10s");
+new_div("animation: kf4 ease 10s");
 is(cs.display, "block",
    "non-animatable properties should be ignored (linear, 0s)");
 is(cs.marginTop, "37px",
    "animatable properties should still apply (linear, 0s)");
 advance_clock(1000);
 is(cs.display, "block",
    "non-animatable properties should be ignored (linear, 1s)");
 is(cs.marginTop, "37px",
    "animatable properties should still apply (linear, 1s)");
 done_div();
-new_div("-moz-animation: kf4 step-start 10s");
+new_div("animation: kf4 step-start 10s");
 is(cs.display, "block",
    "non-animatable properties should be ignored (step-start, 0s)");
 is(cs.marginTop, "37px",
    "animatable properties should still apply (step-start, 0s)");
 advance_clock(1000);
 is(cs.display, "block",
    "non-animatable properties should be ignored (step-start, 1s)");
 is(cs.marginTop, "37px",
    "animatable properties should still apply (step-start, 1s)");
 done_div();
 
 // Test cascading of the keyframes within an @keyframes rule.
-new_div("-moz-animation: kf_cascade1 linear 10s");
+new_div("animation: kf_cascade1 linear 10s");
 //   0%: 30px
 //  50%: 20px
 //  75%: 20px
 //  85%: 30px
 //  85.1%: 60px
 // 100%: 70px
 is(cs.paddingTop, "30px", "kf_cascade1 at 0s");
 advance_clock(2500);
@@ -593,26 +593,26 @@ advance_clock(500);
 is(cs.paddingTop, "30px", "kf_cascade1 at 8.5s");
 advance_clock(10);
 is(cs.paddingTop, "60px", "kf_cascade1 at 8.51s");
 advance_clock(745);
 is(cs.paddingTop, "65px", "kf_cascade1 at 9.2505s");
 done_div();
 
 // Test cascading of the @keyframes rules themselves.
-new_div("-moz-animation: kf_cascade2 linear 10s");
+new_div("animation: kf_cascade2 linear 10s");
 is(cs.marginTop, "0px", "@keyframes rule with margin-top should be ignored");
 is(cs.marginLeft, "300px", "last @keyframes rule with margin-left should win");
 done_div();
 
 /*
  * css3-animations:  3.1. Timing functions for keyframes
  * http://dev.w3.org/csswg/css3-animations/#timing-functions-for-keyframes-
  */
-new_div("-moz-animation: kf_tf1 ease-in 10s alternate infinite");
+new_div("animation: kf_tf1 ease-in 10s alternate infinite");
 is(cs.paddingBottom, "20px",
    "keyframe timing functions test at 0s (test needed for flush)");
 advance_clock(1000);
 is_approx(px_to_num(cs.paddingBottom), 20 + 40 * gTF.ease(0.4), 0.01,
           "keyframe timing functions test at 1s");
 advance_clock(1000);
 is_approx(px_to_num(cs.paddingBottom), 20 + 40 * gTF.ease(0.8), 0.01,
           "keyframe timing functions test at 2s");
@@ -671,17 +671,17 @@ advance_clock(1000);
 is_approx(px_to_num(cs.paddingBottom), 20 + 40 * gTF.ease(0.4), 0.01,
           "keyframe timing functions test at 39s");
 advance_clock(1000);
 is(cs.paddingBottom, "20px",
    "keyframe timing functions test at 40s");
 done_div();
 
 // spot-check the same thing without alternate
-new_div("-moz-animation: kf_tf1 ease-in 10s infinite");
+new_div("animation: kf_tf1 ease-in 10s infinite");
 is(cs.paddingBottom, "20px",
    "keyframe timing functions test at 0s (test needed for flush)");
 advance_clock(11000);
 is_approx(px_to_num(cs.paddingBottom), 20 + 40 * gTF.ease(0.4), 0.01,
           "keyframe timing functions test at 11s");
 advance_clock(3000);
 is_approx(px_to_num(cs.paddingBottom), 60 + 100 * gTF.ease_in(0.6), 0.01,
           "keyframe timing functions test at 14s");
@@ -701,31 +701,31 @@ done_div();
 // animation-name is reasonably well-tested up in the tests for Section
 // 2, particularly the tests that "Test that animations continue running
 // when the animation name list is changed."
 
 // Test that 'animation-name: none' steps the animation, and setting
 // it again starts a new one.
 
 new_div("");
-div.style.MozAnimation = "anim2 ease-in-out 10s";
+div.style.animation = "anim2 ease-in-out 10s";
 is(cs.marginRight, "0px", "after setting animation-name to anim2");
 advance_clock(1000);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in_out(0.1), 0.01,
           "before changing animation-name to none");
-div.style.MozAnimationName = "none";
+div.style.animationName = "none";
 is(cs.marginRight, "0px", "after changing animation-name to none");
 advance_clock(1000);
 is(cs.marginRight, "0px", "after changing animation-name to none plus 1s");
-div.style.MozAnimationName = "anim2";
+div.style.animationName = "anim2";
 is(cs.marginRight, "0px", "after changing animation-name to anim2");
 advance_clock(1000);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in_out(0.1), 0.01,
           "at 1s in animation when animation-name no longer none again");
-div.style.MozAnimationName = "none";
+div.style.animationName = "none";
 is(cs.marginRight, "0px", "after changing animation-name to none");
 advance_clock(1000);
 is(cs.marginRight, "0px", "after changing animation-name to none plus 1s");
 done_div();
 
 /*
  * css3-animations:  3.3. The 'animation-duration' Property
  * http://dev.w3.org/csswg/css3-animations/#the-animation-duration-property-
@@ -741,17 +741,17 @@ done_div();
  */
 
 // tested in tests for section 3.1
 
 /*
  * css3-animations:  3.5. The 'animation-iteration-count' Property
  * http://dev.w3.org/csswg/css3-animations/#the-animation-iteration-count-property-
  */
-new_div("-moz-animation: anim2 ease-in 10s 0.3 forwards");
+new_div("animation: anim2 ease-in 10s 0.3 forwards");
 is(cs.marginRight, "0px", "animation-iteration-count test 1 at 0s");
 advance_clock(2000);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.2), 0.01,
           "animation-iteration-count test 1 at 2s");
 advance_clock(900);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.29), 0.01,
           "animation-iteration-count test 1 at 2.9s");
 advance_clock(100);
@@ -760,17 +760,17 @@ is_approx(px_to_num(cs.marginRight), 100
 advance_clock(100);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.3), 0.01,
           "animation-iteration-count test 1 at 3.1s");
 advance_clock(5000);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.3), 0.01,
           "animation-iteration-count test 1 at 8.1s");
 done_div();
 
-new_div("-moz-animation: anim2 ease-in 10s 0.3, anim3 ease-out 20s 1.2 alternate forwards, anim4 ease-in-out 5s 1.6 forwards");
+new_div("animation: anim2 ease-in 10s 0.3, anim3 ease-out 20s 1.2 alternate forwards, anim4 ease-in-out 5s 1.6 forwards");
 is(cs.marginRight, "0px", "animation-iteration-count test 2 at 0s");
 is(cs.marginTop, "0px", "animation-iteration-count test 3 at 0s");
 is(cs.marginBottom, "0px", "animation-iteration-count test 4 at 0s");
 advance_clock(2000);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.2), 0.01,
           "animation-iteration-count test 2 at 2s");
 is_approx(px_to_num(cs.marginTop), 100 * gTF.ease_out(0.1), 0.01,
           "animation-iteration-count test 3 at 2s");
@@ -821,205 +821,205 @@ done_div();
 
 /*
  * css3-animations:  3.6. The 'animation-direction' Property
  * http://dev.w3.org/csswg/css3-animations/#the-animation-direction-property-
  */
 
 // Tested in tests for sections 3.1 and 3.5.
 
-new_div("-moz-animation: anim2 ease-in 10s infinite");
-div.style.MozAnimationDirection = "normal";
+new_div("animation: anim2 ease-in 10s infinite");
+div.style.animationDirection = "normal";
 is(cs.marginRight, "0px", "animation-direction test 1 (normal) at 0s");
-div.style.MozAnimationDirection = "reverse";
+div.style.animationDirection = "reverse";
 is(cs.marginRight, "100px", "animation-direction test 1 (reverse) at 0s");
-div.style.MozAnimationDirection = "alternate";
+div.style.animationDirection = "alternate";
 is(cs.marginRight, "0px", "animation-direction test 1 (alternate) at 0s");
-div.style.MozAnimationDirection = "alternate-reverse";
+div.style.animationDirection = "alternate-reverse";
 is(cs.marginRight, "100px", "animation-direction test 1 (alternate-reverse) at 0s");
 advance_clock(2000);
-div.style.MozAnimationDirection = "normal";
+div.style.animationDirection = "normal";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.2), 0.01,
           "animation-direction test 1 (normal) at 2s");
-div.style.MozAnimationDirection = "reverse";
+div.style.animationDirection = "reverse";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.8), 0.01,
           "animation-direction test 1 (reverse) at 2s");
-div.style.MozAnimationDirection = "alternate";
+div.style.animationDirection = "alternate";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.2), 0.01,
           "animation-direction test 1 (alternate) at 2s");
-div.style.MozAnimationDirection = "alternate-reverse";
+div.style.animationDirection = "alternate-reverse";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.8), 0.01,
           "animation-direction test 1 (alternate-reverse) at 2s");
 advance_clock(5000);
-div.style.MozAnimationDirection = "normal";
+div.style.animationDirection = "normal";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.7), 0.01,
           "animation-direction test 1 (normal) at 7s");
-div.style.MozAnimationDirection = "reverse";
+div.style.animationDirection = "reverse";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.3), 0.01,
           "animation-direction test 1 (reverse) at 7s");
-div.style.MozAnimationDirection = "alternate";
+div.style.animationDirection = "alternate";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.7), 0.01,
           "animation-direction test 1 (alternate) at 7s");
-div.style.MozAnimationDirection = "alternate-reverse";
+div.style.animationDirection = "alternate-reverse";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.3), 0.01,
           "animation-direction test 1 (alternate-reverse) at 7s");
 advance_clock(5000);
-div.style.MozAnimationDirection = "normal";
+div.style.animationDirection = "normal";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.2), 0.01,
           "animation-direction test 1 (normal) at 12s");
-div.style.MozAnimationDirection = "reverse";
+div.style.animationDirection = "reverse";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.8), 0.01,
           "animation-direction test 1 (reverse) at 12s");
-div.style.MozAnimationDirection = "alternate";
+div.style.animationDirection = "alternate";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.8), 0.01,
           "animation-direction test 1 (alternate) at 12s");
-div.style.MozAnimationDirection = "alternate-reverse";
+div.style.animationDirection = "alternate-reverse";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.2), 0.01,
           "animation-direction test 1 (alternate-reverse) at 12s");
 advance_clock(10000);
-div.style.MozAnimationDirection = "normal";
+div.style.animationDirection = "normal";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.2), 0.01,
           "animation-direction test 1 (normal) at 22s");
-div.style.MozAnimationDirection = "reverse";
+div.style.animationDirection = "reverse";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.8), 0.01,
           "animation-direction test 1 (reverse) at 22s");
-div.style.MozAnimationDirection = "alternate";
+div.style.animationDirection = "alternate";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.2), 0.01,
           "animation-direction test 1 (alternate) at 22s");
-div.style.MozAnimationDirection = "alternate-reverse";
+div.style.animationDirection = "alternate-reverse";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.8), 0.01,
           "animation-direction test 1 (alternate-reverse) at 22s");
 advance_clock(30000);
-div.style.MozAnimationDirection = "normal";
+div.style.animationDirection = "normal";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.2), 0.01,
           "animation-direction test 1 (normal) at 52s");
-div.style.MozAnimationDirection = "reverse";
+div.style.animationDirection = "reverse";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.8), 0.01,
           "animation-direction test 1 (reverse) at 52s");
-div.style.MozAnimationDirection = "alternate";
+div.style.animationDirection = "alternate";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.8), 0.01,
           "animation-direction test 1 (alternate) at 52s");
-div.style.MozAnimationDirection = "alternate-reverse";
+div.style.animationDirection = "alternate-reverse";
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.2), 0.01,
           "animation-direction test 1 (alternate-reverse) at 52s");
 done_div();
 
 /*
  * css3-animations:  3.7. The 'animation-play-state' Property
  * http://dev.w3.org/csswg/css3-animations/#the-animation-play-state-property-
  */
 
 // simple test with just one animation
 new_div("");
-div.style.MozAnimationTimingFunction = "ease";
-div.style.MozAnimationName = "anim1";
-div.style.MozAnimationDuration = "1s";
-div.style.MozAnimationDirection = "alternate";
-div.style.MozAnimationIterationCount = "2";
+div.style.animationTimingFunction = "ease";
+div.style.animationName = "anim1";
+div.style.animationDuration = "1s";
+div.style.animationDirection = "alternate";
+div.style.animationIterationCount = "2";
 is(cs.marginLeft, "0px", "animation-play-state test 1, at 0s");
 advance_clock(250);
 is_approx(px_to_num(cs.marginLeft), 80 * gTF.ease(0.5), 0.01,
           "animation-play-state test 1 at 250ms");
-div.style.MozAnimationPlayState = "paused";
+div.style.animationPlayState = "paused";
 is_approx(px_to_num(cs.marginLeft), 80 * gTF.ease(0.5), 0.01,
           "animation-play-state test 1 at 250ms");
 advance_clock(250);
 is_approx(px_to_num(cs.marginLeft), 80 * gTF.ease(0.5), 0.01,
           "animation-play-state test 1 still at 500ms");
-div.style.MozAnimationPlayState = "running";
+div.style.animationPlayState = "running";
 is_approx(px_to_num(cs.marginLeft), 80 * gTF.ease(0.5), 0.01,
           "animation-play-state test 1 still at 500ms");
 advance_clock(500);
 is_approx(px_to_num(cs.marginLeft), 80 + 20 * gTF.ease(0.5), 0.01,
           "animation-play-state test 1 at 1000ms");
 advance_clock(250);
 is(cs.marginLeft, "100px", "animation-play-state test 1 at 1250ms");
 advance_clock(250);
 is_approx(px_to_num(cs.marginLeft), 80 + 20 * gTF.ease(0.5), 0.01,
           "animation-play-state test 1 at 1500ms");
-div.style.MozAnimationPlayState = "paused";
+div.style.animationPlayState = "paused";
 is_approx(px_to_num(cs.marginLeft), 80 + 20 * gTF.ease(0.5), 0.01,
           "animation-play-state test 1 at 1500ms");
 advance_clock(2000);
 is_approx(px_to_num(cs.marginLeft), 80 + 20 * gTF.ease(0.5), 0.01,
           "animation-play-state test 1 at 3500ms");
 advance_clock(500);
 is_approx(px_to_num(cs.marginLeft), 80 + 20 * gTF.ease(0.5), 0.01,
           "animation-play-state test 1 at 4000ms");
-div.style.MozAnimationPlayState = "";
+div.style.animationPlayState = "";
 is_approx(px_to_num(cs.marginLeft), 80 + 20 * gTF.ease(0.5), 0.01,
           "animation-play-state test 1 at 4000ms");
 advance_clock(500);
 is_approx(px_to_num(cs.marginLeft), 80 * gTF.ease(0.5), 0.01,
           "animation-play-state test 1 at 4500ms");
 advance_clock(250);
 is(cs.marginLeft, "0px", "animation-play-state test 1, at 4750ms");
 advance_clock(250);
 is(cs.marginLeft, "0px", "animation-play-state test 1, at 5000ms");
 done_div();
 
 // more complicated test with multiple animations (and different directions
 // and iteration counts)
 new_div("");
-div.style.MozAnimationTimingFunction = "ease-out, ease-in, ease-in-out";
-div.style.MozAnimationName = "anim2, anim3, anim4";
-div.style.MozAnimationDuration = "1s, 2s, 1s";
-div.style.MozAnimationDirection = "alternate, normal, normal";
-div.style.MozAnimationIterationCount = "4, 2, infinite";
+div.style.animationTimingFunction = "ease-out, ease-in, ease-in-out";
+div.style.animationName = "anim2, anim3, anim4";
+div.style.animationDuration = "1s, 2s, 1s";
+div.style.animationDirection = "alternate, normal, normal";
+div.style.animationIterationCount = "4, 2, infinite";
 is(cs.marginRight, "0px", "animation-play-state test 2, at 0s");
 is(cs.marginTop, "0px", "animation-play-state test 3, at 0s");
 is(cs.marginBottom, "0px", "animation-play-state test 4, at 0s");
 advance_clock(250);
-div.style.MozAnimationPlayState = "paused, running"; // pause 1 and 3
+div.style.animationPlayState = "paused, running"; // pause 1 and 3
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_out(0.25), 0.01,
           "animation-play-state test 2 at 250ms");
 is_approx(px_to_num(cs.marginTop), 100 * gTF.ease_in(0.125), 0.01,
           "animation-play-state test 3 at 250ms");
 is_approx(px_to_num(cs.marginBottom), 100 * gTF.ease_in_out(0.25), 0.01,
           "animation-play-state test 4 at 250ms");
 advance_clock(250);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_out(0.25), 0.01,
           "animation-play-state test 2 at 500ms");
 is_approx(px_to_num(cs.marginTop), 100 * gTF.ease_in(0.25), 0.01,
           "animation-play-state test 3 at 500ms");
 is_approx(px_to_num(cs.marginBottom), 100 * gTF.ease_in_out(0.25), 0.01,
           "animation-play-state test 4 at 500ms");
-div.style.MozAnimationPlayState = "paused, running, running"; // unpause 3
+div.style.animationPlayState = "paused, running, running"; // unpause 3
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_out(0.25), 0.01,
           "animation-play-state test 2 at 500ms");
 is_approx(px_to_num(cs.marginTop), 100 * gTF.ease_in(0.25), 0.01,
           "animation-play-state test 3 at 500ms");
 is_approx(px_to_num(cs.marginBottom), 100 * gTF.ease_in_out(0.25), 0.01,
           "animation-play-state test 4 at 500ms");
 advance_clock(250);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_out(0.25), 0.01,
           "animation-play-state test 2 at 750ms");
 is_approx(px_to_num(cs.marginTop), 100 * gTF.ease_in(0.375), 0.01,
           "animation-play-state test 3 at 750ms");
 is_approx(px_to_num(cs.marginBottom), 100 * gTF.ease_in_out(0.5), 0.01,
           "animation-play-state test 4 at 750ms");
-div.style.MozAnimationPlayState = "running, paused"; // unpause 1, pause 2
+div.style.animationPlayState = "running, paused"; // unpause 1, pause 2
 advance_clock(0); // notify refresh observers
 advance_clock(250);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_out(0.5), 0.01,
           "animation-play-state test 2 at 1000ms");
 is_approx(px_to_num(cs.marginTop), 100 * gTF.ease_in(0.375), 0.01,
           "animation-play-state test 3 at 1000ms");
 is_approx(px_to_num(cs.marginBottom), 100 * gTF.ease_in_out(0.75), 0.01,
           "animation-play-state test 4 at 1000ms");
-div.style.MozAnimationPlayState = "paused"; // pause all
+div.style.animationPlayState = "paused"; // pause all
 advance_clock(0); // notify refresh observers
 advance_clock(3000);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_out(0.5), 0.01,
           "animation-play-state test 2 at 4000ms");
 is_approx(px_to_num(cs.marginTop), 100 * gTF.ease_in(0.375), 0.01,
           "animation-play-state test 3 at 4000ms");
 is_approx(px_to_num(cs.marginBottom), 100 * gTF.ease_in_out(0.75), 0.01,
           "animation-play-state test 4 at 4000ms");
-div.style.MozAnimationPlayState = "running, paused"; // pause 2
+div.style.animationPlayState = "running, paused"; // pause 2
 advance_clock(0); // notify refresh observers
 advance_clock(850);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_out(0.65), 0.01,
           "animation-play-state test 2 at 4850ms");
 is_approx(px_to_num(cs.marginTop), 100 * gTF.ease_in(0.375), 0.01,
           "animation-play-state test 3 at 4850ms");
 is_approx(px_to_num(cs.marginBottom), 100 * gTF.ease_in_out(0.6), 0.01,
           "animation-play-state test 4 at 4850ms");
@@ -1038,17 +1038,17 @@ is_approx(px_to_num(cs.marginTop), 100 *
 is_approx(px_to_num(cs.marginBottom), 100 * gTF.ease_in_out(0.2), 0.01,
           "animation-play-state test 4 at 7450ms");
 advance_clock(100);
 is(cs.marginRight, "0px", "animation-play-state test 2 at 7550ms");
 is_approx(px_to_num(cs.marginTop), 100 * gTF.ease_in(0.375), 0.01,
           "animation-play-state test 3 at 7550ms");
 is_approx(px_to_num(cs.marginBottom), 100 * gTF.ease_in_out(0.3), 0.01,
           "animation-play-state test 4 at 7550ms");
-div.style.MozAnimationPlayState = "running"; // unpause 2
+div.style.animationPlayState = "running"; // unpause 2
 advance_clock(0); // notify refresh observers
 advance_clock(1000);
 is(cs.marginRight, "0px", "animation-play-state test 2 at 7550ms");
 is_approx(px_to_num(cs.marginTop), 100 * gTF.ease_in(0.875), 0.01,
           "animation-play-state test 3 at 7550ms");
 is_approx(px_to_num(cs.marginBottom), 100 * gTF.ease_in_out(0.3), 0.01,
           "animation-play-state test 4 at 7550ms");
 advance_clock(500);
@@ -1077,84 +1077,84 @@ is_approx(px_to_num(cs.marginBottom), 10
 done_div();
 
 /*
  * css3-animations:  3.8. The 'animation-delay' Property
  * http://dev.w3.org/csswg/css3-animations/#the-animation-delay-property-
  */
 
 // test positive delay
-new_div("-moz-animation: anim2 1s 0.5s ease-out");
+new_div("animation: anim2 1s 0.5s ease-out");
 is(cs.marginRight, "0px", "positive delay test at 0ms");
 advance_clock(400);
 is(cs.marginRight, "0px", "positive delay test at 400ms");
 advance_clock(100);
 is(cs.marginRight, "0px", "positive delay test at 500ms");
 advance_clock(100);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_out(0.1), 0.01,
           "positive delay test at 500ms");
 done_div();
 
 // test dynamic changes to delay (i.e., that we only check delay once,
 // at the very start of the animation)
-new_div("-moz-animation: anim2 1s 0.5s ease-out");
+new_div("animation: anim2 1s 0.5s ease-out");
 is(cs.marginRight, "0px", "dynamic delay delay test at 0ms");
 advance_clock(400);
 is(cs.marginRight, "0px", "dynamic delay delay test at 400ms");
-div.style.MozAnimationDelay = "0.2s";
+div.style.animationDelay = "0.2s";
 advance_clock(0);
 advance_clock(100);
 is(cs.marginRight, "0px", "dynamic delay delay test at 500ms");
 advance_clock(100);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_out(0.1), 0.01,
           "dynamic delay delay test at 500ms");
-div.style.MozAnimationDelay = "1s";
+div.style.animationDelay = "1s";
 advance_clock(0);
 advance_clock(100);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_out(0.2), 0.01,
           "dynamic delay delay test at 500ms");
 done_div();
 
 // test delay and play-state interaction
-new_div("-moz-animation: anim2 1s 0.5s ease-out");
+new_div("animation: anim2 1s 0.5s ease-out");
 is(cs.marginRight, "0px", "delay and play-state delay test at 0ms");
 advance_clock(400);
 is(cs.marginRight, "0px", "delay and play-state delay test at 400ms");
-div.style.MozAnimationPlayState = "paused";
+div.style.animationPlayState = "paused";
 advance_clock(0);
 advance_clock(100);
 is(cs.marginRight, "0px", "delay and play-state delay test at 500ms");
 advance_clock(500);
 is(cs.marginRight, "0px", "delay and play-state delay test at 1000ms");
-div.style.MozAnimationPlayState = "running";
+div.style.animationPlayState = "running";
 advance_clock(0);
 advance_clock(100);
 is(cs.marginRight, "0px", "delay and play-state delay test at 1100ms");
 advance_clock(100);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_out(0.1), 0.01,
           "delay and play-state delay test at 1200ms");
-div.style.MozAnimationPlayState = "paused";
+div.style.animationPlayState = "paused";
 advance_clock(0);
 advance_clock(100);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_out(0.1), 0.01,
           "delay and play-state delay test at 1300ms");
 done_div();
 
 // test negative delay and implicit starting values
 new_div("margin-top: 1000px");
 advance_clock(300);
 div.style.marginTop = "100px";
-div.style.MozAnimation = "kf1 1s -0.1s ease-in";
+div.style.animation = "kf1 1s -0.1s ease-in";
 is_approx(px_to_num(cs.marginTop), 100 - 50 * gTF.ease_in(0.2), 0.01,
           "delay and implicit starting values test");
 done_div();
 
 // test large negative delay that causes the animation to start
 // in the fourth iteration
-new_div("-moz-animation: anim2 1s -3.6s ease-in 5 alternate forwards");
+new_div("animation: anim2 1s -3.6s ease-in 5 alternate forwards");
 listen(); // rely on no flush having happened yet
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.4), 0.01,
           "large negative delay test at 0ms");
 check_events([{ type: 'animationstart', target: div,
                 animationName: 'anim2', elapsedTime: 3.6 }],
              "right after start in large negative delay test");
 advance_clock(380);
 is_approx(px_to_num(cs.marginRight), 100 * gTF.ease_in(0.02), 0.01,
@@ -1227,17 +1227,17 @@ advance_clock(300);
 is(cs_after.marginRight, "30px", ":after test at 2300ms");
 check_events([], "no events should be fired for animations on :after");
 done_div();
 
 /**
  * Test handling of properties that are present in only some of the
  * keyframes.
  */
-new_div("-moz-animation: multiprop 1s ease-in-out alternate infinite");
+new_div("animation: multiprop 1s ease-in-out alternate infinite");
 is(cs.paddingTop, "10px", "multiprop top at 0ms");
 is(cs.paddingLeft, "30px", "multiprop top at 0ms");
 advance_clock(100);
 is_approx(px_to_num(cs.paddingTop), 10 + 30 * gTF.ease(0.2), 0.01,
           "multiprop top at 100ms");
 is_approx(px_to_num(cs.paddingLeft), 30 + 20 * gTF.ease(0.4), 0.01,
           "multiprop left at 100ms");
 advance_clock(200);
@@ -1275,82 +1275,82 @@ is_approx(px_to_num(cs.paddingTop), 10 +
           "multiprop top at 1900ms");
 is_approx(px_to_num(cs.paddingLeft), 30 + 20 * gTF.ease(0.4), 0.01,
           "multiprop left at 1900ms");
 done_div();
 
 // Test for https://bugzilla.mozilla.org/show_bug.cgi?id=651456 -- make
 // sure that refreshing of animations doesn't break when we get two
 // refreshes with the same timestamp.
-new_div("-moz-animation: anim2 1s linear");
+new_div("animation: anim2 1s linear");
 is(cs.marginRight, "0px", "bug 651456 at 0ms");
 advance_clock(100);
 is(cs.marginRight, "10px", "bug 651456 at 100ms (1)");
 advance_clock(0); // still forces a refresh
 is(cs.marginRight, "10px", "bug 651456 at 100ms (2)");
 advance_clock(100);
 is(cs.marginRight, "20px", "bug 651456 at 200ms");
 done_div();
 
 // Test that UA !important rules override animations.
 // This test depends on forms.css having a rule
 //   select { line-height: !important }
 // If that rule changes, we should rewrite it to depend on a different rule.
 new_element("select", "");
 var default_line_height = cs.lineHeight;
 done_div();
-new_element("select", "-moz-animation: uaoverride 2s linear infinite");
+new_element("select", "animation: uaoverride 2s linear infinite");
 is(cs.lineHeight, default_line_height,
    "animations should not override UA !important at 0ms");
 is(cs.marginTop, "20px",
    "rest of animation should still work when UA !important present at 0ms");
 advance_clock(200);
 is(cs.lineHeight, default_line_height,
    "animations should not override UA !important at 200ms");
 is(cs.marginTop, "40px",
    "rest of animation should still work when UA !important present at 200ms");
 done_div();
 
 // Test interaction of animations and restyling (Bug 686656).
 // This test depends on kf3 getting its 0% and 100% values from the
 // rules below it in the cascade; we're checking that the animation
 // isn't rebuilt when the restyles happen.
-new_div("-moz-animation: kf3 1s linear forwards");
+new_div("animation: kf3 1s linear forwards");
 is(cs.marginTop, "0px", "bug 686656 test 1 at 0ms");
 advance_clock(250);
 display.style.color = "blue";
 is(cs.marginTop, "100px", "bug 686656 test 1 at 250ms");
 advance_clock(375);
 is(cs.marginTop, "50px", "bug 686656 test 1 at 625ms");
 advance_clock(375);
 is(cs.marginTop, "0px", "bug 686656 test 1 at 1000ms");
 done_div();
 display.style.color = "";
 
 // Test interaction of animations and restyling (Bug 686656),
 // with reframing.
 // This test depends on kf3 getting its 0% and 100% values from the
 // rules below it in the cascade; we're checking that the animation
 // isn't rebuilt when the restyles happen.
-new_div("-moz-animation: kf3 1s linear forwards");
+new_div("animation: kf3 1s linear forwards");
 is(cs.marginTop, "0px", "bug 686656 test 2 at 0ms");
 advance_clock(250);
 display.style.overflow = "scroll";
 is(cs.marginTop, "100px", "bug 686656 test 2 at 250ms");
 advance_clock(375);
 is(cs.marginTop, "50px", "bug 686656 test 2 at 625ms");
 advance_clock(375);
 is(cs.marginTop, "0px", "bug 686656 test 2 at 1000ms");
 done_div();
 display.style.overflow = "";
 
 // Test that cascading between keyframes rules is per-property rather
 // than per-rule (bug ), and that the timing function isn't taken from a
 // rule that's skipped.  (Bug 738003)
-new_div("-moz-animation: cascade 1s linear forwards; position: relative");
+new_div("animation: cascade 1s linear forwards; position: relative");
 is(cs.top, "0px", "cascade test (top) at 0ms");
 is(cs.left, "0px", "cascade test (top) at 0ms");
 advance_clock(125);
 is(cs.top, "0px", "cascade test (top) at 125ms");
 is(cs.left, "50px", "cascade test (top) at 125ms");
 advance_clock(125);
 is(cs.top, "0px", "cascade test (top) at 250ms");
 is(cs.left, "100px", "cascade test (top) at 250ms");
@@ -1369,17 +1369,17 @@ is(cs.left, "0px", "cascade test (top) a
 advance_clock(125);
 is(cs.top, "50px", "cascade test (top) at 875ms");
 is(cs.left, "0px", "cascade test (top) at 875ms");
 advance_clock(125);
 is(cs.top, "0px", "cascade test (top) at 1000ms");
 is(cs.left, "0px", "cascade test (top) at 1000ms");
 done_div();
 
-new_div("-moz-animation: cascade2 8s linear forwards");
+new_div("animation: cascade2 8s linear forwards");
 is(cs.textIndent, "0px", "cascade2 test at 0s");
 advance_clock(1000);
 is(cs.textIndent, "25px", "cascade2 test at 1s");
 advance_clock(1000);
 is(cs.textIndent, "50px", "cascade2 test at 2s");
 advance_clock(1000);
 is(cs.textIndent, "25px", "cascade2 test at 3s");
 advance_clock(1000);
--- a/layout/style/test/test_bug716226.html
+++ b/layout/style/test/test_bug716226.html
@@ -4,17 +4,17 @@
 https://bugzilla.mozilla.org/show_bug.cgi?id=716226
 -->
 <head>
   <meta charset="utf-8">
   <title>Test for Bug 716226</title>
   <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
   <style id="s">
-    @-moz-keyframes foo { }
+    @keyframes foo { }
   </style>
 </head>
 <body>
 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=716226">Mozilla Bug 716226</a>
 <p id="display"></p>
 <div id="content" style="display: none">
   
 </div>
--- a/layout/style/test/test_garbage_at_end_of_declarations.html
+++ b/layout/style/test/test_garbage_at_end_of_declarations.html
@@ -57,25 +57,25 @@ var gAllowsExtra = {
 var gAllowsExtraUnusual = {
   "-moz-transition": { "all": true, "0s": true, "0s 0s": true, "ease": true,
                        "1s 2s linear": true, "1s linear 2s": true,
                        "linear 1s 2s": true, "linear 1s": true,
                        "1s linear": true, "1s 2s": true, "2s 1s": true,
                        "linear": true, "1s": true, "2s": true,
                        "ease-in-out": true, "2s ease-in": true,
                        "ease-out 2s": true },
-  "-moz-animation": { "none": true, "0s": true, "ease": true,
-                      "normal": true, "running": true, "1.0": true,
-                      "1s 2s linear": true, "1s linear 2s": true,
-                      "linear 1s 2s": true, "linear 1s": true,
-                      "1s linear": true, "1s 2s": true, "2s 1s": true,
-                      "linear": true, "1s": true, "2s": true,
-                      "ease-in-out": true, "2s ease-in": true,
-                      "ease-out 2s": true, "1s bounce, 2s": true,
-                      "1s bounce, 2s none": true },
+  "animation": { "none": true, "0s": true, "ease": true,
+                 "normal": true, "running": true, "1.0": true,
+                 "1s 2s linear": true, "1s linear 2s": true,
+                 "linear 1s 2s": true, "linear 1s": true,
+                 "1s linear": true, "1s 2s": true, "2s 1s": true,
+                 "linear": true, "1s": true, "2s": true,
+                 "ease-in-out": true, "2s ease-in": true,
+                 "ease-out 2s": true, "1s bounce, 2s": true,
+                 "1s bounce, 2s none": true },
 };
 
 function test_property(property)
 {
   var info = gCSSProperties[property];
 
   function test_value(value) {
     if (property in gAllowsExtra &&
--- a/layout/style/test/test_keyframes_rules.html
+++ b/layout/style/test/test_keyframes_rules.html
@@ -4,17 +4,17 @@
 https://bugzilla.mozilla.org/show_bug.cgi?id=577974
 -->
 <head>
   <title>Test for Bug 577974</title>
   <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
   <style id="style">
 
-  @-moz-keyframes bounce {
+  @keyframes bounce {
     from {
       margin-left: 0
     }
 
     /*
      * These rules should get dropped due to syntax errors.  The script
      * below tests that the 25% rule following them is at cssRules[1].
      */
@@ -70,17 +70,17 @@ is(bounce.cssRules[0].type, 8, "keyframe
 is(bounce.cssRules[0].keyText, "0%", "keyframe rule keyText");
 is(bounce.cssRules[1].keyText, "25%", "keyframe rule keyText");
 is(bounce.cssRules[2].keyText, "75%, 85%", "keyframe rule keyText");
 is(bounce.cssRules[3].keyText, "100%", "keyframe rule keyText");
 is(bounce.cssRules[0].style.marginLeft, "0px", "keyframe rule style");
 is(bounce.cssRules[1].style.marginLeft, "25px", "keyframe rule style");
 
 is(bounce.cssRules[0].cssText, "0% { margin-left: 0px; }");
-is(bounce.cssText, "@-moz-keyframes bouncier {\n" +
+is(bounce.cssText, "@keyframes bouncier {\n" +
                    "0% { margin-left: 0px; }\n" +
                    "25% { margin-left: 25px; }\n" +
                    "75%, 85% { margin-left: 90px; }\n" +
                    "100% { margin-left: 100px; }\n" +
                    "}");
 
 bounce.cssRules[1].keyText = "from, 1"; // syntax error
 bounce.cssRules[1].keyText = "from, x"; // syntax error
--- a/layout/style/test/test_rules_out_of_sheets.html
+++ b/layout/style/test/test_rules_out_of_sheets.html
@@ -96,17 +96,17 @@ rule = make_rule_and_remove_sheet("@medi
                                   });
 try {
   rule.style.color = "";
 } catch(ex) {}
 try {
   rule.style.color = "fuchsia";
 } catch(ex) {}
 
-rule = make_rule_and_remove_sheet("@-moz-keyframes a { from { color: blue } }");
+rule = make_rule_and_remove_sheet("@keyframes a { from { color: blue } }");
 rule.insertRule("from { color: fuchsia}");
 rule.deleteRule("from");
 rule.name = "b";
 rule.cssRules[0].keyText = "50%";
 
 ok(true, "didn't crash");
 
 </script>
--- a/layout/style/test/test_transitions_computed_values.html
+++ b/layout/style/test/test_transitions_computed_values.html
@@ -63,51 +63,51 @@ is(cs.MozTransitionProperty,
    "margin-left, margin-right, margin-top, margin-bottom",
    "longer property computed correctly");
 p.style.MozTransitionDuration = "";
 c.style.MozTransitionDuration = "";
 c.style.MozTransitionProperty = "";
 
 // And do the same pair of tests for animations:
 
-p.style.MozAnimationName = "bounce, roll";
-c.style.MozAnimationName = "inherit";
-is(cs.MozAnimationName, "bounce, roll",
+p.style.animationName = "bounce, roll";
+c.style.animationName = "inherit";
+is(cs.animationName, "bounce, roll",
    "computed style match with no other properties");
-c.style.MozAnimationDuration = "5s";
-is(cs.MozAnimationName, "bounce, roll",
+c.style.animationDuration = "5s";
+is(cs.animationName, "bounce, roll",
    "computed style match with shorter property");
-is(cs.MozAnimationDuration, "5s",
+is(cs.animationDuration, "5s",
    "shorter property not extended");
-c.style.MozAnimationDuration = "5s, 4s, 3s, 2000ms";
-is(cs.MozAnimationName, "bounce, roll",
+c.style.animationDuration = "5s, 4s, 3s, 2000ms";
+is(cs.animationName, "bounce, roll",
    "computed style match with longer property");
-is(cs.MozAnimationDuration, "5s, 4s, 3s, 2s",
+is(cs.animationDuration, "5s, 4s, 3s, 2s",
    "longer property computed correctly");
-p.style.MozAnimationName = "";
-c.style.MozAnimationName = "";
-c.style.MozAnimationDuration = "";
+p.style.animationName = "";
+c.style.animationName = "";
+c.style.animationDuration = "";
 
 // and repeat the above set of tests with name and duration swapped
-p.style.MozAnimationDuration = "5s, 4s";
-c.style.MozAnimationDuration = "inherit";
-is(cs.MozAnimationDuration, "5s, 4s",
+p.style.animationDuration = "5s, 4s";
+c.style.animationDuration = "inherit";
+is(cs.animationDuration, "5s, 4s",
    "computed style match with no other properties");
-c.style.MozAnimationName = "bounce";
-is(cs.MozAnimationDuration, "5s, 4s",
+c.style.animationName = "bounce";
+is(cs.animationDuration, "5s, 4s",
    "computed style match with shorter property");
-is(cs.MozAnimationName, "bounce",
+is(cs.animationName, "bounce",
    "shorter property not extended");
-c.style.MozAnimationName =
+c.style.animationName =
   "bounce, roll, wiggle, spin";
-is(cs.MozAnimationDuration, "5s, 4s",
+is(cs.animationDuration, "5s, 4s",
    "computed style match with longer property");
-is(cs.MozAnimationName,
+is(cs.animationName,
    "bounce, roll, wiggle, spin",
    "longer property computed correctly");
-p.style.MozAnimationDuration = "";
-c.style.MozAnimationDuration = "";
-c.style.MozAnimationName = "";
+p.style.animationDuration = "";
+c.style.animationDuration = "";
+c.style.animationName = "";
 
 </script>
 </pre>
 </body>
 </html>