From ef01c735cdb15ed23be2b9ade753875c92622694 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Mon, 26 Feb 2024 17:36:48 +0100 Subject: [PATCH] LibWeb: Visit ImageProvider from Layout::ImageBox Adds missing visit of HTMLElement that serves as image provider of image layout node. --- Userland/Libraries/LibWeb/HTML/HTMLImageElement.h | 1 + Userland/Libraries/LibWeb/HTML/HTMLInputElement.h | 1 + Userland/Libraries/LibWeb/HTML/HTMLObjectElement.h | 1 + Userland/Libraries/LibWeb/Layout/ImageBox.cpp | 6 ++++++ Userland/Libraries/LibWeb/Layout/ImageBox.h | 2 ++ Userland/Libraries/LibWeb/Layout/ImageProvider.h | 2 ++ 6 files changed, 13 insertions(+) diff --git a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.h b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.h index 50a3c9a3c0..cfb0c85f43 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.h @@ -91,6 +91,7 @@ public: virtual Optional intrinsic_aspect_ratio() const override; virtual RefPtr current_image_bitmap(Gfx::IntSize = {}) const override; virtual void set_visible_in_viewport(bool) override; + virtual JS::NonnullGCPtr to_html_element() const override { return *this; } virtual void visit_edges(Cell::Visitor&) override; diff --git a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.h b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.h index 7f17abe58d..3e62cb11ba 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.h @@ -205,6 +205,7 @@ private: virtual Optional intrinsic_aspect_ratio() const override; virtual RefPtr current_image_bitmap(Gfx::IntSize = {}) const override; virtual void set_visible_in_viewport(bool) override; + virtual JS::NonnullGCPtr to_html_element() const override { return *this; } virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; diff --git a/Userland/Libraries/LibWeb/HTML/HTMLObjectElement.h b/Userland/Libraries/LibWeb/HTML/HTMLObjectElement.h index 41b2d08979..26803bd644 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLObjectElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLObjectElement.h @@ -81,6 +81,7 @@ private: virtual Optional intrinsic_aspect_ratio() const override; virtual RefPtr current_image_bitmap(Gfx::IntSize = {}) const override; virtual void set_visible_in_viewport(bool) override; + virtual JS::NonnullGCPtr to_html_element() const override { return *this; } Representation m_representation { Representation::Unknown }; diff --git a/Userland/Libraries/LibWeb/Layout/ImageBox.cpp b/Userland/Libraries/LibWeb/Layout/ImageBox.cpp index 7d5fd6f05e..c009cc541f 100644 --- a/Userland/Libraries/LibWeb/Layout/ImageBox.cpp +++ b/Userland/Libraries/LibWeb/Layout/ImageBox.cpp @@ -22,6 +22,12 @@ ImageBox::ImageBox(DOM::Document& document, DOM::Element& element, NonnullRefPtr ImageBox::~ImageBox() = default; +void ImageBox::visit_edges(JS::Cell::Visitor& visitor) +{ + Base::visit_edges(visitor); + visitor.visit(m_image_provider.to_html_element()); +} + void ImageBox::prepare_for_replaced_layout() { set_natural_width(m_image_provider.intrinsic_width()); diff --git a/Userland/Libraries/LibWeb/Layout/ImageBox.h b/Userland/Libraries/LibWeb/Layout/ImageBox.h index c943da9781..93d91a65a2 100644 --- a/Userland/Libraries/LibWeb/Layout/ImageBox.h +++ b/Userland/Libraries/LibWeb/Layout/ImageBox.h @@ -32,6 +32,8 @@ public: void dom_node_did_update_alt_text(Badge); private: + virtual void visit_edges(Visitor&) override; + ImageProvider const& m_image_provider; Optional m_cached_alt_text_width; diff --git a/Userland/Libraries/LibWeb/Layout/ImageProvider.h b/Userland/Libraries/LibWeb/Layout/ImageProvider.h index 61ae4af2a4..ab7600fc90 100644 --- a/Userland/Libraries/LibWeb/Layout/ImageProvider.h +++ b/Userland/Libraries/LibWeb/Layout/ImageProvider.h @@ -25,6 +25,8 @@ public: virtual RefPtr current_image_bitmap(Gfx::IntSize) const = 0; virtual void set_visible_in_viewport(bool) = 0; + virtual JS::NonnullGCPtr to_html_element() const = 0; + protected: static void did_update_alt_text(ImageBox&); };