diff options
author | Luke <luke.wilde@live.co.uk> | 2021-05-04 21:40:31 +0100 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2021-05-04 22:59:15 +0100 |
commit | 7c6c7ca54274653cfda4639afae7390dc90a0b23 (patch) | |
tree | 3f930ee959f3200559931b94d82dc7e456639b35 /Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp | |
parent | 5952bc1ea42fceab185f775c7cb06d0c74c1e428 (diff) | |
download | serenity-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.cpp | 45 |
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; +} + } |