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 1/2] 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); From ebfb18c1b5af9a57d55470674a621726eb6ab0df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Wed, 31 May 2017 11:07:06 +0200 Subject: [PATCH 2/2] Update gecko bindings --- components/style/gecko/generated/structs_debug.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/components/style/gecko/generated/structs_debug.rs b/components/style/gecko/generated/structs_debug.rs index 64501652f31..8c743d31ac9 100644 --- a/components/style/gecko/generated/structs_debug.rs +++ b/components/style/gecko/generated/structs_debug.rs @@ -9306,10 +9306,11 @@ pub mod root { pub mProperty: root::nsCSSPropertyID, pub mValue: root::nsCSSValue, pub mServoDeclarationBlock: root::RefPtr, + pub mSimulateComputeValuesFailure: bool, } #[test] fn bindgen_test_layout_PropertyValuePair() { - assert_eq!(::std::mem::size_of::() , 32usize , + assert_eq!(::std::mem::size_of::() , 40usize , concat ! ( "Size of: " , stringify ! ( PropertyValuePair ) )); assert_eq! (::std::mem::align_of::() , 8usize , @@ -9335,6 +9336,13 @@ pub mod root { "Alignment of field: " , stringify ! ( PropertyValuePair ) , "::" , stringify ! ( mServoDeclarationBlock ) )); + assert_eq! (unsafe { + & ( * ( 0 as * const PropertyValuePair ) ) . + mSimulateComputeValuesFailure as * const _ as usize } + , 32usize , concat ! ( + "Alignment of field: " , stringify ! ( + PropertyValuePair ) , "::" , stringify ! ( + mSimulateComputeValuesFailure ) )); } #[repr(C)] #[derive(Debug, Copy, Clone)]