diff --git a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp index 8fed960774d..e920932ce75 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp @@ -391,7 +391,7 @@ public: { } - void enqueue(JS::SafeFunction callback) + void enqueue(JS::Handle> callback) { // NOTE: We don't want to flush the queue on every image load, since that would be slow. // However, we don't want to keep growing the batch forever either. @@ -407,11 +407,11 @@ private: { auto queue = move(m_queue); for (auto& callback : queue) - callback(); + callback->function()(); } NonnullRefPtr m_timer; - Vector> m_queue; + Vector>> m_queue; }; static BatchingDispatcher& batching_dispatcher() @@ -676,7 +676,7 @@ void HTMLImageElement::add_callbacks_to_image_request(JS::NonnullGCPtradd_callbacks( [this, image_request, maybe_omit_events, url_string, previous_url]() { - batching_dispatcher().enqueue([this, image_request, maybe_omit_events, url_string, previous_url] { + batching_dispatcher().enqueue(JS::create_heap_function(realm().heap(), [this, image_request, maybe_omit_events, url_string, previous_url] { VERIFY(image_request->shared_resource_request()); auto image_data = image_request->shared_resource_request()->image_data(); image_request->set_image_data(image_data); @@ -715,7 +715,7 @@ void HTMLImageElement::add_callbacks_to_image_request(JS::NonnullGCPtradd_callbacks( - [step_15, selected_source = selected_source.value(), image_request, key]() mutable { + [this, step_15, selected_source = selected_source.value(), image_request, key]() mutable { // 6. If response's unsafe response is a network error // NOTE: This is handled in the second callback below. @@ -884,14 +884,14 @@ void HTMLImageElement::react_to_changes_in_the_environment() // then let pending request be null and abort these steps. - batching_dispatcher().enqueue([step_15, selected_source = move(selected_source), image_request, key] { + batching_dispatcher().enqueue(JS::create_heap_function(realm().heap(), [step_15, selected_source = move(selected_source), image_request, key] { // 7. Otherwise, response's unsafe response is image request's image data. It can be either CORS-same-origin // or CORS-cross-origin; this affects the image's interaction with other APIs (e.g., when used on a canvas). VERIFY(image_request->shared_resource_request()); auto image_data = image_request->shared_resource_request()->image_data(); image_request->set_image_data(image_data); step_15(selected_source, image_request, key, *image_data); - }); + })); }, [this]() { // 6. If response's unsafe response is a network error