diff --git a/Tests/LibWeb/Text/expected/DOM/DOMImplementation-createHTMLDocument.txt b/Tests/LibWeb/Text/expected/DOM/DOMImplementation-createHTMLDocument.txt
new file mode 100644
index 0000000000..6700e3c9a7
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/DOM/DOMImplementation-createHTMLDocument.txt
@@ -0,0 +1,4 @@
+ [object HTMLDocument]
+true
+[object HTMLDocument]
+true
diff --git a/Tests/LibWeb/Text/input/DOM/DOMImplementation-createHTMLDocument.html b/Tests/LibWeb/Text/input/DOM/DOMImplementation-createHTMLDocument.html
new file mode 100644
index 0000000000..b5b70000e9
--- /dev/null
+++ b/Tests/LibWeb/Text/input/DOM/DOMImplementation-createHTMLDocument.html
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp b/Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp
index 5caa2abdf9..7cbeca4747 100644
--- a/Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp
+++ b/Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp
@@ -12,6 +12,7 @@
#include
#include
#include
+#include
#include
#include
@@ -91,10 +92,11 @@ WebIDL::ExceptionOr> DOMImplementation::create_docume
JS::NonnullGCPtr DOMImplementation::create_html_document(Optional const& title) const
{
// 1. Let doc be a new document that is an HTML document.
- auto html_document = Document::create(realm());
+ auto html_document = HTML::HTMLDocument::create(realm());
// 2. Set doc’s content type to "text/html".
html_document->set_content_type("text/html"_string);
+ html_document->set_document_type(DOM::Document::Type::HTML);
html_document->set_ready_for_post_load_tasks(true);
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLDocument.cpp b/Userland/Libraries/LibWeb/HTML/HTMLDocument.cpp
index df8b25dbd1..b890e57bbb 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLDocument.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLDocument.cpp
@@ -27,4 +27,10 @@ JS::NonnullGCPtr HTMLDocument::create(JS::Realm& realm, URL const&
return realm.heap().allocate(realm, realm, url);
}
+void HTMLDocument::initialize(JS::Realm& realm)
+{
+ Base::initialize(realm);
+ set_prototype(&Bindings::ensure_web_prototype(realm, "HTMLDocument"_fly_string));
+}
+
}
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLDocument.h b/Userland/Libraries/LibWeb/HTML/HTMLDocument.h
index 29c2bc953c..9d481e80c7 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLDocument.h
+++ b/Userland/Libraries/LibWeb/HTML/HTMLDocument.h
@@ -15,7 +15,7 @@ namespace Web::HTML {
// https://github.com/whatwg/html/issues/4792
// https://github.com/whatwg/dom/issues/221
class HTMLDocument final : public DOM::Document {
- JS_CELL(HTMLDocument, DOM::Document);
+ WEB_PLATFORM_OBJECT(HTMLDocument, DOM::Document);
JS_DECLARE_ALLOCATOR(HTMLDocument);
public:
@@ -25,6 +25,8 @@ public:
WebIDL::ExceptionOr> construct_impl(JS::Realm&);
private:
+ virtual void initialize(JS::Realm&) override;
+
HTMLDocument(JS::Realm&, URL const&);
};