style: Don't share styles when an element has animations applied to it.

We already avoid putting styles in the shared style cache for an element that
has animations[1] but if we are doing the initial style of two siblings where
the _second_ has animations applied, there is nothing to stop us from trying to
share with the first (un-animated) element. This patch adds a check to prevent
sharing in that case since sharing style between animated elements is unsound
for the reasons described in [1].

A number of tests including:

  testing/web-platform/tests/web-animations/animation-model/animation-types/visibility.html

will fail without this fix once we remove the style flush from
KeyframeEffect::SetKeyframes later in this patch series.

[1] https://searchfox.org/mozilla-central/rev/6e3cc153566f5f288ae768a2172385b8436d61dd/servo/components/style/sharing/mod.rs#597

Differential Revision: https://phabricator.services.mozilla.com/D18913
This commit is contained in:
Brian Birtles 2019-02-15 06:35:04 +00:00 committed by Emilio Cobos Álvarez
parent 07cb325402
commit 71d9fe5d60

View file

@ -766,6 +766,11 @@ impl<E: TElement> StyleSharingCache<E> {
return None;
}
if target.element.has_animations() {
trace!("Miss: Has Animations");
return None;
}
if target.matches_user_and_author_rules() !=
candidate.element.matches_user_and_author_rules()
{