From 8daeeb159ae107906be59263995f00e474a3f77a Mon Sep 17 00:00:00 2001 From: Brian Birtles Date: Wed, 12 Jul 2017 08:49:10 +0900 Subject: [PATCH] Check Gecko pref before parsing frames() timing function --- components/style/gecko/generated/bindings.rs | 3 +++ .../style/values/specified/transform.rs | 19 +++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/components/style/gecko/generated/bindings.rs b/components/style/gecko/generated/bindings.rs index 427992d8939..55c6b46474e 100644 --- a/components/style/gecko/generated/bindings.rs +++ b/components/style/gecko/generated/bindings.rs @@ -803,6 +803,9 @@ extern "C" { ComputedTimingFunction_BeforeFlag) -> f64; } +extern "C" { + pub fn Gecko_IsFramesTimingEnabled() -> bool; +} extern "C" { pub fn Gecko_AnimationGetBaseStyle(aBaseStyles: *mut ::std::os::raw::c_void, diff --git a/components/style/values/specified/transform.rs b/components/style/values/specified/transform.rs index 578a9b90ae3..e7af2e6b10f 100644 --- a/components/style/values/specified/transform.rs +++ b/components/style/values/specified/transform.rs @@ -131,6 +131,17 @@ impl OriginComponent { } } +#[cfg(feature = "gecko")] +#[inline] +fn allow_frames_timing() -> bool { + use gecko_bindings::bindings; + unsafe { bindings::Gecko_IsFramesTimingEnabled() } +} + +#[cfg(feature = "servo")] +#[inline] +fn allow_frames_timing() -> bool { true } + impl Parse for TimingFunction { fn parse<'i, 't>(context: &ParserContext, input: &mut Parser<'i, 't>) -> Result> { if let Ok(keyword) = input.try(TimingKeyword::parse) { @@ -172,8 +183,12 @@ impl Parse for TimingFunction { Ok(GenericTimingFunction::Steps(steps, position)) }, "frames" => { - let frames = Integer::parse_with_minimum(context, i, 2)?; - Ok(GenericTimingFunction::Frames(frames)) + if allow_frames_timing() { + let frames = Integer::parse_with_minimum(context, i, 2)?; + Ok(GenericTimingFunction::Frames(frames)) + } else { + Err(()) + } }, _ => Err(()), }).map_err(|()| StyleParseError::UnexpectedFunction(function).into())