From 38a6b58a0a9306c61477e49e05e3c0574e46c489 Mon Sep 17 00:00:00 2001 From: Bobby Holley Date: Wed, 4 May 2016 16:44:34 -0700 Subject: [PATCH] Hackily return default computed values for unstyled nodes. --- ports/geckolib/glue.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index fb8c99d597e..f1ab19f1233 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -258,9 +258,20 @@ pub extern "C" fn Servo_ReleaseStyleSheet(sheet: *mut RawServoStyleSheet) -> () #[no_mangle] pub extern "C" fn Servo_GetComputedValues(node: *mut RawGeckoNode) -> *mut ServoComputedValues { + use selectors::Element; let node = unsafe { GeckoNode::from_raw(node) }; - let arc_cv = node.borrow_data().map(|data| data.style.clone()); - arc_cv.map_or(ptr::null_mut(), |arc| unsafe { transmute(arc) }) + let arc_cv = match node.borrow_data().map_or(None, |data| data.style.clone()) { + Some(style) => style, + None => { + // FIXME(bholley): This case subverts the intended semantics of this + // function, and exists only to make stylo builds more robust corner- + // cases where Gecko wants the style for a node that Servo never + // traversed. We should remove this as soon as possible. + error!("stylo: encountered unstyled node, substituting default values."); + Arc::new(GeckoComputedValues::initial_values().clone()) + }, + }; + unsafe { transmute(arc_cv) } } #[no_mangle]