diff options
author | Bobby Holley <bobbyholley@gmail.com> | 2016-05-04 16:44:34 -0700 |
---|---|---|
committer | Bobby Holley <bobbyholley@gmail.com> | 2016-05-06 14:39:59 -0700 |
commit | 38a6b58a0a9306c61477e49e05e3c0574e46c489 (patch) | |
tree | fbf2a1abe52f3695279bb2a411cf198a68c6dd1a | |
parent | 29ed65016047ee10dabf18894ba00ece6227e865 (diff) | |
download | servo-38a6b58a0a9306c61477e49e05e3c0574e46c489.tar.gz servo-38a6b58a0a9306c61477e49e05e3c0574e46c489.zip |
Hackily return default computed values for unstyled nodes.
-rw-r--r-- | ports/geckolib/glue.rs | 15 |
1 files 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] |