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);