From d4927b94de5541c387a95c46819b31ad52ac5b8f Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Sat, 20 Dec 2025 07:50:42 -0500 Subject: [PATCH] LibWeb: Make fewer copies of GC::Root fetch callbacks --- Libraries/LibWeb/Loader/ResourceLoader.cpp | 24 ++++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Libraries/LibWeb/Loader/ResourceLoader.cpp b/Libraries/LibWeb/Loader/ResourceLoader.cpp index 42cf2f9bea..970c30cf73 100644 --- a/Libraries/LibWeb/Loader/ResourceLoader.cpp +++ b/Libraries/LibWeb/Loader/ResourceLoader.cpp @@ -361,19 +361,21 @@ void ResourceLoader::load(LoadRequest& request, GC::Root on_h } if (url.scheme() == "about"sv) { - handle_about_load_request(request, [on_headers_received, on_data_received, on_complete, request](ReadonlyBytes data, Requests::RequestTimingInfo const& timing_info, HTTP::HeaderList const& response_headers) { - log_success(request); - on_headers_received->function()(response_headers, {}, {}); - on_data_received->function()(data); - on_complete->function()(true, timing_info, {}); - }); + handle_about_load_request( + request, + [on_headers_received = move(on_headers_received), on_data_received = move(on_data_received), on_complete = move(on_complete), request](ReadonlyBytes data, Requests::RequestTimingInfo const& timing_info, HTTP::HeaderList const& response_headers) { + log_success(request); + on_headers_received->function()(response_headers, {}, {}); + on_data_received->function()(data); + on_complete->function()(true, timing_info, {}); + }); return; } if (url.scheme() == "resource"sv) { handle_resource_load_request( request, - [on_headers_received, on_data_received, on_complete](FileLoadResult const& load_result) { + [on_headers_received = move(on_headers_received), on_data_received = move(on_data_received), on_complete](FileLoadResult const& load_result) { on_headers_received->function()(load_result.response_headers, {}, {}); on_data_received->function()(load_result.data); on_complete->function()(true, load_result.timing_info, {}); @@ -388,7 +390,7 @@ void ResourceLoader::load(LoadRequest& request, GC::Root on_h if (url.scheme() == "file"sv) { handle_file_load_request( request, - [request, on_headers_received, on_data_received, on_complete](FileLoadResult const& load_result) { + [request, on_headers_received = move(on_headers_received), on_data_received = move(on_data_received), on_complete](FileLoadResult const& load_result) { log_success(request); on_headers_received->function()(load_result.response_headers, {}, {}); on_data_received->function()(load_result.data); @@ -415,16 +417,16 @@ void ResourceLoader::load(LoadRequest& request, GC::Root on_h return; } - auto protocol_headers_received = [this, on_headers_received, request](auto const& response_headers, auto status_code, auto const& reason_phrase) { + auto protocol_headers_received = [this, on_headers_received = move(on_headers_received), request](auto const& response_headers, auto status_code, auto const& reason_phrase) { handle_network_response_headers(request, response_headers); on_headers_received->function()(response_headers, move(status_code), reason_phrase); }; - auto protocol_data_received = [on_data_received](auto data) { + auto protocol_data_received = [on_data_received = move(on_data_received)](auto data) { on_data_received->function()(data); }; - auto protocol_complete = [this, on_complete, request, &protocol_request = *protocol_request](u64, Requests::RequestTimingInfo const& timing_info, Optional const& network_error) { + auto protocol_complete = [this, on_complete = move(on_complete), request, &protocol_request = *protocol_request](u64, Requests::RequestTimingInfo const& timing_info, Optional const& network_error) { finish_network_request(protocol_request); if (!network_error.has_value()) {