From ed84fbce474a86721ff85aa9559213e12bd556ba Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 10 Mar 2022 22:38:08 +0100 Subject: [PATCH] LibWeb: Make Paintable ref-counted This will allow us to use a protective NonnullRefPtr to keep paintables alive while running arbitrary JavaScript in response to events. --- Userland/Libraries/LibWeb/Layout/BlockContainer.cpp | 2 +- Userland/Libraries/LibWeb/Layout/BlockContainer.h | 2 +- Userland/Libraries/LibWeb/Layout/Box.cpp | 2 +- Userland/Libraries/LibWeb/Layout/Box.h | 2 +- Userland/Libraries/LibWeb/Layout/ButtonBox.cpp | 2 +- Userland/Libraries/LibWeb/Layout/ButtonBox.h | 2 +- Userland/Libraries/LibWeb/Layout/CanvasBox.cpp | 2 +- Userland/Libraries/LibWeb/Layout/CanvasBox.h | 2 +- Userland/Libraries/LibWeb/Layout/CheckBox.cpp | 2 +- Userland/Libraries/LibWeb/Layout/CheckBox.h | 2 +- Userland/Libraries/LibWeb/Layout/FrameBox.cpp | 2 +- Userland/Libraries/LibWeb/Layout/FrameBox.h | 2 +- Userland/Libraries/LibWeb/Layout/ImageBox.cpp | 2 +- Userland/Libraries/LibWeb/Layout/ImageBox.h | 2 +- Userland/Libraries/LibWeb/Layout/InlineNode.cpp | 2 +- Userland/Libraries/LibWeb/Layout/InlineNode.h | 2 +- Userland/Libraries/LibWeb/Layout/ListItemMarkerBox.cpp | 2 +- Userland/Libraries/LibWeb/Layout/ListItemMarkerBox.h | 2 +- Userland/Libraries/LibWeb/Layout/Node.cpp | 4 ++-- Userland/Libraries/LibWeb/Layout/Node.h | 7 ++++--- Userland/Libraries/LibWeb/Layout/Progress.cpp | 2 +- Userland/Libraries/LibWeb/Layout/Progress.h | 2 +- Userland/Libraries/LibWeb/Layout/RadioButton.cpp | 2 +- Userland/Libraries/LibWeb/Layout/RadioButton.h | 2 +- Userland/Libraries/LibWeb/Layout/SVGGeometryBox.cpp | 7 ++++++- Userland/Libraries/LibWeb/Layout/SVGGeometryBox.h | 2 ++ Userland/Libraries/LibWeb/Layout/SVGSVGBox.cpp | 7 ++++++- Userland/Libraries/LibWeb/Layout/SVGSVGBox.h | 2 ++ Userland/Libraries/LibWeb/Layout/TextNode.cpp | 2 +- Userland/Libraries/LibWeb/Layout/TextNode.h | 2 +- Userland/Libraries/LibWeb/Painting/ButtonPaintable.cpp | 4 ++-- Userland/Libraries/LibWeb/Painting/ButtonPaintable.h | 2 +- Userland/Libraries/LibWeb/Painting/CanvasPaintable.cpp | 4 ++-- Userland/Libraries/LibWeb/Painting/CanvasPaintable.h | 2 +- Userland/Libraries/LibWeb/Painting/CheckBoxPaintable.cpp | 4 ++-- Userland/Libraries/LibWeb/Painting/CheckBoxPaintable.h | 2 +- Userland/Libraries/LibWeb/Painting/ImagePaintable.cpp | 4 ++-- Userland/Libraries/LibWeb/Painting/ImagePaintable.h | 2 +- Userland/Libraries/LibWeb/Painting/InlinePaintable.cpp | 4 ++-- Userland/Libraries/LibWeb/Painting/InlinePaintable.h | 2 +- Userland/Libraries/LibWeb/Painting/MarkerPaintable.cpp | 4 ++-- Userland/Libraries/LibWeb/Painting/MarkerPaintable.h | 2 +- .../LibWeb/Painting/NestedBrowsingContextPaintable.cpp | 4 ++-- .../LibWeb/Painting/NestedBrowsingContextPaintable.h | 2 +- Userland/Libraries/LibWeb/Painting/Paintable.cpp | 4 ++-- Userland/Libraries/LibWeb/Painting/Paintable.h | 8 ++++---- Userland/Libraries/LibWeb/Painting/ProgressPaintable.cpp | 4 ++-- Userland/Libraries/LibWeb/Painting/ProgressPaintable.h | 2 +- .../Libraries/LibWeb/Painting/RadioButtonPaintable.cpp | 4 ++-- Userland/Libraries/LibWeb/Painting/RadioButtonPaintable.h | 2 +- .../Libraries/LibWeb/Painting/SVGGeometryPaintable.cpp | 4 ++-- Userland/Libraries/LibWeb/Painting/SVGGeometryPaintable.h | 2 +- Userland/Libraries/LibWeb/Painting/SVGGraphicsPaintable.h | 2 -- Userland/Libraries/LibWeb/Painting/SVGPaintable.h | 2 -- Userland/Libraries/LibWeb/Painting/SVGSVGPaintable.cpp | 5 +++++ Userland/Libraries/LibWeb/Painting/SVGSVGPaintable.h | 2 +- Userland/Libraries/LibWeb/Painting/TextPaintable.cpp | 7 +++++-- Userland/Libraries/LibWeb/Painting/TextPaintable.h | 2 +- 58 files changed, 94 insertions(+), 75 deletions(-) diff --git a/Userland/Libraries/LibWeb/Layout/BlockContainer.cpp b/Userland/Libraries/LibWeb/Layout/BlockContainer.cpp index 15682e69ee1..5b320da24cc 100644 --- a/Userland/Libraries/LibWeb/Layout/BlockContainer.cpp +++ b/Userland/Libraries/LibWeb/Layout/BlockContainer.cpp @@ -85,7 +85,7 @@ Painting::PaintableWithLines const* BlockContainer::paint_box() const return static_cast(Box::paint_box()); } -OwnPtr BlockContainer::create_paintable() const +RefPtr BlockContainer::create_paintable() const { return Painting::PaintableWithLines::create(*this); } diff --git a/Userland/Libraries/LibWeb/Layout/BlockContainer.h b/Userland/Libraries/LibWeb/Layout/BlockContainer.h index 737fca4fb56..5cf325d7a3b 100644 --- a/Userland/Libraries/LibWeb/Layout/BlockContainer.h +++ b/Userland/Libraries/LibWeb/Layout/BlockContainer.h @@ -31,7 +31,7 @@ public: Painting::PaintableWithLines const* paint_box() const; - virtual OwnPtr create_paintable() const override; + virtual RefPtr create_paintable() const override; private: virtual bool is_block_container() const final { return true; } diff --git a/Userland/Libraries/LibWeb/Layout/Box.cpp b/Userland/Libraries/LibWeb/Layout/Box.cpp index 2707f59106a..3c71d8bcb76 100644 --- a/Userland/Libraries/LibWeb/Layout/Box.cpp +++ b/Userland/Libraries/LibWeb/Layout/Box.cpp @@ -86,7 +86,7 @@ bool Box::is_body() const return dom_node() && dom_node() == document().body(); } -OwnPtr Box::create_paintable() const +RefPtr Box::create_paintable() const { return Painting::PaintableBox::create(*this); } diff --git a/Userland/Libraries/LibWeb/Layout/Box.h b/Userland/Libraries/LibWeb/Layout/Box.h index d99765587b8..7a13b9a4dfb 100644 --- a/Userland/Libraries/LibWeb/Layout/Box.h +++ b/Userland/Libraries/LibWeb/Layout/Box.h @@ -41,7 +41,7 @@ public: virtual void did_set_rect() { } - virtual OwnPtr create_paintable() const override; + virtual RefPtr create_paintable() const override; protected: Box(DOM::Document&, DOM::Node*, NonnullRefPtr); diff --git a/Userland/Libraries/LibWeb/Layout/ButtonBox.cpp b/Userland/Libraries/LibWeb/Layout/ButtonBox.cpp index 4c1a2dc84be..5ed1ba9a2d6 100644 --- a/Userland/Libraries/LibWeb/Layout/ButtonBox.cpp +++ b/Userland/Libraries/LibWeb/Layout/ButtonBox.cpp @@ -106,7 +106,7 @@ void ButtonBox::handle_associated_label_mousemove(Badge