LibWeb/DOM: Create TreeWalker in document's realm

This commit is contained in:
Shannon Booth 2025-01-10 16:09:53 +13:00 committed by Sam Atkins
commit 17c92d7c2b
Notes: github-actions[bot] 2025-01-10 08:09:54 +00:00
4 changed files with 10 additions and 11 deletions

View file

@ -3342,7 +3342,7 @@ GC::Ref<NodeIterator> Document::create_node_iterator(Node& root, unsigned what_t
// https://dom.spec.whatwg.org/#dom-document-createtreewalker // https://dom.spec.whatwg.org/#dom-document-createtreewalker
GC::Ref<TreeWalker> Document::create_tree_walker(Node& root, unsigned what_to_show, GC::Ptr<NodeFilter> filter) GC::Ref<TreeWalker> Document::create_tree_walker(Node& root, unsigned what_to_show, GC::Ptr<NodeFilter> 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>, NodeIterator& node_iterator) void Document::register_node_iterator(Badge<NodeIterator>, NodeIterator& node_iterator)

View file

@ -16,8 +16,8 @@ namespace Web::DOM {
GC_DEFINE_ALLOCATOR(TreeWalker); GC_DEFINE_ALLOCATOR(TreeWalker);
TreeWalker::TreeWalker(Node& root) TreeWalker::TreeWalker(JS::Realm& realm, Node& root)
: PlatformObject(root.realm()) : PlatformObject(realm)
, m_root(root) , m_root(root)
, m_current(root) , m_current(root)
{ {
@ -40,12 +40,11 @@ void TreeWalker::visit_edges(Cell::Visitor& visitor)
} }
// https://dom.spec.whatwg.org/#dom-document-createtreewalker // https://dom.spec.whatwg.org/#dom-document-createtreewalker
GC::Ref<TreeWalker> TreeWalker::create(Node& root, unsigned what_to_show, GC::Ptr<NodeFilter> filter) GC::Ref<TreeWalker> TreeWalker::create(JS::Realm& realm, Node& root, unsigned what_to_show, GC::Ptr<NodeFilter> filter)
{ {
// 1. Let walker be a new TreeWalker object. // 1. Let walker be a new TreeWalker object.
// 2. Set walkers root and walkers current to root. // 2. Set walkers root and walkers current to root.
auto& realm = root.realm(); auto walker = realm.create<TreeWalker>(realm, root);
auto walker = realm.create<TreeWalker>(root);
// 3. Set walkers whatToShow to whatToShow. // 3. Set walkers whatToShow to whatToShow.
walker->m_what_to_show = what_to_show; walker->m_what_to_show = what_to_show;

View file

@ -16,7 +16,7 @@ class TreeWalker final : public Bindings::PlatformObject {
GC_DECLARE_ALLOCATOR(TreeWalker); GC_DECLARE_ALLOCATOR(TreeWalker);
public: public:
[[nodiscard]] static GC::Ref<TreeWalker> create(Node& root, unsigned what_to_show, GC::Ptr<NodeFilter>); [[nodiscard]] static GC::Ref<TreeWalker> create(JS::Realm&, Node& root, unsigned what_to_show, GC::Ptr<NodeFilter>);
virtual ~TreeWalker() override; virtual ~TreeWalker() override;
@ -38,7 +38,7 @@ public:
unsigned what_to_show() const { return m_what_to_show; } unsigned what_to_show() const { return m_what_to_show; }
private: private:
explicit TreeWalker(Node& root); explicit TreeWalker(JS::Realm&, Node& root);
virtual void initialize(JS::Realm&) override; virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override; virtual void visit_edges(Cell::Visitor&) override;

View file

@ -2,8 +2,8 @@ Harness status: OK
Found 33 tests Found 33 tests
29 Pass 30 Pass
4 Fail 3 Fail
Pass querySelectorAll Pass querySelectorAll
Pass createElement Pass createElement
Pass createElementNS Pass createElementNS
@ -16,7 +16,7 @@ Pass createAttributeNS
Pass createEvent Pass createEvent
Pass createRange Pass createRange
Pass createNodeIterator Pass createNodeIterator
Fail createTreeWalker Pass createTreeWalker
Pass Request Pass Request
Pass Response Pass Response
Fail getElementsByTagName Fail getElementsByTagName