diff --git a/Libraries/LibHTML/DOM/Document.cpp b/Libraries/LibHTML/DOM/Document.cpp
index c884a00dd1..5ba2665d65 100644
--- a/Libraries/LibHTML/DOM/Document.cpp
+++ b/Libraries/LibHTML/DOM/Document.cpp
@@ -126,6 +126,12 @@ URL Document::complete_url(const String& string) const
return url;
}
+void Document::invalidate_layout()
+{
+ if (on_invalidate_layout)
+ on_invalidate_layout();
+}
+
RefPtr Document::create_layout_node(const StyleResolver&, const StyleProperties*) const
{
return adopt(*new LayoutDocument(*this, StyleProperties::create()));
diff --git a/Libraries/LibHTML/DOM/Document.h b/Libraries/LibHTML/DOM/Document.h
index 6124736571..00a3024b6f 100644
--- a/Libraries/LibHTML/DOM/Document.h
+++ b/Libraries/LibHTML/DOM/Document.h
@@ -1,5 +1,6 @@
#pragma once
+#include
#include
#include
#include
@@ -63,6 +64,9 @@ public:
Color visited_link_color() const { return m_visited_link_color; }
void set_visited_link_color(Color);
+ void invalidate_layout();
+ Function on_invalidate_layout;
+
private:
virtual RefPtr create_layout_node(const StyleResolver&, const StyleProperties* parent_properties) const override;
diff --git a/Libraries/LibHTML/HtmlView.cpp b/Libraries/LibHTML/HtmlView.cpp
index f63b67d67d..eb08a1f4a5 100644
--- a/Libraries/LibHTML/HtmlView.cpp
+++ b/Libraries/LibHTML/HtmlView.cpp
@@ -31,7 +31,12 @@ void HtmlView::set_document(Document* document)
{
if (document == m_document)
return;
+
+ if (m_document)
+ m_document->on_invalidate_layout = nullptr;
+
m_document = document;
+ m_document->on_invalidate_layout = [this]() { layout_and_sync_size(); };
main_frame().set_document(document);