From 130a08f0b5ac2baf275ddf2fa3be3c86247fe81c Mon Sep 17 00:00:00 2001 From: Hiroyuki Ikezoe Date: Fri, 12 May 2017 15:35:41 +0900 Subject: [PATCH] Disallow negative duration for animation and transition. --- .../style/properties/longhand/box.mako.rs | 16 ++++++---- components/style/values/specified/mod.rs | 32 +++++++++++++------ .../html/transition-duration-001.htm.ini | 8 ----- .../html/transition-duration-001.htm.ini | 8 ----- 4 files changed, 33 insertions(+), 31 deletions(-) delete mode 100644 tests/wpt/metadata-css/css-transitions-1_dev/html/transition-duration-001.htm.ini delete mode 100644 tests/wpt/metadata-css/css-values-3_dev/html/transition-duration-001.htm.ini diff --git a/components/style/properties/longhand/box.mako.rs b/components/style/properties/longhand/box.mako.rs index 4927c807d2f..ac0ac739a5e 100644 --- a/components/style/properties/longhand/box.mako.rs +++ b/components/style/properties/longhand/box.mako.rs @@ -444,7 +444,7 @@ ${helpers.single_keyword("overflow-x", "visible hidden scroll auto", } pub fn parse(context: &ParserContext, input: &mut Parser) -> Result { - Time::parse(context, input) + Time::parse_non_negative(context, input) } @@ -824,7 +824,11 @@ ${helpers.single_keyword("overflow-x", "visible hidden scroll auto", pub use properties::longhands::transition_duration::single_value::SpecifiedValue; pub use properties::longhands::transition_duration::single_value::computed_value; pub use properties::longhands::transition_duration::single_value::{get_initial_value, get_initial_specified_value}; - pub use properties::longhands::transition_duration::single_value::parse; + + pub fn parse(context: &ParserContext, input: &mut Parser) -> Result { + use values::specified::Time; + Time::parse(context, input) + } <%helpers:vector_longhand name="animation-name" @@ -1031,10 +1035,10 @@ ${helpers.single_keyword("animation-fill-mode", extra_prefixes="moz webkit", spec="https://drafts.csswg.org/css-animations/#propdef-animation-delay", allowed_in_keyframe_block="False"> - pub use properties::longhands::transition_duration::single_value::computed_value; - pub use properties::longhands::transition_duration::single_value::get_initial_specified_value; - pub use properties::longhands::transition_duration::single_value::{get_initial_value, parse}; - pub use properties::longhands::transition_duration::single_value::SpecifiedValue; + pub use properties::longhands::transition_delay::single_value::computed_value; + pub use properties::longhands::transition_delay::single_value::get_initial_specified_value; + pub use properties::longhands::transition_delay::single_value::{get_initial_value, parse}; + pub use properties::longhands::transition_delay::single_value::SpecifiedValue; <%helpers:longhand products="gecko" name="scroll-snap-points-y" animation_value_type="none" diff --git a/components/style/values/specified/mod.rs b/components/style/values/specified/mod.rs index aa8b791615b..8cd5ebdd793 100644 --- a/components/style/values/specified/mod.rs +++ b/components/style/values/specified/mod.rs @@ -539,6 +539,28 @@ impl Time { was_calc: true, } } + + fn parse_with_clamping_mode(context: &ParserContext, + input: &mut Parser, + clamping_mode: AllowedNumericType) -> Result { + match input.next() { + Ok(Token::Dimension(ref value, ref unit)) if clamping_mode.is_ok(value.value) => { + Time::parse_dimension(value.value, &unit, /* from_calc = */ false) + } + Ok(Token::Function(ref name)) if name.eq_ignore_ascii_case("calc") => { + match input.parse_nested_block(|i| CalcNode::parse_time(context, i)) { + Ok(time) if clamping_mode.is_ok(time.seconds) => Ok(time), + _ => Err(()), + } + } + _ => Err(()) + } + } + + /// Parse