Browse Source

LibWeb: Make XMLSerializer GC-allocated

Andreas Kling 2 năm trước cách đây
mục cha
commit
233208b640

+ 12 - 1
Userland/Libraries/LibWeb/DOMParsing/XMLSerializer.cpp

@@ -4,6 +4,7 @@
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
+#include <LibWeb/Bindings/XMLSerializerPrototype.h>
 #include <LibWeb/DOM/CDATASection.h>
 #include <LibWeb/DOM/Comment.h>
 #include <LibWeb/DOM/Document.h>
@@ -20,7 +21,17 @@
 
 namespace Web::DOMParsing {
 
-XMLSerializer::XMLSerializer() = default;
+JS::NonnullGCPtr<XMLSerializer> XMLSerializer::create_with_global_object(HTML::Window& window)
+{
+    return *window.heap().allocate<XMLSerializer>(window.realm(), window);
+}
+
+XMLSerializer::XMLSerializer(HTML::Window& window)
+    : PlatformObject(window.realm())
+{
+    set_prototype(&window.ensure_web_prototype<Bindings::XMLSerializerPrototype>("XMLSerializer"));
+}
+
 XMLSerializer::~XMLSerializer() = default;
 
 // https://w3c.github.io/DOM-Parsing/#dom-xmlserializer-serializetostring

+ 8 - 13
Userland/Libraries/LibWeb/DOMParsing/XMLSerializer.h

@@ -6,29 +6,22 @@
 
 #pragma once
 
-#include <AK/RefCounted.h>
-#include <LibWeb/Bindings/Wrappable.h>
-#include <LibWeb/Forward.h>
+#include <LibWeb/Bindings/PlatformObject.h>
 
 namespace Web::DOMParsing {
 
-class XMLSerializer final
-    : public RefCounted<XMLSerializer>
-    , public Bindings::Wrappable {
-public:
-    using WrapperType = Bindings::XMLSerializerWrapper;
+class XMLSerializer final : public Bindings::PlatformObject {
+    WEB_PLATFORM_OBJECT(XMLSerializer, Bindings::PlatformObject);
 
-    static NonnullRefPtr<XMLSerializer> create_with_global_object(HTML::Window&)
-    {
-        return adopt_ref(*new XMLSerializer());
-    }
+public:
+    static JS::NonnullGCPtr<XMLSerializer> create_with_global_object(HTML::Window&);
 
     virtual ~XMLSerializer() override;
 
     DOM::ExceptionOr<String> serialize_to_string(JS::NonnullGCPtr<DOM::Node> root);
 
 private:
-    XMLSerializer();
+    explicit XMLSerializer(HTML::Window&);
 };
 
 enum class RequireWellFormed {
@@ -39,3 +32,5 @@ enum class RequireWellFormed {
 DOM::ExceptionOr<String> serialize_node_to_xml_string(JS::NonnullGCPtr<DOM::Node> root, RequireWellFormed require_well_formed);
 
 }
+
+WRAPPER_HACK(XMLSerializer, Web::DOMParsing)

+ 0 - 1
Userland/Libraries/LibWeb/Forward.h

@@ -479,7 +479,6 @@ class WorkerNavigatorWrapper;
 class Wrappable;
 class Wrapper;
 class XMLHttpRequestPrototype;
-class XMLSerializerWrapper;
 enum class CanPlayTypeResult;
 enum class CanvasFillRule;
 enum class EndingType;

+ 1 - 1
Userland/Libraries/LibWeb/idl_files.cmake

@@ -50,7 +50,7 @@ libweb_js_wrapper(DOM/ShadowRoot NO_INSTANCE)
 libweb_js_wrapper(DOM/StaticRange NO_INSTANCE)
 libweb_js_wrapper(DOM/Text NO_INSTANCE)
 libweb_js_wrapper(DOM/TreeWalker NO_INSTANCE)
-libweb_js_wrapper(DOMParsing/XMLSerializer)
+libweb_js_wrapper(DOMParsing/XMLSerializer NO_INSTANCE)
 libweb_js_wrapper(Encoding/TextDecoder)
 libweb_js_wrapper(Encoding/TextEncoder)
 libweb_js_wrapper(Fetch/Headers ITERABLE)