diff --git a/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp b/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp index 84ccc211eda..c42fdfa3b12 100644 --- a/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp +++ b/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -290,6 +291,16 @@ void BrowsingContext::visit_edges(Cell::Visitor& visitor) visitor.visit(m_previous_sibling); } +// https://html.spec.whatwg.org/multipage/document-sequences.html#bc-traversable +JS::NonnullGCPtr BrowsingContext::top_level_traversable() const +{ + // A browsing context's top-level traversable is its active document's node navigable's top-level traversable. + auto traversable = active_document()->navigable()->top_level_traversable(); + VERIFY(traversable); + VERIFY(traversable->is_top_level_traversable()); + return *traversable; +} + void BrowsingContext::did_edit(Badge) { reset_cursor_blink_cycle(); diff --git a/Userland/Libraries/LibWeb/HTML/BrowsingContext.h b/Userland/Libraries/LibWeb/HTML/BrowsingContext.h index 833039a3000..b65a0e45b18 100644 --- a/Userland/Libraries/LibWeb/HTML/BrowsingContext.h +++ b/Userland/Libraries/LibWeb/HTML/BrowsingContext.h @@ -42,6 +42,8 @@ public: virtual ~BrowsingContext() override; + JS::NonnullGCPtr top_level_traversable() const; + JS::GCPtr parent() const { return m_parent; } void append_child(JS::NonnullGCPtr); void remove_child(JS::NonnullGCPtr);