LibWeb: Use finalize for cleaning up all navigables

The use of this HashMap looks very spooky, but let's at least use
finalize when cleaning them up on destruction to make things slightly
less dangerous looking.
This commit is contained in:
Shannon Booth 2025-01-17 14:18:36 +13:00 committed by Andreas Kling
parent 59162c8155
commit 76397c9ecd
Notes: github-actions[bot] 2025-01-17 09:11:51 +00:00
7 changed files with 17 additions and 13 deletions
Libraries/LibWeb/HTML

View file

@ -73,9 +73,9 @@ private:
GC_DEFINE_ALLOCATOR(ResponseHolder);
HashTable<Navigable*>& all_navigables()
HashTable<GC::RawRef<Navigable>>& all_navigables()
{
static HashTable<Navigable*> set;
static HashTable<GC::RawRef<Navigable>> set;
return set;
}
@ -111,12 +111,15 @@ Navigable::Navigable(GC::Ref<Page> page)
: m_page(page)
, m_event_handler({}, *this)
{
all_navigables().set(this);
all_navigables().set(*this);
}
Navigable::~Navigable()
Navigable::~Navigable() = default;
void Navigable::finalize()
{
all_navigables().remove(this);
all_navigables().remove(*this);
Base::finalize();
}
void Navigable::visit_edges(Cell::Visitor& visitor)
@ -159,7 +162,7 @@ void Navigable::set_delaying_load_events(bool value)
GC::Ptr<Navigable> Navigable::navigable_with_active_document(GC::Ref<DOM::Document> document)
{
for (auto* navigable : all_navigables()) {
for (auto navigable : all_navigables()) {
if (navigable->active_document() == document)
return navigable;
}