1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-23 19:37:34 +00:00

LibWeb: Add GC finalizer to Layout::ImageBox

It's not safe to unregister ImageBox from the browsing context in the
destructor (since the browsing context may have already been swept and
destroyed).
This commit is contained in:
Andreas Kling 2022-10-20 18:38:25 +02:00
parent c877eb47a2
commit 1885fe529f
2 changed files with 11 additions and 2 deletions

View file

@ -18,8 +18,14 @@ ImageBox::ImageBox(DOM::Document& document, DOM::Element& element, NonnullRefPtr
browsing_context().register_viewport_client(*this);
}
ImageBox::~ImageBox()
ImageBox::~ImageBox() = default;
void ImageBox::finalize()
{
Base::finalize();
// NOTE: We unregister from the browsing context in finalize() to avoid trouble
// in the scenario where our BrowsingContext has already been swept by GC.
browsing_context().unregister_viewport_client(*this);
}

View file

@ -12,7 +12,7 @@
namespace Web::Layout {
class ImageBox
class ImageBox final
: public ReplacedBox
, public HTML::BrowsingContext::ViewportClient {
JS_CELL(ImageBox, ReplacedBox);
@ -37,6 +37,9 @@ private:
// ^BrowsingContext::ViewportClient
virtual void browsing_context_did_set_viewport_rect(Gfx::IntRect const&) final;
// ^JS::Cell
virtual void finalize() override;
int preferred_width() const;
int preferred_height() const;