Created attachment 418151 [details] Screen recording Steps to reproduce: 1. Open https://www.liberation.fr/ 2. Wait for the page to finish loading and for only 5 items to show under "Top 100" near the center of the page 3. Hover slowly over those 5 items Notice how, as in the attached screen recording, the items don't revert back to their pre-animated state after hovering out. I only managed to reduce the failed to this range: http://trac.webkit.org/log/trunk/?mode=follow_copy&rev=271601&stop_rev=271568 Out of this range, r271584, the fix for bug 220711, seems the most likely since it's related to :hover.
<rdar://problem/73501684>
Ah yes, there is a logic error in the optimization where we fail to invalidate descendants losing hover/active in some complex cases.
Created attachment 418384 [details] patch
Created attachment 418392 [details] patch
Created attachment 418409 [details] patch
Comment on attachment 418409 [details] patch View in context: https://bugs.webkit.org/attachment.cgi?id=418409&action=review > Source/WebCore/dom/Document.cpp:7234 > + Style::PseudoClassChangeInvalidation styleInvalidation(*elementsToClearActive.last(), CSSSelector::PseudoClassActive, Style::InvalidationScope::Descendants); > + for (auto& element : elementsToClearActive) > + element->setActive(false, false, Style::InvalidationScope::SelfChildrenAndSiblings); Maybe share these almost-duplicate chunks with some lambdas?
> Maybe share these almost-duplicate chunks with some lambdas? It seemed to end up looking messy since there is a bunch of varying parameters. But I'll take another look.
Committed r271930: <https://trac.webkit.org/changeset/271930> All reviewed patches have been landed. Closing bug and clearing flags on attachment 418409 [details].
Landed early because it fixed other bugs that were blocking internal Apple work.