LibWeb: Add API for finding Navigable with a given active document

This will be used to look up a document's node navigable. It might be
nice to have a direct pointer from Document to its Navigable, but at
the moment I don't understand the algorithms well enough to maintain
that linkage.
This commit is contained in:
Andreas Kling 2023-01-01 17:43:05 +01:00
parent f09aaf826f
commit 6e416284b9
Notes: sideshowbarker 2024-07-18 04:38:32 +09:00
2 changed files with 25 additions and 2 deletions
Userland/Libraries/LibWeb/HTML

View file

@ -13,9 +13,21 @@
namespace Web::HTML {
Navigable::Navigable() = default;
static HashTable<Navigable*>& all_navigables()
{
static HashTable<Navigable*> set;
return set;
}
Navigable::~Navigable() = default;
Navigable::Navigable()
{
all_navigables().set(this);
}
Navigable::~Navigable()
{
all_navigables().remove(this);
}
void Navigable::visit_edges(Cell::Visitor& visitor)
{
@ -26,6 +38,15 @@ void Navigable::visit_edges(Cell::Visitor& visitor)
visitor.visit(m_container);
}
JS::GCPtr<Navigable> Navigable::navigable_with_active_document(JS::NonnullGCPtr<DOM::Document> document)
{
for (auto* navigable : all_navigables()) {
if (navigable->active_document() == document)
return navigable;
}
return nullptr;
}
// https://html.spec.whatwg.org/multipage/document-sequences.html#nav-document
JS::GCPtr<DOM::Document> Navigable::active_document()
{

View file

@ -43,6 +43,8 @@ public:
JS::GCPtr<TraversableNavigable> traversable_navigable();
JS::GCPtr<TraversableNavigable> top_level_traversable();
static JS::GCPtr<Navigable> navigable_with_active_document(JS::NonnullGCPtr<DOM::Document>);
protected:
Navigable();