diff --git a/Tests/LibWeb/Text/expected/HTML/get-innerHTML-xml.txt b/Tests/LibWeb/Text/expected/HTML/get-innerHTML-xml.txt new file mode 100644 index 00000000000..7ef22e9a431 --- /dev/null +++ b/Tests/LibWeb/Text/expected/HTML/get-innerHTML-xml.txt @@ -0,0 +1 @@ +PASS diff --git a/Tests/LibWeb/Text/input/HTML/get-innerHTML-xml.html b/Tests/LibWeb/Text/input/HTML/get-innerHTML-xml.html new file mode 100644 index 00000000000..0a81407376c --- /dev/null +++ b/Tests/LibWeb/Text/input/HTML/get-innerHTML-xml.html @@ -0,0 +1,10 @@ + + + diff --git a/Userland/Libraries/LibWeb/DOM/Node.cpp b/Userland/Libraries/LibWeb/DOM/Node.cpp index ab966e0a792..25e329e80e2 100644 --- a/Userland/Libraries/LibWeb/DOM/Node.cpp +++ b/Userland/Libraries/LibWeb/DOM/Node.cpp @@ -1490,6 +1490,17 @@ WebIDL::ExceptionOr Node::serialize_fragment(DOMParsing::RequireWellForm return HTML::HTMLParser::serialize_html_fragment(*this, HTML::HTMLParser::SerializableShadowRoots::No, {}, fragment_serialization_mode); // 3. Return the XML serialization of node given require well-formed. + // AD-HOC: XML serialization algorithm returns the "outer" XML serialization of the node. + // For inner, concatenate the serialization of all children. + if (fragment_serialization_mode == FragmentSerializationMode::Inner) { + StringBuilder markup; + for_each_child([&markup, require_well_formed](auto& child) { + auto child_markup = DOMParsing::serialize_node_to_xml_string(child, require_well_formed).release_value_but_fixme_should_propagate_errors(); + markup.append(child_markup.bytes_as_string_view()); + return IterationDecision::Continue; + }); + return MUST(markup.to_string()); + } return DOMParsing::serialize_node_to_xml_string(*this, require_well_formed); }