소스 검색

LibWeb: Recurse into shadow trees when updating style

The style update mechanism was happily ignoring shadow subtrees.
Fix this by checking if an element has a shadow root, and recursing into
it if needed.
Andreas Kling 3 년 전
부모
커밋
32dd4bf1b9
1개의 변경된 파일6개의 추가작업 그리고 0개의 파일을 삭제
  1. 6 0
      Userland/Libraries/LibWeb/DOM/Document.cpp

+ 6 - 0
Userland/Libraries/LibWeb/DOM/Document.cpp

@@ -602,6 +602,12 @@ static void update_style_recursively(DOM::Node& node)
     node.set_needs_style_update(false);
     node.set_needs_style_update(false);
 
 
     if (node.child_needs_style_update()) {
     if (node.child_needs_style_update()) {
+        if (node.is_element()) {
+            if (auto* shadow_root = static_cast<DOM::Element&>(node).shadow_root()) {
+                if (shadow_root->needs_style_update() || shadow_root->child_needs_style_update())
+                    update_style_recursively(*shadow_root);
+            }
+        }
         node.for_each_child([&](auto& child) {
         node.for_each_child([&](auto& child) {
             if (child.needs_style_update() || child.child_needs_style_update())
             if (child.needs_style_update() || child.child_needs_style_update())
                 update_style_recursively(child);
                 update_style_recursively(child);