Auto merge of #17682 - birtles:check-pref-for-frames-timing, r=hiro

Check Gecko pref before parsing frames() timing function

These are the Servo-side changes for [Gecko bug 1379582](https://bugzilla.mozilla.org/show_bug.cgi?id=1379582).

They have been reviewed by @hiikezoe.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/17682)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2017-07-11 17:28:29 -07:00 committed by GitHub
commit 882fc4731c
2 changed files with 20 additions and 2 deletions

View file

@ -803,6 +803,9 @@ extern "C" {
ComputedTimingFunction_BeforeFlag) ComputedTimingFunction_BeforeFlag)
-> f64; -> f64;
} }
extern "C" {
pub fn Gecko_IsFramesTimingEnabled() -> bool;
}
extern "C" { extern "C" {
pub fn Gecko_AnimationGetBaseStyle(aBaseStyles: pub fn Gecko_AnimationGetBaseStyle(aBaseStyles:
*mut ::std::os::raw::c_void, *mut ::std::os::raw::c_void,

View file

@ -131,6 +131,17 @@ impl<S> OriginComponent<S> {
} }
} }
#[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 { impl Parse for TimingFunction {
fn parse<'i, 't>(context: &ParserContext, input: &mut Parser<'i, 't>) -> Result<Self, ParseError<'i>> { fn parse<'i, 't>(context: &ParserContext, input: &mut Parser<'i, 't>) -> Result<Self, ParseError<'i>> {
if let Ok(keyword) = input.try(TimingKeyword::parse) { if let Ok(keyword) = input.try(TimingKeyword::parse) {
@ -172,8 +183,12 @@ impl Parse for TimingFunction {
Ok(GenericTimingFunction::Steps(steps, position)) Ok(GenericTimingFunction::Steps(steps, position))
}, },
"frames" => { "frames" => {
let frames = Integer::parse_with_minimum(context, i, 2)?; if allow_frames_timing() {
Ok(GenericTimingFunction::Frames(frames)) let frames = Integer::parse_with_minimum(context, i, 2)?;
Ok(GenericTimingFunction::Frames(frames))
} else {
Err(())
}
}, },
_ => Err(()), _ => Err(()),
}).map_err(|()| StyleParseError::UnexpectedFunction(function).into()) }).map_err(|()| StyleParseError::UnexpectedFunction(function).into())