style: Look at the snapshots when invalidating due to stylesheet changes.

Otherwise removal of stylesheets may get out of sync with other DOM changes, and
we may fail to invalidate the style of the affected elements.

Bug: 1432850
Reviewed-by: bz
MozReview-Commit-ID: DrMTgLzQcnk
This commit is contained in:
Emilio Cobos Álvarez 2018-01-25 02:53:49 +01:00
parent c2dfece49f
commit 657d8b8e31
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C
8 changed files with 95 additions and 37 deletions

View file

@ -15,6 +15,7 @@ use invalidation::media_queries::{MediaListKey, ToMediaListKey};
use malloc_size_of::MallocSizeOfOps;
use media_queries::{Device, MediaList};
use properties::ComputedValues;
use selector_parser::SnapshotMap;
use servo_arc::Arc;
use shared_lock::{Locked, StylesheetGuards, SharedRwLockReadGuard};
use std::sync::atomic::{AtomicUsize, Ordering};
@ -202,6 +203,7 @@ impl PerDocumentStyleDataImpl {
&mut self,
guard: &SharedRwLockReadGuard,
document_element: Option<E>,
snapshots: Option<&SnapshotMap>,
) -> bool
where
E: TElement,
@ -209,6 +211,7 @@ impl PerDocumentStyleDataImpl {
self.stylist.flush(
&StylesheetGuards::same(guard),
document_element,
snapshots,
)
}

View file

@ -193,7 +193,8 @@ impl ElementSnapshot for GeckoElementSnapshot {
#[inline]
fn each_class<F>(&self, callback: F)
where F: FnMut(&Atom)
where
F: FnMut(&Atom)
{
if !self.has_any(Flags::MaybeClass) {
return;