diff --git a/Userland/Libraries/LibWeb/Loader/ResourceLoader.cpp b/Userland/Libraries/LibWeb/Loader/ResourceLoader.cpp index 312f8e6db1..54b20a2b78 100644 --- a/Userland/Libraries/LibWeb/Loader/ResourceLoader.cpp +++ b/Userland/Libraries/LibWeb/Loader/ResourceLoader.cpp @@ -191,7 +191,8 @@ void ResourceLoader::load(LoadRequest& request, Functionon_buffered_request_finish = [this, success_callback = move(success_callback), error_callback = move(error_callback), log_success, log_failure, request, protocol_request](bool success, auto, auto& response_headers, auto status_code, ReadonlyBytes payload) { + m_active_requests.set(*protocol_request); + protocol_request->on_buffered_request_finish = [this, success_callback = move(success_callback), error_callback = move(error_callback), log_success, log_failure, request, &protocol_request = *protocol_request](bool success, auto, auto& response_headers, auto status_code, ReadonlyBytes payload) { --m_pending_loads; if (on_load_counter_change) on_load_counter_change(); @@ -202,12 +203,11 @@ void ResourceLoader::load(LoadRequest& request, Function(*protocol_request).on_buffered_request_finish = nullptr; - }); success_callback(payload, response_headers, status_code); log_success(request); + deferred_invoke([this, &protocol_request] { + m_active_requests.remove(protocol_request); + }); }; protocol_request->set_should_buffer_all_input(true); protocol_request->on_certificate_requested = []() -> Protocol::Request::CertificateAndKey { diff --git a/Userland/Libraries/LibWeb/Loader/ResourceLoader.h b/Userland/Libraries/LibWeb/Loader/ResourceLoader.h index 062a7917dc..0e2ffeec72 100644 --- a/Userland/Libraries/LibWeb/Loader/ResourceLoader.h +++ b/Userland/Libraries/LibWeb/Loader/ResourceLoader.h @@ -13,6 +13,7 @@ namespace Protocol { class RequestClient; +class Request; } namespace Web { @@ -53,6 +54,7 @@ private: int m_pending_loads { 0 }; + HashTable> m_active_requests; RefPtr m_protocol_client; String m_user_agent; };