LibWeb/DOM: Stop early-out of assigning slottables when root is a slot

This would happen for example when removing a slot element from the DOM,
in which case it would keep its old list of assigned slottables even
though it now has none. Fixes a couple of WPT tests.
This commit is contained in:
Sam Atkins 2025-11-25 14:03:13 +00:00 committed by Jelle Raaijmakers
parent 4f4e94dc9c
commit 91e73ecde1
Notes: github-actions[bot] 2025-11-26 08:54:21 +00:00
3 changed files with 6 additions and 8 deletions

View file

@ -230,10 +230,10 @@ void assign_slottables_for_a_tree(GC::Ref<Node> root)
// AD-HOC: This method iterates over the root's entire subtree. That iteration does nothing if the root is not a
// shadow root (see `find_slottables`). This iteration can be very expensive as the HTML parser inserts
// nodes, especially on sites with many elements. So we skip it if we know it's going to be a no-op anyways.
if (!root->is_shadow_root())
if (!root->is_shadow_root() && !root->is_html_slot_element())
return;
// To assign slottables for a tree, given a node root, run assign slottables for each slot slot in roots inclusive
// To assign slottables for a tree, given a node root, run assign slottables for each slot of roots inclusive
// descendants, in tree order.
root->for_each_in_inclusive_subtree_of_type<HTML::HTMLSlotElement>([](auto& slot) {
assign_slottables(slot);