From 7f5d62c24d393d161c2845dab6bf7ba727ac413e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Tue, 30 May 2017 10:49:13 +0200 Subject: [PATCH] Stylo - Bug 1365674: Simulate compute value failure for tests --- ports/geckolib/glue.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 9ddd0611e53..4ce3978f36e 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -68,7 +68,7 @@ use style::gecko_bindings::structs::{CSSPseudoElementType, CompositeOperation}; use style::gecko_bindings::structs::{RawServoStyleRule, ServoStyleSheet}; use style::gecko_bindings::structs::{SheetParsingMode, nsIAtom, nsCSSPropertyID}; use style::gecko_bindings::structs::{nsCSSFontFaceRule, nsCSSCounterStyleRule}; -use style::gecko_bindings::structs::{nsRestyleHint, nsChangeHint}; +use style::gecko_bindings::structs::{nsRestyleHint, nsChangeHint, PropertyValuePair}; use style::gecko_bindings::structs::IterationCompositeOperation; use style::gecko_bindings::structs::Loader; use style::gecko_bindings::structs::MallocSizeOf; @@ -2424,6 +2424,18 @@ pub extern "C" fn Servo_ResolveStyleLazily(element: RawGeckoElementBorrowed, result.unwrap().into_strong() } +#[cfg(feature = "gecko_debug")] +fn simulate_compute_values_failure(property: &PropertyValuePair) -> bool { + let p = property.mProperty; + let id = get_property_id_from_nscsspropertyid!(p, false); + id.as_shorthand().is_ok() && property.mSimulateComputeValuesFailure +} + +#[cfg(not(feature = "gecko_debug"))] +fn simulate_compute_values_failure(_: &PropertyValuePair) -> bool { + false +} + #[no_mangle] pub extern "C" fn Servo_GetComputedKeyframeValues(keyframes: RawGeckoKeyframeListBorrowed, style: ServoComputedValuesBorrowed, @@ -2470,6 +2482,10 @@ pub extern "C" fn Servo_GetComputedKeyframeValues(keyframes: RawGeckoKeyframeLis .filter(|&property| !property.mServoDeclarationBlock.mRawPtr.is_null()); let mut property_index = 0; for property in iter { + if simulate_compute_values_failure(property) { + continue; + } + let declarations = unsafe { &*property.mServoDeclarationBlock.mRawPtr.clone() }; let declarations = Locked::::as_arc(&declarations); let guard = declarations.read_with(&guard);