1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-24 03:35:07 +00:00

LibWeb: Make SharedImageRequest store Page member as NonnullGCPtr

This allows us to remove one raw Web::Page& member. Or rather, it
becomes a JS::NonnullGCPtr that we trace like anything else. :^)

Co-Authored-By: Andreas Kling <kling@serenityos.org>
This commit is contained in:
Shannon Booth 2023-12-04 21:59:00 +13:00 committed by Andreas Kling
parent 0ae5c070c7
commit d277ac72e6
2 changed files with 7 additions and 5 deletions

View file

@ -13,6 +13,7 @@
#include <LibWeb/HTML/AnimatedBitmapDecodedImageData.h> #include <LibWeb/HTML/AnimatedBitmapDecodedImageData.h>
#include <LibWeb/HTML/DecodedImageData.h> #include <LibWeb/HTML/DecodedImageData.h>
#include <LibWeb/HTML/SharedImageRequest.h> #include <LibWeb/HTML/SharedImageRequest.h>
#include <LibWeb/Page/Page.h>
#include <LibWeb/Platform/ImageCodecPlugin.h> #include <LibWeb/Platform/ImageCodecPlugin.h>
#include <LibWeb/SVG/SVGDecodedImageData.h> #include <LibWeb/SVG/SVGDecodedImageData.h>
@ -20,7 +21,7 @@ namespace Web::HTML {
JS_DEFINE_ALLOCATOR(SharedImageRequest); JS_DEFINE_ALLOCATOR(SharedImageRequest);
JS::NonnullGCPtr<SharedImageRequest> SharedImageRequest::get_or_create(JS::Realm& realm, Page& page, AK::URL const& url) JS::NonnullGCPtr<SharedImageRequest> SharedImageRequest::get_or_create(JS::Realm& realm, JS::NonnullGCPtr<Page> page, AK::URL const& url)
{ {
auto document = Bindings::host_defined_environment_settings_object(realm).responsible_document(); auto document = Bindings::host_defined_environment_settings_object(realm).responsible_document();
VERIFY(document); VERIFY(document);
@ -32,7 +33,7 @@ JS::NonnullGCPtr<SharedImageRequest> SharedImageRequest::get_or_create(JS::Realm
return request; return request;
} }
SharedImageRequest::SharedImageRequest(Page& page, AK::URL url, JS::NonnullGCPtr<DOM::Document> document) SharedImageRequest::SharedImageRequest(JS::NonnullGCPtr<Page> page, AK::URL url, JS::NonnullGCPtr<DOM::Document> document)
: m_page(page) : m_page(page)
, m_url(move(url)) , m_url(move(url))
, m_document(document) , m_document(document)
@ -50,6 +51,7 @@ void SharedImageRequest::visit_edges(JS::Cell::Visitor& visitor)
Base::visit_edges(visitor); Base::visit_edges(visitor);
visitor.visit(m_fetch_controller); visitor.visit(m_fetch_controller);
visitor.visit(m_document); visitor.visit(m_document);
visitor.visit(m_page);
for (auto& callback : m_callbacks) { for (auto& callback : m_callbacks) {
visitor.visit(callback.on_finish); visitor.visit(callback.on_finish);
visitor.visit(callback.on_fail); visitor.visit(callback.on_fail);

View file

@ -22,7 +22,7 @@ class SharedImageRequest : public JS::Cell {
JS_DECLARE_ALLOCATOR(SharedImageRequest); JS_DECLARE_ALLOCATOR(SharedImageRequest);
public: public:
[[nodiscard]] static JS::NonnullGCPtr<SharedImageRequest> get_or_create(JS::Realm&, Page&, AK::URL const&); [[nodiscard]] static JS::NonnullGCPtr<SharedImageRequest> get_or_create(JS::Realm&, JS::NonnullGCPtr<Page>, AK::URL const&);
~SharedImageRequest(); ~SharedImageRequest();
@ -43,7 +43,7 @@ public:
virtual void visit_edges(JS::Cell::Visitor&) override; virtual void visit_edges(JS::Cell::Visitor&) override;
private: private:
explicit SharedImageRequest(Page&, AK::URL, JS::NonnullGCPtr<DOM::Document>); explicit SharedImageRequest(JS::NonnullGCPtr<Page>, AK::URL, JS::NonnullGCPtr<DOM::Document>);
void handle_successful_fetch(AK::URL const&, StringView mime_type, ByteBuffer data); void handle_successful_fetch(AK::URL const&, StringView mime_type, ByteBuffer data);
void handle_failed_fetch(); void handle_failed_fetch();
@ -57,7 +57,7 @@ private:
State m_state { State::New }; State m_state { State::New };
Page& m_page; JS::NonnullGCPtr<Page> m_page;
struct Callbacks { struct Callbacks {
JS::GCPtr<JS::HeapFunction<void()>> on_finish; JS::GCPtr<JS::HeapFunction<void()>> on_finish;