mirror of
https://github.com/servo/servo.git
synced 2025-08-10 16:05:43 +01:00
Auto merge of #18666 - emilio:mathml-is-not-fun, r=bholley
style: Avoid creating element data in Servo_ResolvePseudoStyle. The reason the patch in bug 1402285 doesn't work is that we call this function multiple times with the same element. This fixes it. Bug: 1403465 Reviewed-by: bholley MozReview-Commit-ID: Ko9zirCOzTR <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/18666) <!-- Reviewable:end -->
This commit is contained in:
commit
24d75910ae
1 changed files with 20 additions and 10 deletions
|
@ -1772,21 +1772,31 @@ pub extern "C" fn Servo_ResolvePseudoStyle(element: RawGeckoElementBorrowed,
|
|||
-> ServoStyleContextStrong
|
||||
{
|
||||
let element = GeckoElement(element);
|
||||
let data = unsafe { element.ensure_data() };
|
||||
let doc_data = PerDocumentStyleData::from_ffi(raw_data).borrow();
|
||||
|
||||
debug!("Servo_ResolvePseudoStyle: {:?} {:?}, is_probe: {}",
|
||||
element, PseudoElement::from_pseudo_type(pseudo_type), is_probe);
|
||||
|
||||
// FIXME(bholley): Assert against this.
|
||||
if !data.has_styles() {
|
||||
warn!("Calling Servo_ResolvePseudoStyle on unstyled element");
|
||||
return if is_probe {
|
||||
Strong::null()
|
||||
} else {
|
||||
doc_data.default_computed_values().clone().into()
|
||||
};
|
||||
}
|
||||
let data = element.borrow_data();
|
||||
|
||||
let data = match data.as_ref() {
|
||||
Some(data) if data.has_styles() => data,
|
||||
_ => {
|
||||
// FIXME(bholley, emilio): Assert against this.
|
||||
//
|
||||
// Known offender is nsMathMLmoFrame::MarkIntrinsicISizesDirty,
|
||||
// which goes and does a bunch of work involving style resolution.
|
||||
//
|
||||
// Bug 1403865 tracks fixing it, and potentially adding an assert
|
||||
// here instead.
|
||||
warn!("Calling Servo_ResolvePseudoStyle on unstyled element");
|
||||
return if is_probe {
|
||||
Strong::null()
|
||||
} else {
|
||||
doc_data.default_computed_values().clone().into()
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
let pseudo = PseudoElement::from_pseudo_type(pseudo_type)
|
||||
.expect("ResolvePseudoStyle with a non-pseudo?");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue