diff --git a/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp b/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp
index 80a7c0454a..2e68a8b447 100644
--- a/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp
+++ b/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp
@@ -149,16 +149,6 @@ void BrowsingContext::set_size(Gfx::IntSize const& size)
HTML::main_thread_event_loop().schedule();
}
-void BrowsingContext::set_viewport_scroll_offset(Gfx::IntPoint const& offset)
-{
- if (m_viewport_scroll_offset == offset)
- return;
- m_viewport_scroll_offset = offset;
-
- for (auto* client : m_viewport_clients)
- client->browsing_context_did_set_viewport_rect(viewport_rect());
-}
-
void BrowsingContext::set_needs_display()
{
set_needs_display(viewport_rect());
@@ -179,6 +169,15 @@ void BrowsingContext::set_needs_display(Gfx::IntRect const& rect)
container()->layout_node()->set_needs_display();
}
+void BrowsingContext::scroll_to(Gfx::IntPoint const& position)
+{
+ if (active_document())
+ active_document()->force_layout();
+
+ if (m_page)
+ m_page->client().page_did_request_scroll_to(position);
+}
+
void BrowsingContext::scroll_to_anchor(String const& fragment)
{
if (!active_document())
diff --git a/Userland/Libraries/LibWeb/HTML/BrowsingContext.h b/Userland/Libraries/LibWeb/HTML/BrowsingContext.h
index 636893cf12..564d246218 100644
--- a/Userland/Libraries/LibWeb/HTML/BrowsingContext.h
+++ b/Userland/Libraries/LibWeb/HTML/BrowsingContext.h
@@ -54,7 +54,6 @@ public:
void set_needs_display(Gfx::IntRect const&);
Gfx::IntPoint const& viewport_scroll_offset() const { return m_viewport_scroll_offset; }
- void set_viewport_scroll_offset(Gfx::IntPoint const&);
Gfx::IntRect viewport_rect() const { return { m_viewport_scroll_offset, m_size }; }
void set_viewport_rect(Gfx::IntRect const&);
@@ -64,6 +63,7 @@ public:
Web::EventHandler& event_handler() { return m_event_handler; }
Web::EventHandler const& event_handler() const { return m_event_handler; }
+ void scroll_to(Gfx::IntPoint const&);
void scroll_to_anchor(String const&);
BrowsingContext& top_level_browsing_context()
diff --git a/Userland/Libraries/LibWeb/Loader/FrameLoader.cpp b/Userland/Libraries/LibWeb/Loader/FrameLoader.cpp
index 62e2004a24..630fde5599 100644
--- a/Userland/Libraries/LibWeb/Loader/FrameLoader.cpp
+++ b/Userland/Libraries/LibWeb/Loader/FrameLoader.cpp
@@ -344,7 +344,7 @@ void FrameLoader::resource_did_load()
if (!url.fragment().is_empty())
browsing_context().scroll_to_anchor(url.fragment());
else
- browsing_context().set_viewport_scroll_offset({ 0, 0 });
+ browsing_context().scroll_to({ 0, 0 });
if (auto* page = browsing_context().page())
page->client().page_did_finish_loading(url);