Andreas Kling
9fae2bcff9
LibWeb: Avoid unrelated structural :has invalidation
...
Track the simple selector features that appear inside :has() arguments
on each StyleScope, then consult that metadata before scheduling an
ancestor walk for a structural mutation. If the mutated subtree has no
tag, id, class, attribute, or pseudo-class feature that any cached
:has() argument cares about, skip the walk entirely.
Stay conservative for featureless-sensitive arguments such as :has(*),
:has(:not(...)), :has(:empty), and child-index pseudos: an unfeatured
node can still start or stop matching there. Track that case via a new
has_selectors_sensitive_to_featureless_subtree_changes flag on
StyleInvalidationData and fall back to the old conservative walk.
Stay conservative for pseudo-classes the subtree filter cannot probe
(:focus, :hover, validation pseudos). Move :default out of the set of
trackable feature pseudo-classes for the same reason; it now triggers
the conservative walk where it previously recorded metadata.
Tag and attribute names are stored lowercased, so for non-HTML elements
(SVG, MathML) treat lowercased matches as scheduling hints only; the
actual :has() match still goes through case-sensitive selector matching.
Test counter expectations are rebaselined to reflect the skipped walks
and reduced recomputations. Matching behavior is unchanged.
2026-04-28 15:34:49 +02:00
..
2026-04-21 07:36:13 +02:00
2026-04-24 20:08:29 +02:00
2026-04-21 07:36:13 +02:00
2026-04-24 20:08:29 +02:00
2026-04-26 10:40:58 +02:00
2026-04-08 10:37:05 +01:00
2026-04-21 07:36:13 +02:00
2026-04-24 20:08:29 +02:00
2025-10-20 10:51:19 +01:00
2026-02-11 20:02:28 +01:00
2026-03-21 10:29:54 +01:00
2025-08-23 16:04:36 -06:00
2026-04-01 19:41:46 +01:00
2026-04-01 19:41:46 +01:00
2026-04-21 07:36:13 +02:00
2025-11-10 22:55:38 +01:00
2026-04-24 20:08:29 +02:00
2026-04-21 07:36:13 +02:00
2025-07-24 19:00:20 +02:00
2026-04-24 20:08:29 +02:00
2026-04-26 10:40:58 +02:00
2026-02-14 16:23:18 -05:00
2026-04-24 20:08:29 +02:00
2025-07-24 19:00:20 +02:00
2025-07-24 19:00:20 +02:00
2026-04-21 07:36:13 +02:00
2025-07-24 19:00:20 +02:00
2026-04-24 20:08:29 +02:00
2026-04-21 07:36:13 +02:00
2025-08-23 16:04:36 -06:00
2026-04-24 20:08:29 +02:00
2026-04-28 13:07:52 +02:00
2026-04-27 03:04:07 +02:00
2026-04-24 20:08:29 +02:00
2026-04-21 07:36:13 +02:00
2025-08-23 16:04:36 -06:00
2026-04-24 20:08:29 +02:00
2025-12-24 10:19:28 +01:00
2025-12-24 10:19:28 +01:00
2026-04-22 13:27:45 +01:00
2026-04-01 06:47:59 +02:00
2025-06-24 09:56:14 +02:00
2026-02-14 20:22:40 +01:00
2026-02-11 20:02:28 +01:00
2026-04-24 20:08:29 +02:00
2026-04-21 07:36:13 +02:00
2025-06-19 07:55:47 -04:00
2026-04-24 20:08:29 +02:00
2026-04-21 07:36:13 +02:00
2026-02-08 18:51:13 +01:00
2026-04-24 20:08:29 +02:00
2026-04-21 07:36:13 +02:00
2025-12-11 22:54:39 +00:00
2026-02-17 10:24:00 +01:00
2026-01-29 15:08:06 +01:00
2026-04-26 16:14:43 +02:00
2026-04-26 16:14:43 +02:00
2026-04-24 20:08:29 +02:00
2026-02-21 13:56:00 +01:00
2026-02-21 13:56:00 +01:00
2026-03-27 19:49:55 +00:00
2026-03-27 19:49:55 +00:00
2026-04-21 07:36:13 +02:00
2025-10-15 15:36:34 +02:00
2026-04-24 20:08:29 +02:00
2026-03-10 16:57:36 +01:00
2026-04-24 20:08:29 +02:00
2026-04-24 20:08:29 +02:00
2026-04-21 07:36:13 +02:00
2026-02-06 13:50:54 +01:00
2026-04-24 20:08:29 +02:00
2026-02-11 20:02:28 +01:00
2026-04-21 07:36:13 +02:00
2025-12-17 11:41:21 +01:00
2026-04-24 20:08:29 +02:00
2026-01-29 15:08:06 +01:00
2026-02-14 20:22:40 +01:00
2026-04-21 07:36:13 +02:00
2026-03-11 17:56:12 +01:00
2026-04-24 20:08:29 +02:00
2026-04-21 07:36:13 +02:00
2026-04-24 20:08:29 +02:00
2025-08-23 16:04:36 -06:00
2026-04-21 07:36:13 +02:00
2025-08-23 16:04:36 -06:00
2026-04-24 20:08:29 +02:00
2026-04-28 15:34:49 +02:00
2026-04-26 10:40:58 +02:00
2026-04-24 20:08:29 +02:00
2026-04-21 07:36:13 +02:00
2026-03-11 21:16:44 +01:00
2026-04-24 20:08:29 +02:00
2026-04-21 07:36:13 +02:00
2026-03-11 21:16:44 +01:00
2026-04-24 20:08:29 +02:00
2026-04-21 07:36:13 +02:00
2025-08-23 16:04:36 -06:00
2026-04-24 20:08:29 +02:00
2025-12-11 22:54:39 +00:00
2025-07-24 19:00:20 +02:00
2026-04-19 21:32:55 +02:00
2026-04-26 16:14:43 +02:00
2026-04-24 20:08:29 +02:00
2025-08-20 12:25:00 +01:00
2026-02-11 20:02:28 +01:00
2026-04-21 07:36:13 +02:00
2025-07-24 19:00:20 +02:00
2026-04-24 20:08:29 +02:00
2025-06-19 12:35:31 +01:00
2026-02-26 21:09:08 +01:00
2025-07-09 14:36:08 +02:00
2025-08-23 16:04:36 -06:00
2026-04-21 07:36:13 +02:00
2026-01-30 20:57:42 +01:00
2026-04-24 20:08:29 +02:00
2026-03-17 18:58:37 -05:00
2026-02-11 20:02:28 +01:00
2026-04-21 07:36:13 +02:00
2026-04-27 16:22:11 +02:00
2026-04-24 20:08:29 +02:00
2026-01-31 11:44:20 +01:00
2026-01-31 11:44:20 +01:00
2026-01-31 11:44:20 +01:00
2026-04-26 10:40:58 +02:00
2026-02-07 16:43:50 +01:00
2026-02-11 20:02:28 +01:00
2026-02-14 20:22:40 +01:00
2026-04-21 07:36:13 +02:00
2026-04-24 20:08:29 +02:00
2026-03-28 23:14:55 +01:00
2026-02-12 16:23:12 +01:00
2026-04-15 11:07:38 +01:00
2026-04-28 09:49:50 +02:00
2026-04-20 13:20:41 +02:00
2026-04-21 07:36:13 +02:00
2026-02-07 16:43:50 +01:00
2026-04-24 20:08:29 +02:00
2026-04-21 07:36:13 +02:00
2026-03-11 21:16:44 +01:00
2026-04-24 20:08:29 +02:00
2026-03-10 15:17:51 +01:00
2026-02-11 20:02:28 +01:00
2026-04-21 07:36:13 +02:00
2026-04-24 20:08:29 +02:00