diff --git a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp index f2cc4cf384..693299f573 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp +++ b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -38,6 +39,15 @@ PropertyOwningCSSStyleDeclaration::PropertyOwningCSSStyleDeclaration(JS::Realm& { } +void PropertyOwningCSSStyleDeclaration::visit_edges(Cell::Visitor& visitor) +{ + Base::visit_edges(visitor); + for (auto& property : m_properties) { + if (property.value->is_image()) + property.value->as_image().visit_edges(visitor); + } +} + String PropertyOwningCSSStyleDeclaration::item(size_t index) const { if (index >= m_properties.size()) diff --git a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h index b3b0802cbc..25b0b2e071 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h +++ b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.h @@ -85,6 +85,8 @@ protected: private: bool set_a_css_declaration(PropertyID, NonnullRefPtr, Important); + virtual void visit_edges(Cell::Visitor&) override; + Vector m_properties; HashMap m_custom_properties; }; diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h index 6565d4d16d..5650085cf7 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/ImageStyleValue.h @@ -10,9 +10,11 @@ #pragma once #include +#include #include #include #include +#include namespace Web::CSS { @@ -26,6 +28,13 @@ public: } virtual ~ImageStyleValue() override = default; + void visit_edges(JS::Cell::Visitor& visitor) const + { + // FIXME: visit_edges in non-GC allocated classes is confusing pattern. + // Consider making StyleValue to be GC allocated instead. + visitor.visit(m_image_request); + } + virtual String to_string() const override; virtual bool equals(StyleValue const& other) const override; @@ -44,7 +53,7 @@ public: private: ImageStyleValue(AK::URL const&); - JS::Handle m_image_request; + JS::GCPtr m_image_request; void animate(); Gfx::Bitmap const* bitmap(size_t frame_index, Gfx::IntSize = {}) const;