summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp
diff options
context:
space:
mode:
authorLuke <luke.wilde@live.co.uk>2021-05-04 21:40:31 +0100
committerLinus Groh <mail@linusgroh.de>2021-05-04 22:59:15 +0100
commit7c6c7ca54274653cfda4639afae7390dc90a0b23 (patch)
tree3f930ee959f3200559931b94d82dc7e456639b35 /Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp
parent5952bc1ea42fceab185f775c7cb06d0c74c1e428 (diff)
downloadserenity-7c6c7ca54274653cfda4639afae7390dc90a0b23.zip
LibWeb: Add createDocument and createDocumentType for DOMImplementation
Both required for the acid3 test. createDocument is used extensively in Web Platform Tests.
Diffstat (limited to 'Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp')
-rw-r--r--Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp45
1 files changed, 44 insertions, 1 deletions
diff --git a/Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp b/Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp
index 04493eda8b..1b46a0d5f6 100644
--- a/Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp
+++ b/Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp
@@ -19,8 +19,40 @@ DOMImplementation::DOMImplementation(Document& document)
{
}
-const NonnullRefPtr<Document> DOMImplementation::create_html_document(const String& title) const
+// https://dom.spec.whatwg.org/#dom-domimplementation-createdocument
+NonnullRefPtr<Document> DOMImplementation::create_document(const String& namespace_, const String& qualified_name) const
{
+ // FIXME: This should specifically be an XML document.
+ auto xml_document = Document::create();
+
+ xml_document->set_ready_for_post_load_tasks(true);
+
+ RefPtr<Element> element;
+
+ if (!qualified_name.is_empty())
+ element = xml_document->create_element_ns(namespace_, qualified_name /* FIXME: and an empty dictionary */);
+
+ // FIXME: If doctype is non-null, append doctype to document.
+
+ if (element)
+ xml_document->append_child(element.release_nonnull());
+
+ xml_document->set_origin(m_document.origin());
+
+ if (namespace_ == Namespace::HTML)
+ m_document.set_content_type("application/xhtml+xml");
+ else if (namespace_ == Namespace::SVG)
+ m_document.set_content_type("image/svg+xml");
+ else
+ m_document.set_content_type("application/xml");
+
+ return xml_document;
+}
+
+// https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument
+NonnullRefPtr<Document> DOMImplementation::create_html_document(const String& title) const
+{
+ // FIXME: This should specifically be a HTML document.
auto html_document = Document::create();
html_document->set_content_type("text/html");
@@ -52,4 +84,15 @@ const NonnullRefPtr<Document> DOMImplementation::create_html_document(const Stri
return html_document;
}
+// https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype
+NonnullRefPtr<DocumentType> DOMImplementation::create_document_type(const String& qualified_name, const String& public_id, const String& system_id) const
+{
+ // FIXME: Validate qualified_name.
+ auto document_type = DocumentType::create(m_document);
+ document_type->set_name(qualified_name);
+ document_type->set_public_id(public_id);
+ document_type->set_system_id(system_id);
+ return document_type;
+}
+
}