mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 23:17:45 +00:00
LibWeb: Visit IntersectionObserverRegistration instead of using Handle
This fixes GC-leak caused by JS::Handle<IntersectionObserverver> preventing an element that owns the handle from being deallocated.
This commit is contained in:
parent
ac5c4705fd
commit
35623ad52e
3 changed files with 4 additions and 2 deletions
|
@ -128,6 +128,8 @@ void Element::visit_edges(Cell::Visitor& visitor)
|
|||
visitor.visit(m_custom_element_definition.ptr());
|
||||
for (auto& pseudo_element_layout_node : m_pseudo_element_nodes)
|
||||
visitor.visit(pseudo_element_layout_node);
|
||||
for (auto& registered_intersection_observers : m_registered_intersection_observers)
|
||||
visitor.visit(registered_intersection_observers.observer);
|
||||
}
|
||||
|
||||
// https://dom.spec.whatwg.org/#dom-element-getattribute
|
||||
|
|
|
@ -92,7 +92,7 @@ void IntersectionObserver::observe(DOM::Element& target)
|
|||
// property set to observer, a previousThresholdIndex property set to -1, and a previousIsIntersecting
|
||||
// property set to false.
|
||||
auto intersection_observer_registration = IntersectionObserverRegistration {
|
||||
.observer = JS::make_handle(*this),
|
||||
.observer = *this,
|
||||
.previous_threshold_index = OptionalNone {},
|
||||
.previous_is_intersecting = false,
|
||||
};
|
||||
|
|
|
@ -23,7 +23,7 @@ struct IntersectionObserverInit {
|
|||
struct IntersectionObserverRegistration {
|
||||
// https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverregistration-observer
|
||||
// [A]n observer property holding an IntersectionObserver.
|
||||
JS::Handle<IntersectionObserver> observer;
|
||||
JS::NonnullGCPtr<IntersectionObserver> observer;
|
||||
|
||||
// https://www.w3.org/TR/intersection-observer/#dom-intersectionobserverregistration-observer
|
||||
// NOTE: Optional is used in place of the spec using -1 to indicate no previous index.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue