diff --git a/Libraries/LibWeb/CSS/StyleValue.cpp b/Libraries/LibWeb/CSS/StyleValue.cpp index 7f31757f25..33218278c0 100644 --- a/Libraries/LibWeb/CSS/StyleValue.cpp +++ b/Libraries/LibWeb/CSS/StyleValue.cpp @@ -293,13 +293,14 @@ ImageStyleValue::ImageStyleValue(const URL& url, Document& document) { LoadRequest request; request.set_url(url); - set_resource(ResourceLoader::the().load_resource(Resource::Type::Generic, request)); + set_resource(ResourceLoader::the().load_resource(Resource::Type::Image, request)); } void ImageStyleValue::resource_did_load() { if (!m_document) return; + // FIXME: Use the shared decoder from ImageResource! m_bitmap = Gfx::load_png_from_memory(resource()->encoded_data().data(), resource()->encoded_data().size()); if (!m_bitmap) return; diff --git a/Libraries/LibWeb/CSS/StyleValue.h b/Libraries/LibWeb/CSS/StyleValue.h index a2c4d09420..64bde2e3c5 100644 --- a/Libraries/LibWeb/CSS/StyleValue.h +++ b/Libraries/LibWeb/CSS/StyleValue.h @@ -36,7 +36,7 @@ #include #include #include -#include +#include namespace Web { @@ -302,7 +302,7 @@ private: class ImageStyleValue final : public StyleValue - , public ResourceClient { + , public ImageResourceClient { public: static NonnullRefPtr create(const URL& url, Document& document) { return adopt(*new ImageStyleValue(url, document)); } virtual ~ImageStyleValue() override { } diff --git a/Libraries/LibWeb/Loader/ImageResource.h b/Libraries/LibWeb/Loader/ImageResource.h index d505c2a59d..474e78debd 100644 --- a/Libraries/LibWeb/Loader/ImageResource.h +++ b/Libraries/LibWeb/Loader/ImageResource.h @@ -54,6 +54,9 @@ public: protected: ImageResource* resource() { return static_cast(ResourceClient::resource()); } const ImageResource* resource() const { return static_cast(ResourceClient::resource()); } + +private: + virtual Resource::Type client_type() const override { return Resource::Type::Image; } }; } diff --git a/Libraries/LibWeb/Loader/Resource.cpp b/Libraries/LibWeb/Loader/Resource.cpp index 26992d7af7..cb748a5392 100644 --- a/Libraries/LibWeb/Loader/Resource.cpp +++ b/Libraries/LibWeb/Loader/Resource.cpp @@ -99,6 +99,8 @@ void ResourceClient::set_resource(Resource* resource) m_resource->unregister_client({}, *this); m_resource = resource; if (m_resource) { + ASSERT(resource->type() == client_type()); + m_resource->register_client({}, *this); // Make sure that reused resources also have their load callback fired. diff --git a/Libraries/LibWeb/Loader/Resource.h b/Libraries/LibWeb/Loader/Resource.h index 0ccfda79a4..929195bd97 100644 --- a/Libraries/LibWeb/Loader/Resource.h +++ b/Libraries/LibWeb/Loader/Resource.h @@ -55,6 +55,8 @@ public: static NonnullRefPtr create(Badge, Type, const LoadRequest&); virtual ~Resource(); + Type type() const { return m_type; } + bool is_loaded() const { return m_loaded; } bool is_failed() const { return m_failed; } @@ -95,6 +97,8 @@ public: virtual void resource_did_fail() { } protected: + virtual Resource::Type client_type() const { return Resource::Type::Generic; } + Resource* resource() { return m_resource; } const Resource* resource() const { return m_resource; } void set_resource(Resource*);