Skip to content

Commit

Permalink
Don't inherit all properties for pre-computed pseudos if there are no…
Browse files Browse the repository at this point in the history
… matching rules.
  • Loading branch information
heycam committed Jan 9, 2017
1 parent 6a9e2fd commit 3e0e2bc
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 27 deletions.
2 changes: 1 addition & 1 deletion components/script_layout_interface/wrapper_traits.rs
Expand Up @@ -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 => {
Expand Down
44 changes: 22 additions & 22 deletions components/style/stylist.rs
Expand Up @@ -276,32 +276,33 @@ impl Stylist {
parent: Option<&Arc<ComputedValues>>,
default: &Arc<ComputedValues>,
inherit_all: bool)
-> Option<ComputedStyle> {
-> 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 =
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)
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)))
}
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.
Expand Down Expand Up @@ -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
}

Expand Down
8 changes: 4 additions & 4 deletions ports/geckolib/glue.rs
Expand Up @@ -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]
Expand Down

0 comments on commit 3e0e2bc

Please sign in to comment.