ソースを参照

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>
Shannon Booth 1 年間 前
コミット
d277ac72e6

+ 4 - 2
Userland/Libraries/LibWeb/HTML/SharedImageRequest.cpp

@@ -13,6 +13,7 @@
 #include <LibWeb/HTML/AnimatedBitmapDecodedImageData.h>
 #include <LibWeb/HTML/DecodedImageData.h>
 #include <LibWeb/HTML/SharedImageRequest.h>
+#include <LibWeb/Page/Page.h>
 #include <LibWeb/Platform/ImageCodecPlugin.h>
 #include <LibWeb/SVG/SVGDecodedImageData.h>
 
@@ -20,7 +21,7 @@ namespace Web::HTML {
 
 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();
     VERIFY(document);
@@ -32,7 +33,7 @@ JS::NonnullGCPtr<SharedImageRequest> SharedImageRequest::get_or_create(JS::Realm
     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_url(move(url))
     , m_document(document)
@@ -50,6 +51,7 @@ void SharedImageRequest::visit_edges(JS::Cell::Visitor& visitor)
     Base::visit_edges(visitor);
     visitor.visit(m_fetch_controller);
     visitor.visit(m_document);
+    visitor.visit(m_page);
     for (auto& callback : m_callbacks) {
         visitor.visit(callback.on_finish);
         visitor.visit(callback.on_fail);

+ 3 - 3
Userland/Libraries/LibWeb/HTML/SharedImageRequest.h

@@ -22,7 +22,7 @@ class SharedImageRequest : public JS::Cell {
     JS_DECLARE_ALLOCATOR(SharedImageRequest);
 
 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();
 
@@ -43,7 +43,7 @@ public:
     virtual void visit_edges(JS::Cell::Visitor&) override;
 
 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_failed_fetch();
@@ -57,7 +57,7 @@ private:
 
     State m_state { State::New };
 
-    Page& m_page;
+    JS::NonnullGCPtr<Page> m_page;
 
     struct Callbacks {
         JS::GCPtr<JS::HeapFunction<void()>> on_finish;