From b9e0ad43587d9bdbe71866b4d81802dc2bd194ff Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Mon, 2 Oct 2023 19:19:26 +0200 Subject: [PATCH] LibWeb: Make ResourceLoader pass body and headers in error callback Pass body and headers of a failed request to callback so caller can process them. --- .../LibWeb/Fetch/Fetching/Fetching.cpp | 2 +- Userland/Libraries/LibWeb/HTML/Worker.cpp | 2 +- .../LibWeb/Loader/ResourceLoader.cpp | 24 +++++++++---------- .../Libraries/LibWeb/Loader/ResourceLoader.h | 8 +++++-- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.cpp b/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.cpp index 4fc352126f..9a5dcb8647 100644 --- a/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.cpp +++ b/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.cpp @@ -1776,7 +1776,7 @@ WebIDL::ExceptionOr> nonstandard_resource_load // FIXME: Set response status message pending_response->resolve(response); }, - [&vm, request, pending_response](auto& error, auto status_code) { + [&realm, &vm, request, pending_response](auto& error, auto status_code, auto, auto&) { dbgln_if(WEB_FETCH_DEBUG, "Fetch: ResourceLoader load for '{}' failed: {} (status {})", request->url(), error, status_code.value_or(0)); auto response = Infrastructure::Response::create(vm); // FIXME: This is ugly, ResourceLoader should tell us. diff --git a/Userland/Libraries/LibWeb/HTML/Worker.cpp b/Userland/Libraries/LibWeb/HTML/Worker.cpp index 2dd7452ce8..99292f8c66 100644 --- a/Userland/Libraries/LibWeb/HTML/Worker.cpp +++ b/Userland/Libraries/LibWeb/HTML/Worker.cpp @@ -314,7 +314,7 @@ void Worker::run_a_worker(AK::URL& url, EnvironmentSettingsObject& outside_setti // 28. Event loop: Run the responsible event loop specified by inside settings until it is destroyed. }, - [](auto&, auto) { + [](auto&, auto, auto, auto&) { dbgln_if(WEB_WORKER_DEBUG, "WebWorker: HONK! Failed to load script."); }); } diff --git a/Userland/Libraries/LibWeb/Loader/ResourceLoader.cpp b/Userland/Libraries/LibWeb/Loader/ResourceLoader.cpp index f3b13a24ac..8a0742b59b 100644 --- a/Userland/Libraries/LibWeb/Loader/ResourceLoader.cpp +++ b/Userland/Libraries/LibWeb/Loader/ResourceLoader.cpp @@ -115,7 +115,7 @@ RefPtr ResourceLoader::load_resource(Resource::Type type, LoadRequest& [=](auto data, auto& headers, auto status_code) { const_cast(*resource).did_load({}, data, headers, status_code); }, - [=](auto& error, auto status_code) { + [=](auto& error, auto status_code, auto, auto) { const_cast(*resource).did_fail({}, error, status_code); }); @@ -158,7 +158,7 @@ static void store_response_cookies(Page& page, AK::URL const& url, DeprecatedStr static size_t resource_id = 0; -void ResourceLoader::load(LoadRequest& request, Function const& response_headers, Optional status_code)> success_callback, Function status_code)> error_callback, Optional timeout, Function timeout_callback) +void ResourceLoader::load(LoadRequest& request, SuccessCallback success_callback, ErrorCallback error_callback, Optional timeout, TimeoutCallback timeout_callback) { auto& url = request.url(); request.start_timer(); @@ -188,7 +188,7 @@ void ResourceLoader::load(LoadRequest& request, Function const& response_headers, Optional status_code)> success_callback, Function status_code)> error_callback, Optional timeout, Function timeout_callback) +void ResourceLoader::load(const AK::URL& url, SuccessCallback success_callback, ErrorCallback error_callback, Optional timeout, TimeoutCallback timeout_callback) { LoadRequest request; request.set_url(url); diff --git a/Userland/Libraries/LibWeb/Loader/ResourceLoader.h b/Userland/Libraries/LibWeb/Loader/ResourceLoader.h index 07ba8d1569..624c1472ea 100644 --- a/Userland/Libraries/LibWeb/Loader/ResourceLoader.h +++ b/Userland/Libraries/LibWeb/Loader/ResourceLoader.h @@ -104,8 +104,12 @@ public: RefPtr load_resource(Resource::Type, LoadRequest&); - void load(LoadRequest&, Function const& response_headers, Optional status_code)> success_callback, Function status_code)> error_callback = nullptr, Optional timeout = {}, Function timeout_callback = nullptr); - void load(const AK::URL&, Function const& response_headers, Optional status_code)> success_callback, Function status_code)> error_callback = nullptr, Optional timeout = {}, Function timeout_callback = nullptr); + using SuccessCallback = Function const& response_headers, Optional status_code)>; + using ErrorCallback = Function status_code, ReadonlyBytes payload, HashMap const& response_headers)>; + using TimeoutCallback = Function; + + void load(LoadRequest&, SuccessCallback success_callback, ErrorCallback error_callback = nullptr, Optional timeout = {}, TimeoutCallback timeout_callback = nullptr); + void load(const AK::URL&, SuccessCallback success_callback, ErrorCallback error_callback = nullptr, Optional timeout = {}, TimeoutCallback timeout_callback = nullptr); ResourceLoaderConnector& connector() { return *m_connector; }