Bug 1485655 - Remove an assertion that doesn't hold in some cases. r=me, a=RyanVM
--- a/servo/components/style/invalidation/element/state_and_attributes.rs
+++ b/servo/components/style/invalidation/element/state_and_attributes.rs
@@ -167,23 +167,28 @@ where
if !snapshot.has_attrs() && state_changes.is_empty() {
return false;
}
// If we are sensitive to visitedness and the visited state changed, we
// force a restyle here. Matching doesn't depend on the actual visited
// state at all, so we can't look at matching results to decide what to
// do for this case.
- if state_changes.intersects(ElementState::IN_VISITED_OR_UNVISITED_STATE) {
+ if state_changes.intersects(ElementState::IN_VISITED_OR_UNVISITED_STATE) &&
+ self.shared_context.visited_styles_enabled
+ {
trace!(" > visitedness change, force subtree restyle");
- // If we get here with visited links disabled, we should probably
- // just avoid the restyle and remove the state change here, not only
- // as an optimization, but also because it kind of would kill the
+ // We shouldn't get here with visited links disabled, but it's hard
+ // to assert in cases where you record a visitedness change and
+ // afterwards you change some of the stuff (like the pref) that
+ // changes whether visited styles are enabled.
+ //
+ // So just avoid the restyle here, because it kind of would kill the
// point of disabling visited links.
- debug_assert!(self.shared_context.visited_styles_enabled);
+ //
// We can't just return here because there may also be attribute
// changes as well that imply additional hints for siblings.
self.data.hint.insert(RestyleHint::restyle_subtree());
}
let mut classes_removed = SmallVec::<[Atom; 8]>::new();
let mut classes_added = SmallVec::<[Atom; 8]>::new();
if snapshot.class_changed() {