diff --git a/components/script_layout_interface/wrapper_traits.rs b/components/script_layout_interface/wrapper_traits.rs index 0103b185096..6ee40a343c1 100644 --- a/components/script_layout_interface/wrapper_traits.rs +++ b/components/script_layout_interface/wrapper_traits.rs @@ -394,7 +394,7 @@ pub trait ThreadSafeLayoutElement: Clone + Copy + Sized + Debug + &context.default_computed_values, false); data.styles_mut().pseudos - .insert(style_pseudo.clone(), new_style.unwrap()); + .insert(style_pseudo.clone(), new_style); } } PseudoElementCascadeType::Lazy => { diff --git a/components/style/stylist.rs b/components/style/stylist.rs index 9c3608ef0c0..0f147f0be9b 100644 --- a/components/style/stylist.rs +++ b/components/style/stylist.rs @@ -276,32 +276,33 @@ impl Stylist { parent: Option<&Arc>, default: &Arc, inherit_all: bool) - -> Option { + -> ComputedStyle { debug_assert!(SelectorImpl::pseudo_element_cascade_type(pseudo).is_precomputed()); - if let Some(declarations) = self.precomputed_pseudo_element_decls.get(pseudo) { - // FIXME(emilio): When we've taken rid of the cascade we can just - // use into_iter. - let rule_node = + + let rule_node = match self.precomputed_pseudo_element_decls.get(pseudo) { + Some(declarations) => { + // FIXME(emilio): When we've taken rid of the cascade we can just + // use into_iter. self.rule_tree.insert_ordered_rules( - declarations.into_iter().map(|a| (a.source.clone(), a.importance))); - - let mut flags = CascadeFlags::empty(); - if inherit_all { - flags.insert(INHERIT_ALL) + declarations.into_iter().map(|a| (a.source.clone(), a.importance))) } + None => self.rule_tree.root(), + }; - let computed = - properties::cascade(self.device.au_viewport_size(), - &rule_node, - parent.map(|p| &**p), - default, - None, - Box::new(StdoutErrorReporter), - flags); - Some(ComputedStyle::new(rule_node, Arc::new(computed))) - } else { - parent.map(|p| ComputedStyle::new(self.rule_tree.root(), p.clone())) + let mut flags = CascadeFlags::empty(); + if inherit_all { + flags.insert(INHERIT_ALL) } + + let computed = + properties::cascade(self.device.au_viewport_size(), + &rule_node, + parent.map(|p| &**p), + default, + None, + Box::new(StdoutErrorReporter), + flags); + ComputedStyle::new(rule_node, Arc::new(computed)) } /// Returns the style for an anonymous box of the given type. @@ -329,7 +330,6 @@ impl Stylist { } }; self.precomputed_values_for_pseudo(&pseudo, Some(parent_style), default_style, inherit_all) - .expect("style_for_anonymous_box(): No precomputed values for that pseudo!") .values } diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index aeb1fe6484e..68a7b0f7c82 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -521,10 +521,10 @@ pub extern "C" fn Servo_ComputedValues_GetForAnonymousBox(parent_style_or_null: let maybe_parent = ComputedValues::arc_from_borrowed(&parent_style_or_null); - let new_computed = data.stylist.precomputed_values_for_pseudo(&pseudo, maybe_parent, - &data.default_computed_values, false) - .map(|styles| styles.values); - new_computed.map_or(Strong::null(), |c| c.into_strong()) + data.stylist.precomputed_values_for_pseudo(&pseudo, maybe_parent, + &data.default_computed_values, false) + .values + .into_strong() } #[no_mangle]