From 84f22cb6b3a9845c8f8c47744a9fc7012d9f769f Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Fri, 10 Jan 2025 15:57:42 +1300 Subject: [PATCH] LibWeb/DOM: Create NodeIterator in document's realm --- Libraries/LibWeb/DOM/Document.cpp | 2 +- Libraries/LibWeb/DOM/NodeIterator.cpp | 9 ++++----- Libraries/LibWeb/DOM/NodeIterator.h | 4 ++-- .../Text/expected/wpt-import/webidl/current-realm.txt | 6 +++--- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Libraries/LibWeb/DOM/Document.cpp b/Libraries/LibWeb/DOM/Document.cpp index 37984d52c55..7a3ac9a5d85 100644 --- a/Libraries/LibWeb/DOM/Document.cpp +++ b/Libraries/LibWeb/DOM/Document.cpp @@ -3336,7 +3336,7 @@ WebIDL::ExceptionOr Document::validate_qualified_nam // https://dom.spec.whatwg.org/#dom-document-createnodeiterator GC::Ref Document::create_node_iterator(Node& root, unsigned what_to_show, GC::Ptr filter) { - return NodeIterator::create(root, what_to_show, filter).release_value_but_fixme_should_propagate_errors(); + return NodeIterator::create(realm(), root, what_to_show, filter).release_value_but_fixme_should_propagate_errors(); } // https://dom.spec.whatwg.org/#dom-document-createtreewalker diff --git a/Libraries/LibWeb/DOM/NodeIterator.cpp b/Libraries/LibWeb/DOM/NodeIterator.cpp index 67498325950..49133cecfe4 100644 --- a/Libraries/LibWeb/DOM/NodeIterator.cpp +++ b/Libraries/LibWeb/DOM/NodeIterator.cpp @@ -14,8 +14,8 @@ namespace Web::DOM { GC_DEFINE_ALLOCATOR(NodeIterator); -NodeIterator::NodeIterator(Node& root) - : PlatformObject(root.realm()) +NodeIterator::NodeIterator(JS::Realm& realm, Node& root) + : PlatformObject(realm) , m_root(root) , m_reference({ root }) { @@ -48,13 +48,12 @@ void NodeIterator::visit_edges(Cell::Visitor& visitor) } // https://dom.spec.whatwg.org/#dom-document-createnodeiterator -WebIDL::ExceptionOr> NodeIterator::create(Node& root, unsigned what_to_show, GC::Ptr filter) +WebIDL::ExceptionOr> NodeIterator::create(JS::Realm& realm, Node& root, unsigned what_to_show, GC::Ptr filter) { // 1. Let iterator be a new NodeIterator object. // 2. Set iterator’s root and iterator’s reference to root. // 3. Set iterator’s pointer before reference to true. - auto& realm = root.realm(); - auto iterator = realm.create(root); + auto iterator = realm.create(realm, root); // 4. Set iterator’s whatToShow to whatToShow. iterator->m_what_to_show = what_to_show; diff --git a/Libraries/LibWeb/DOM/NodeIterator.h b/Libraries/LibWeb/DOM/NodeIterator.h index 66bb4fcb552..71a66bf2608 100644 --- a/Libraries/LibWeb/DOM/NodeIterator.h +++ b/Libraries/LibWeb/DOM/NodeIterator.h @@ -17,7 +17,7 @@ class NodeIterator final : public Bindings::PlatformObject { GC_DECLARE_ALLOCATOR(NodeIterator); public: - static WebIDL::ExceptionOr> create(Node& root, unsigned what_to_show, GC::Ptr); + static WebIDL::ExceptionOr> create(JS::Realm& realm, Node& root, unsigned what_to_show, GC::Ptr); virtual ~NodeIterator() override; @@ -36,7 +36,7 @@ public: void run_pre_removing_steps(Node&); private: - explicit NodeIterator(Node& root); + explicit NodeIterator(JS::Realm&, Node& root); virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; diff --git a/Tests/LibWeb/Text/expected/wpt-import/webidl/current-realm.txt b/Tests/LibWeb/Text/expected/wpt-import/webidl/current-realm.txt index 72e2e6e70e5..e7b84b78523 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/webidl/current-realm.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/webidl/current-realm.txt @@ -2,8 +2,8 @@ Harness status: OK Found 33 tests -28 Pass -5 Fail +29 Pass +4 Fail Pass querySelectorAll Pass createElement Pass createElementNS @@ -15,7 +15,7 @@ Pass createAttribute Pass createAttributeNS Pass createEvent Pass createRange -Fail createNodeIterator +Pass createNodeIterator Fail createTreeWalker Pass Request Pass Response