LibWeb: Update layout if we lack a node when getting computed style

As noted, there are two situations where an element will have no layout
node here:
1. The element is invisible in a way that it generates no layout node.
2. We haven't built the layout yet.

This protects against the second case, which would otherwise incorrectly
send us down the path of looking directly at the computed style.
This commit is contained in:
Sam Atkins 2023-10-13 17:44:36 +01:00 committed by Andreas Kling
parent 642ad80960
commit c65d6964ea
Notes: sideshowbarker 2024-07-17 02:56:25 +09:00
2 changed files with 5 additions and 2 deletions

View file

@ -1 +1 @@
0 calc(5px - 10px) 0 calc(2px + 3px) => #000000ff 0px calc(5px + (0 - 10px)) 0px calc(2px + 3px)
0 calc(5px - 10px) 0 calc(2px + 3px) => #000000ff 0px -5px 0px 5px

View file

@ -467,7 +467,10 @@ Optional<StyleProperty> ResolvedCSSStyleDeclaration::property(PropertyID propert
if (!m_element->is_connected())
return {};
if (property_affects_layout(property_id)) {
// FIXME: Be smarter about updating layout if there's no layout node.
// We may legitimately have no layout node if we're not visible, but this protects against situations
// where we're requesting the computed style before layout has happened.
if (!m_element->layout_node() || property_affects_layout(property_id)) {
const_cast<DOM::Document&>(m_element->document()).update_layout();
} else {
// FIXME: If we had a way to update style for a single element, this would be a good place to use it.