style: Update animations when a pseudo-element had animations but no longer has, and has been re-framed in the meantime.

This is the easy fix.

The hard fix (outlined in the comment) would be nice, but I don't think this bug
alone justifies it.

Differential Revision: https://phabricator.services.mozilla.com/D38184
This commit is contained in:
Emilio Cobos Álvarez 2019-07-16 15:42:08 +00:00
parent 59cf10d1b0
commit 137044a3db
No known key found for this signature in database
GPG key ID: E1152D0994E4BF8A
2 changed files with 26 additions and 6 deletions

View file

@ -240,16 +240,31 @@ trait PrivateMatchMethods: TElement {
let new_box_style = new_style.get_box();
let new_style_specifies_animations = new_box_style.specifies_animations();
let old_style = match old_style {
Some(old) => old,
None => return new_style_specifies_animations,
};
let has_animations = self.has_css_animations();
if !new_style_specifies_animations && !has_animations {
return false;
}
let old_style = match old_style {
Some(old) => old,
// If we have no old style but have animations, we may be a
// pseudo-element which was re-created without style changes.
//
// This can happen when we reframe the pseudo-element without
// restyling it (due to content insertion on a flex container or
// such, for example). See bug 1564366.
//
// FIXME(emilio): The really right fix for this is keeping the
// pseudo-element itself around on reframes, but that's a bit
// harder. If we do that we can probably remove quite a lot of the
// EffectSet complexity though, since right now it's stored on the
// parent element for pseudo-elements given we need to keep it
// around...
None => {
return new_style_specifies_animations || new_style.is_pseudo_style();
}
};
let old_box_style = old_style.get_box();
let keyframes_could_have_changed = context