aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBobby Holley <bobbyholley@gmail.com>2016-05-04 16:44:34 -0700
committerBobby Holley <bobbyholley@gmail.com>2016-05-06 14:39:59 -0700
commit38a6b58a0a9306c61477e49e05e3c0574e46c489 (patch)
treefbf2a1abe52f3695279bb2a411cf198a68c6dd1a
parent29ed65016047ee10dabf18894ba00ece6227e865 (diff)
downloadservo-38a6b58a0a9306c61477e49e05e3c0574e46c489.tar.gz
servo-38a6b58a0a9306c61477e49e05e3c0574e46c489.zip
Hackily return default computed values for unstyled nodes.
-rw-r--r--ports/geckolib/glue.rs15
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]