LibWeb: Frameset should be the body element if it comes before body

Fixes one WPT test: "Frameset followed by body inside the html element"
http://wpt.live/html/dom/documents/dom-tree-accessors/Document.body.html
This commit is contained in:
ronak69 2024-10-12 13:55:25 +00:00 committed by Andrew Kaster
commit 5f9a36feac
Notes: github-actions[bot] 2024-10-12 17:53:51 +00:00
3 changed files with 26 additions and 6 deletions

View file

@ -842,17 +842,18 @@ void Document::set_dir(String const& dir)
html->set_dir(dir);
}
// https://html.spec.whatwg.org/multipage/dom.html#the-body-element-2
HTML::HTMLElement* Document::body()
{
// The body element of a document is the first of the html element's children that is either
// a body element or a frameset element, or null if there is no such element.
auto* html = html_element();
if (!html)
return nullptr;
auto* first_body = html->first_child_of_type<HTML::HTMLBodyElement>();
if (first_body)
return first_body;
auto* first_frameset = html->first_child_of_type<HTML::HTMLFrameSetElement>();
if (first_frameset)
return first_frameset;
for (auto* child = html->first_child(); child; child = child->next_sibling()) {
if (is<HTML::HTMLBodyElement>(*child) || is<HTML::HTMLFrameSetElement>(*child))
return static_cast<HTML::HTMLElement*>(child);
}
return nullptr;
}