From ae4aa2eeb07f42d55728af9417f0118227066af4 Mon Sep 17 00:00:00 2001 From: Jelle Raaijmakers Date: Fri, 18 Jul 2025 10:03:08 +0200 Subject: [PATCH] LibWeb: Clean up dumping the DOM tree Use namespace constants and `as_if()` where possible. No functional changes. --- Libraries/LibWeb/Dump.cpp | 60 +++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 34 deletions(-) diff --git a/Libraries/LibWeb/Dump.cpp b/Libraries/LibWeb/Dump.cpp index 643fb7d5e21..fb698dd65dc 100644 --- a/Libraries/LibWeb/Dump.cpp +++ b/Libraries/LibWeb/Dump.cpp @@ -48,10 +48,10 @@ #include #include #include +#include #include #include #include -#include namespace Web { @@ -94,65 +94,57 @@ void dump_tree(StringBuilder& builder, DOM::Node const& node) static int indent = 0; for (int i = 0; i < indent; ++i) builder.append(" "sv); - if (is(node)) { + if (auto const* element = as_if(node)) { auto short_namespace = [&] -> FlyString { - auto const& namespace_uri = as(node).namespace_uri(); + auto const& namespace_uri = element->namespace_uri(); if (!namespace_uri.has_value()) return "n/a"_fly_string; - if (namespace_uri == "http://www.w3.org/1999/xhtml"sv) + if (namespace_uri == Namespace::HTML) return "html"_fly_string; - if (namespace_uri == "http://www.w3.org/2000/svg"sv) + if (namespace_uri == Namespace::SVG) return "svg"_fly_string; - if (namespace_uri == "http://www.w3.org/1998/Math/MathML"sv) + if (namespace_uri == Namespace::MathML) return "mathml"_fly_string; return *namespace_uri; }(); - builder.appendff("<{}:{}", short_namespace, as(node).local_name()); - as(node).for_each_attribute([&](auto& name, auto& value) { + builder.appendff("<{}:{}", short_namespace, element->local_name()); + element->for_each_attribute([&](auto& name, auto& value) { builder.appendff(" {}={}", name, value); }); builder.append(">\n"sv); - auto& element = as(node); - if (element.use_pseudo_element().has_value()) { + if (element->use_pseudo_element().has_value()) { for (int i = 0; i < indent; ++i) builder.append(" "sv); - builder.appendff(" (pseudo-element: {})\n", CSS::pseudo_element_name(element.use_pseudo_element().value())); + builder.appendff(" (pseudo-element: {})\n", CSS::pseudo_element_name(element->use_pseudo_element().value())); } - } else if (is(node)) { - builder.appendff("\"{}\"\n", as(node).data()); + } else if (auto const* text = as_if(node)) { + builder.appendff("\"{}\"\n", text->data()); } else { builder.appendff("{}\n", node.node_name()); } ++indent; - if (is(node)) { - if (auto shadow_root = static_cast(node).shadow_root()) { - dump_tree(builder, *shadow_root); + if (auto const* element = as_if(node); element && element->shadow_root()) + dump_tree(builder, *element->shadow_root()); + if (auto const* image = as_if(node)) { + if (auto const* svg_data = as_if(image->current_request().image_data().ptr())) { + ++indent; + for (int i = 0; i < indent; ++i) + builder.append(" "sv); + builder.append("(SVG-as-image isolated context)\n"sv); + dump_tree(builder, svg_data->svg_document()); + --indent; } } - if (is(node)) { - if (auto image_data = static_cast(node).current_request().image_data()) { - if (is(*image_data)) { - ++indent; - for (int i = 0; i < indent; ++i) - builder.append(" "sv); - builder.append("(SVG-as-image isolated context)\n"sv); - auto& svg_data = as(*image_data); - dump_tree(builder, svg_data.svg_document()); - --indent; - } - } - } - if (is(node)) { - auto& template_element = as(node); + if (auto const* template_element = as_if(node)) { for (int i = 0; i < indent; ++i) builder.append(" "sv); builder.append("(template content)\n"sv); - dump_tree(builder, template_element.content()); + dump_tree(builder, template_element->content()); builder.append("(template normal subtree)\n"sv); } - if (is(node)) { - static_cast(node).for_each_child([&](auto& child) { + if (auto const* parent_node = as_if(node)) { + parent_node->for_each_child([&](auto const& child) { dump_tree(builder, child); return IterationDecision::Continue; });