From 17c92d7c2b75a6647749c65e9e4316cee3044af7 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Fri, 10 Jan 2025 16:09:53 +1300 Subject: [PATCH] LibWeb/DOM: Create TreeWalker in document's realm --- Libraries/LibWeb/DOM/Document.cpp | 2 +- Libraries/LibWeb/DOM/TreeWalker.cpp | 9 ++++----- Libraries/LibWeb/DOM/TreeWalker.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 7a3ac9a5d85..1deb7d0aaac 100644 --- a/Libraries/LibWeb/DOM/Document.cpp +++ b/Libraries/LibWeb/DOM/Document.cpp @@ -3342,7 +3342,7 @@ GC::Ref Document::create_node_iterator(Node& root, unsigned what_t // https://dom.spec.whatwg.org/#dom-document-createtreewalker GC::Ref Document::create_tree_walker(Node& root, unsigned what_to_show, GC::Ptr filter) { - return TreeWalker::create(root, what_to_show, filter); + return TreeWalker::create(realm(), root, what_to_show, filter); } void Document::register_node_iterator(Badge, NodeIterator& node_iterator) diff --git a/Libraries/LibWeb/DOM/TreeWalker.cpp b/Libraries/LibWeb/DOM/TreeWalker.cpp index 82def91c128..0469e8234e7 100644 --- a/Libraries/LibWeb/DOM/TreeWalker.cpp +++ b/Libraries/LibWeb/DOM/TreeWalker.cpp @@ -16,8 +16,8 @@ namespace Web::DOM { GC_DEFINE_ALLOCATOR(TreeWalker); -TreeWalker::TreeWalker(Node& root) - : PlatformObject(root.realm()) +TreeWalker::TreeWalker(JS::Realm& realm, Node& root) + : PlatformObject(realm) , m_root(root) , m_current(root) { @@ -40,12 +40,11 @@ void TreeWalker::visit_edges(Cell::Visitor& visitor) } // https://dom.spec.whatwg.org/#dom-document-createtreewalker -GC::Ref TreeWalker::create(Node& root, unsigned what_to_show, GC::Ptr filter) +GC::Ref TreeWalker::create(JS::Realm& realm, Node& root, unsigned what_to_show, GC::Ptr filter) { // 1. Let walker be a new TreeWalker object. // 2. Set walker’s root and walker’s current to root. - auto& realm = root.realm(); - auto walker = realm.create(root); + auto walker = realm.create(realm, root); // 3. Set walker’s whatToShow to whatToShow. walker->m_what_to_show = what_to_show; diff --git a/Libraries/LibWeb/DOM/TreeWalker.h b/Libraries/LibWeb/DOM/TreeWalker.h index b97dfeb89fc..cf98c653178 100644 --- a/Libraries/LibWeb/DOM/TreeWalker.h +++ b/Libraries/LibWeb/DOM/TreeWalker.h @@ -16,7 +16,7 @@ class TreeWalker final : public Bindings::PlatformObject { GC_DECLARE_ALLOCATOR(TreeWalker); public: - [[nodiscard]] static GC::Ref create(Node& root, unsigned what_to_show, GC::Ptr); + [[nodiscard]] static GC::Ref create(JS::Realm&, Node& root, unsigned what_to_show, GC::Ptr); virtual ~TreeWalker() override; @@ -38,7 +38,7 @@ public: unsigned what_to_show() const { return m_what_to_show; } private: - explicit TreeWalker(Node& root); + explicit TreeWalker(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 e7b84b78523..94de0b02bd3 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 -29 Pass -4 Fail +30 Pass +3 Fail Pass querySelectorAll Pass createElement Pass createElementNS @@ -16,7 +16,7 @@ Pass createAttributeNS Pass createEvent Pass createRange Pass createNodeIterator -Fail createTreeWalker +Pass createTreeWalker Pass Request Pass Response Fail getElementsByTagName