diff --git a/Tests/LibWeb/Text/expected/XMLHttpRequest-responseXML-gives-XMLDocument.txt b/Tests/LibWeb/Text/expected/XMLHttpRequest-responseXML-gives-XMLDocument.txt
new file mode 100644
index 0000000000..7ef22e9a43
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/XMLHttpRequest-responseXML-gives-XMLDocument.txt
@@ -0,0 +1 @@
+PASS
diff --git a/Tests/LibWeb/Text/input/XMLHttpRequest-responseXML-gives-XMLDocument.html b/Tests/LibWeb/Text/input/XMLHttpRequest-responseXML-gives-XMLDocument.html
new file mode 100644
index 0000000000..2a7d0e5d70
--- /dev/null
+++ b/Tests/LibWeb/Text/input/XMLHttpRequest-responseXML-gives-XMLDocument.html
@@ -0,0 +1,19 @@
+
+
diff --git a/Userland/Libraries/LibWeb/DOM/XMLDocument.cpp b/Userland/Libraries/LibWeb/DOM/XMLDocument.cpp
index 8655b8ac5f..28c824ba2d 100644
--- a/Userland/Libraries/LibWeb/DOM/XMLDocument.cpp
+++ b/Userland/Libraries/LibWeb/DOM/XMLDocument.cpp
@@ -9,6 +9,11 @@
namespace Web::DOM {
+JS::NonnullGCPtr XMLDocument::create(JS::Realm& realm, AK::URL const& url)
+{
+ return realm.heap().allocate(realm, realm, url);
+}
+
XMLDocument::XMLDocument(JS::Realm& realm, AK::URL const& url)
: Document(realm, url)
{
diff --git a/Userland/Libraries/LibWeb/DOM/XMLDocument.h b/Userland/Libraries/LibWeb/DOM/XMLDocument.h
index 6a1fb3f8cd..60a019e4be 100644
--- a/Userland/Libraries/LibWeb/DOM/XMLDocument.h
+++ b/Userland/Libraries/LibWeb/DOM/XMLDocument.h
@@ -14,6 +14,7 @@ class XMLDocument final : public Document {
WEB_PLATFORM_OBJECT(XMLDocument, Document);
public:
+ static JS::NonnullGCPtr create(JS::Realm&, AK::URL const&);
virtual ~XMLDocument() override = default;
private:
diff --git a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp
index 677a824d6b..840f67f7db 100644
--- a/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp
+++ b/Userland/Libraries/LibWeb/XHR/XMLHttpRequest.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020, Andreas Kling
+ * Copyright (c) 2020-2023, Andreas Kling
* Copyright (c) 2021-2023, Linus Groh
* Copyright (c) 2022-2023, Luke Wilde
* Copyright (c) 2022, Ali Mohammad Pur
@@ -22,6 +22,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -317,7 +318,7 @@ void XMLHttpRequest::set_document_response()
// 6. Otherwise, let document be a document that represents the result of running the XML parser with XML scripting support disabled on xhr’s received bytes. If that fails (unsupported character encoding, namespace well-formedness error, etc.), then return null.
else {
- document = DOM::Document::create(realm());
+ document = DOM::XMLDocument::create(realm(), m_response->url().value_or({}));
if (!Web::build_xml_document(*document, m_received_bytes)) {
m_response_object = Empty {};
return;