LibWeb: Do not destroy document until whole subtree completed unloading

Fixes crashing when "unload" event handler tries to access active
document that has already been destroyed.
This commit is contained in:
Aliaksandr Kalenik 2024-04-19 15:38:17 +02:00 committed by Alexander Kalenik
commit d3cfe35fbd
Notes: sideshowbarker 2024-07-16 22:18:54 +09:00
6 changed files with 70 additions and 26 deletions

View file

@ -92,6 +92,15 @@ bool Navigable::is_traversable() const
return is<TraversableNavigable>(*this);
}
bool Navigable::is_ancestor_of(JS::NonnullGCPtr<Navigable> other) const
{
for (auto ancestor = other->parent(); ancestor; ancestor = ancestor->parent()) {
if (ancestor == this)
return true;
}
return false;
}
Navigable::Navigable()
{
all_navigables().set(this);

View file

@ -59,6 +59,7 @@ public:
String const& id() const { return m_id; }
JS::GCPtr<Navigable> parent() const { return m_parent; }
bool is_ancestor_of(JS::NonnullGCPtr<Navigable>) const;
bool is_closing() const { return m_closing; }
void set_closing(bool value) { m_closing = value; }