Browse Source

LibWeb: Support DOMImplementation.createDocument() doctype parameter

1% progression on ACID3. :^)
Andreas Kling 3 years ago
parent
commit
05e9dceba6

+ 3 - 2
Userland/Libraries/LibWeb/DOM/DOMImplementation.cpp

@@ -20,7 +20,7 @@ DOMImplementation::DOMImplementation(Document& document)
 }
 }
 
 
 // https://dom.spec.whatwg.org/#dom-domimplementation-createdocument
 // https://dom.spec.whatwg.org/#dom-domimplementation-createdocument
-ExceptionOr<NonnullRefPtr<Document>> DOMImplementation::create_document(const String& namespace_, const String& qualified_name) const
+ExceptionOr<NonnullRefPtr<Document>> DOMImplementation::create_document(const String& namespace_, const String& qualified_name, RefPtr<DocumentType> doctype) const
 {
 {
     // FIXME: This should specifically be an XML document.
     // FIXME: This should specifically be an XML document.
     auto xml_document = Document::create();
     auto xml_document = Document::create();
@@ -36,7 +36,8 @@ ExceptionOr<NonnullRefPtr<Document>> DOMImplementation::create_document(const St
         element = new_element.release_value();
         element = new_element.release_value();
     }
     }
 
 
-    // FIXME: If doctype is non-null, append doctype to document.
+    if (doctype)
+        xml_document->append_child(doctype.release_nonnull());
 
 
     if (element)
     if (element)
         xml_document->append_child(element.release_nonnull());
         xml_document->append_child(element.release_nonnull());

+ 1 - 2
Userland/Libraries/LibWeb/DOM/DOMImplementation.h

@@ -27,8 +27,7 @@ public:
         return adopt_own(*new DOMImplementation(document));
         return adopt_own(*new DOMImplementation(document));
     }
     }
 
 
-    // FIXME: Add optional DocumentType once supported by IDL
-    ExceptionOr<NonnullRefPtr<Document>> create_document(const String&, const String&) const;
+    ExceptionOr<NonnullRefPtr<Document>> create_document(String const&, String const&, RefPtr<DocumentType>) const;
     NonnullRefPtr<Document> create_html_document(const String& title) const;
     NonnullRefPtr<Document> create_html_document(const String& title) const;
     ExceptionOr<NonnullRefPtr<DocumentType>> create_document_type(String const& qualified_name, String const& public_id, String const& system_id);
     ExceptionOr<NonnullRefPtr<DocumentType>> create_document_type(String const& qualified_name, String const& public_id, String const& system_id);
 
 

+ 1 - 2
Userland/Libraries/LibWeb/DOM/DOMImplementation.idl

@@ -2,9 +2,8 @@
 
 
 interface DOMImplementation {
 interface DOMImplementation {
 
 
-    // FIXME: This is missing "optional DocumentType? doctype = null" at the end.
     // FIXME: This should return XMLDocument instead of Document.
     // FIXME: This should return XMLDocument instead of Document.
-    [NewObject] Document createDocument(DOMString? namespace, [LegacyNullToEmptyString] DOMString qualifiedName);
+    [NewObject] Document createDocument(DOMString? namespace, [LegacyNullToEmptyString] DOMString qualifiedName, optional DocumentType? doctype = null);
     [NewObject] Document createHTMLDocument(optional DOMString title);
     [NewObject] Document createHTMLDocument(optional DOMString title);
     [NewObject] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId);
     [NewObject] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId);