mirror of
https://github.com/servo/servo.git
synced 2025-07-04 05:53:39 +01:00
style: relax assertions in dom::element when setting selector flags.
Fixes #16409
This commit is contained in:
parent
b514168469
commit
39ab49823b
2 changed files with 10 additions and 1 deletions
|
@ -780,7 +780,7 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
||||||
#[inline]
|
#[inline]
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
fn insert_selector_flags(&self, flags: ElementSelectorFlags) {
|
fn insert_selector_flags(&self, flags: ElementSelectorFlags) {
|
||||||
debug_assert!(thread_state::get() == thread_state::LAYOUT);
|
debug_assert!(thread_state::get().is_layout());
|
||||||
unsafe {
|
unsafe {
|
||||||
let f = &(*self.unsafe_get()).selector_flags;
|
let f = &(*self.unsafe_get()).selector_flags;
|
||||||
f.set(f.get() | flags);
|
f.set(f.get() | flags);
|
||||||
|
|
|
@ -930,8 +930,17 @@ pub trait MatchMethods : TElement {
|
||||||
let self_flags = flags.for_self();
|
let self_flags = flags.for_self();
|
||||||
if !self_flags.is_empty() {
|
if !self_flags.is_empty() {
|
||||||
if element == self {
|
if element == self {
|
||||||
|
// If this is the element we're styling, we have exclusive
|
||||||
|
// access to the element, and thus it's fine inserting them,
|
||||||
|
// even from the worker.
|
||||||
unsafe { element.set_selector_flags(self_flags); }
|
unsafe { element.set_selector_flags(self_flags); }
|
||||||
} else {
|
} else {
|
||||||
|
// Otherwise, this element is an ancestor of the current element
|
||||||
|
// we're styling, and thus multiple children could write to it
|
||||||
|
// if we did from here.
|
||||||
|
//
|
||||||
|
// Instead, we can read them, and post them if necessary as a
|
||||||
|
// sequential task in order for them to be processed later.
|
||||||
if !element.has_selector_flags(self_flags) {
|
if !element.has_selector_flags(self_flags) {
|
||||||
let task =
|
let task =
|
||||||
SequentialTask::set_selector_flags(element.clone(),
|
SequentialTask::set_selector_flags(element.clone(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue