diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 9aeef1a262..c0647f5ab5 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -155,6 +155,7 @@ set(SOURCES DOM/Text.cpp DOM/Text.idl DOM/TreeWalker.cpp + DOM/XMLDocument.cpp DOMParsing/InnerHTML.cpp DOMParsing/XMLSerializer.cpp Dump.cpp diff --git a/Userland/Libraries/LibWeb/DOM/Document.h b/Userland/Libraries/LibWeb/DOM/Document.h index 84fad47796..44b269648f 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.h +++ b/Userland/Libraries/LibWeb/DOM/Document.h @@ -472,9 +472,9 @@ protected: virtual JS::ThrowCompletionOr initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; -private: Document(JS::Realm&, AK::URL const&); +private: // ^HTML::GlobalEventHandlers virtual EventTarget& global_event_handlers_to_event_target(FlyString const&) final { return *this; } diff --git a/Userland/Libraries/LibWeb/DOM/XMLDocument.cpp b/Userland/Libraries/LibWeb/DOM/XMLDocument.cpp new file mode 100644 index 0000000000..ba0a0d1676 --- /dev/null +++ b/Userland/Libraries/LibWeb/DOM/XMLDocument.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023, Luke Wilde + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +namespace Web::DOM { + +XMLDocument::XMLDocument(JS::Realm& realm, AK::URL const& url) + : Document(realm, url) +{ +} + +JS::ThrowCompletionOr XMLDocument::initialize(JS::Realm& realm) +{ + MUST_OR_THROW_OOM(Base::initialize(realm)); + set_prototype(&Bindings::ensure_web_prototype(realm, "XMLDocument")); + + return {}; +} + +} diff --git a/Userland/Libraries/LibWeb/DOM/XMLDocument.h b/Userland/Libraries/LibWeb/DOM/XMLDocument.h new file mode 100644 index 0000000000..b588c83a7a --- /dev/null +++ b/Userland/Libraries/LibWeb/DOM/XMLDocument.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023, Luke Wilde + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace Web::DOM { + +class XMLDocument final : public Document { + WEB_PLATFORM_OBJECT(XMLDocument, Document); + +public: + virtual ~XMLDocument() override = default; + +private: + XMLDocument(JS::Realm& realm, AK::URL const& url); + + virtual JS::ThrowCompletionOr initialize(JS::Realm&) override; +}; + +} diff --git a/Userland/Libraries/LibWeb/DOM/XMLDocument.idl b/Userland/Libraries/LibWeb/DOM/XMLDocument.idl new file mode 100644 index 0000000000..50cd1cce35 --- /dev/null +++ b/Userland/Libraries/LibWeb/DOM/XMLDocument.idl @@ -0,0 +1,5 @@ +#import + +[Exposed=Window] +interface XMLDocument : Document { +}; diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 9192e8f7b6..7fdc8e5c89 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -214,6 +214,7 @@ class StaticNodeList; class StaticRange; class Text; class TreeWalker; +class XMLDocument; enum class QuirksMode; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index 536736e200..b89700b078 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -51,6 +51,7 @@ libweb_js_bindings(DOM/ShadowRoot) libweb_js_bindings(DOM/StaticRange) libweb_js_bindings(DOM/Text) libweb_js_bindings(DOM/TreeWalker) +libweb_js_bindings(DOM/XMLDocument) libweb_js_bindings(DOMParsing/XMLSerializer) libweb_js_bindings(Encoding/TextDecoder) libweb_js_bindings(Encoding/TextEncoder)