diff --git a/Userland/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp b/Userland/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp index 05d616039b..11f71d548c 100644 --- a/Userland/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp +++ b/Userland/Libraries/LibWeb/XML/XMLDocumentBuilder.cpp @@ -46,6 +46,11 @@ XMLDocumentBuilder::XMLDocumentBuilder(DOM::Document& document, XMLScriptingSupp { } +void XMLDocumentBuilder::set_source(String source) +{ + m_document.set_source(move(source)); +} + void XMLDocumentBuilder::element_start(const XML::Name& name, HashMap const& attributes) { if (m_has_error) diff --git a/Userland/Libraries/LibWeb/XML/XMLDocumentBuilder.h b/Userland/Libraries/LibWeb/XML/XMLDocumentBuilder.h index 3b9811d083..5667039668 100644 --- a/Userland/Libraries/LibWeb/XML/XMLDocumentBuilder.h +++ b/Userland/Libraries/LibWeb/XML/XMLDocumentBuilder.h @@ -29,6 +29,7 @@ public: bool has_error() const { return m_has_error; } private: + virtual void set_source(String) override; virtual void element_start(XML::Name const& name, HashMap const& attributes) override; virtual void element_end(XML::Name const& name) override; virtual void text(String const& data) override; diff --git a/Userland/Libraries/LibXML/Parser/Parser.cpp b/Userland/Libraries/LibXML/Parser/Parser.cpp index 7212560218..256f8641c0 100644 --- a/Userland/Libraries/LibXML/Parser/Parser.cpp +++ b/Userland/Libraries/LibXML/Parser/Parser.cpp @@ -174,6 +174,7 @@ ErrorOr Parser::parse_with_listener(Listener& listener) { m_listener = &listener; ScopeGuard unset_listener { [this] { m_listener = nullptr; } }; + m_listener->set_source(m_source); m_listener->document_start(); auto result = parse_internal(); if (result.is_error()) diff --git a/Userland/Libraries/LibXML/Parser/Parser.h b/Userland/Libraries/LibXML/Parser/Parser.h index 0d45e9420b..63e8e061f3 100644 --- a/Userland/Libraries/LibXML/Parser/Parser.h +++ b/Userland/Libraries/LibXML/Parser/Parser.h @@ -29,6 +29,7 @@ struct ParseError { struct Listener { virtual ~Listener() { } + virtual void set_source(String) { } virtual void document_start() { } virtual void document_end() { } virtual void element_start(Name const&, HashMap const&) { }