Просмотр исходного кода

LibWeb: Fix a LibJSGCVerifier warning in DOM::Text

Matthew Olsson 1 год назад
Родитель
Сommit
7001e0a428

+ 10 - 2
Userland/Libraries/LibWeb/DOM/Text.cpp

@@ -35,8 +35,7 @@ void Text::visit_edges(Cell::Visitor& visitor)
 {
     Base::visit_edges(visitor);
     SlottableMixin::visit_edges(visitor);
-
-    visitor.visit(dynamic_cast<JS::Cell*>(m_owner.ptr()));
+    visitor.visit(m_owner);
 }
 
 // https://dom.spec.whatwg.org/#dom-text-text
@@ -47,6 +46,15 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Text>> Text::construct_impl(JS::Realm& real
     return realm.heap().allocate<Text>(realm, window.associated_document(), data);
 }
 
+EditableTextNodeOwner* Text::editable_text_node_owner()
+{
+    if (!m_owner)
+        return nullptr;
+    EditableTextNodeOwner* owner = dynamic_cast<EditableTextNodeOwner*>(m_owner.ptr());
+    VERIFY(owner);
+    return owner;
+}
+
 // https://dom.spec.whatwg.org/#dom-text-splittext
 // https://dom.spec.whatwg.org/#concept-text-split
 WebIDL::ExceptionOr<JS::NonnullGCPtr<Text>> Text::split_text(size_t offset)

+ 3 - 3
Userland/Libraries/LibWeb/DOM/Text.h

@@ -39,8 +39,8 @@ public:
     void set_max_length(Optional<size_t> max_length) { m_max_length = move(max_length); }
 
     template<DerivedFrom<EditableTextNodeOwner> T>
-    void set_editable_text_node_owner(Badge<T>, EditableTextNodeOwner& owner_element) { m_owner = &owner_element; }
-    EditableTextNodeOwner* editable_text_node_owner() { return m_owner.ptr(); }
+    void set_editable_text_node_owner(Badge<T>, Element& owner_element) { m_owner = &owner_element; }
+    EditableTextNodeOwner* editable_text_node_owner();
 
     WebIDL::ExceptionOr<JS::NonnullGCPtr<Text>> split_text(size_t offset);
 
@@ -55,7 +55,7 @@ protected:
     virtual void visit_edges(Cell::Visitor&) override;
 
 private:
-    JS::GCPtr<EditableTextNodeOwner> m_owner;
+    JS::GCPtr<Element> m_owner;
 
     bool m_always_editable { false };
     Optional<size_t> m_max_length {};

+ 1 - 1
Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp

@@ -328,7 +328,7 @@ void BrowsingContext::did_edit(Badge<EditEventHandler>)
 
     if (m_cursor_position && is<DOM::Text>(*m_cursor_position->node())) {
         auto& text_node = static_cast<DOM::Text&>(*m_cursor_position->node());
-        if (auto* text_node_owner = text_node.editable_text_node_owner())
+        if (auto text_node_owner = text_node.editable_text_node_owner())
             text_node_owner->did_edit_text_node({});
     }
 }