summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2022-03-09 17:51:02 +0100
committerAndreas Kling <kling@serenityos.org>2022-03-09 18:14:24 +0100
commit04311ca7f115a33aa9891b7146407ed8fee3b726 (patch)
treec02eb657a25a6a827a7441230e86c4f9c64abef3
parent3259b17a6abde8d4ded55fdd41818f5db64bc1a3 (diff)
downloadserenity-04311ca7f115a33aa9891b7146407ed8fee3b726.zip
LibWeb: Flush pending layouts when accessing element resolved style
We were handing out stale values from window.getComputedStyle() objects after the first layout. Fix this by always updating layout on property access. This is not necessary for all properties, but for now let's go with the simplest approach to make it work correctly.
-rw-r--r--Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp
index 88b255fb65..296bc7ab6e 100644
--- a/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp
+++ b/Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp
@@ -772,7 +772,8 @@ RefPtr<StyleValue> ResolvedCSSStyleDeclaration::style_value_for_property(Layout:
Optional<StyleProperty> ResolvedCSSStyleDeclaration::property(PropertyID property_id) const
{
- const_cast<DOM::Document&>(m_element->document()).ensure_layout();
+ // FIXME: Only update layout if required to resolve the property we're accessing.
+ const_cast<DOM::Document&>(m_element->document()).update_layout();
if (!m_element->layout_node()) {
auto style = m_element->document().style_computer().compute_style(const_cast<DOM::Element&>(*m_element));