diff --git a/Libraries/LibWeb/Layout/Node.h b/Libraries/LibWeb/Layout/Node.h index 4725ecbdf8..512d4b3bd5 100644 --- a/Libraries/LibWeb/Layout/Node.h +++ b/Libraries/LibWeb/Layout/Node.h @@ -103,6 +103,8 @@ public: virtual bool is_list_item() const { return false; } bool has_style() const { return m_has_style; } + virtual bool can_have_children() const { return true; } + bool is_inline() const { return m_inline; } void set_inline(bool b) { m_inline = b; } diff --git a/Libraries/LibWeb/Layout/ReplacedBox.h b/Libraries/LibWeb/Layout/ReplacedBox.h index aff5ccd5ca..1a9ded51af 100644 --- a/Libraries/LibWeb/Layout/ReplacedBox.h +++ b/Libraries/LibWeb/Layout/ReplacedBox.h @@ -62,6 +62,8 @@ public: virtual void prepare_for_replaced_layout() { } + virtual bool can_have_children() const override { return false; } + protected: virtual void split_into_lines(Layout::BlockBox& container, LayoutMode) override; diff --git a/Libraries/LibWeb/Layout/SVGSVGBox.h b/Libraries/LibWeb/Layout/SVGSVGBox.h index a03d28d289..70b2efd4ab 100644 --- a/Libraries/LibWeb/Layout/SVGSVGBox.h +++ b/Libraries/LibWeb/Layout/SVGSVGBox.h @@ -43,6 +43,8 @@ public: virtual void before_children_paint(PaintContext& context, PaintPhase phase) override; virtual void after_children_paint(PaintContext& context, PaintPhase phase) override; + virtual bool can_have_children() const override { return true; } + private: const char* class_name() const override { return "SVGSVGBox"; } }; diff --git a/Libraries/LibWeb/Layout/TreeBuilder.cpp b/Libraries/LibWeb/Layout/TreeBuilder.cpp index 7d7b349433..7a554d7f55 100644 --- a/Libraries/LibWeb/Layout/TreeBuilder.cpp +++ b/Libraries/LibWeb/Layout/TreeBuilder.cpp @@ -129,11 +129,7 @@ void TreeBuilder::create_layout_tree(DOM::Node& dom_node) } } - // Ignore fallback content inside replaced elements. - if (layout_node->is_replaced()) - return; - - if (dom_node.has_children()) { + if (dom_node.has_children() && layout_node->can_have_children()) { push_parent(*layout_node); downcast(dom_node).for_each_child([&](auto& dom_child) { create_layout_tree(dom_child);