From 5d885e90476dd4a39ed6fe90b56bebef12edb7b0 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Mon, 2 Oct 2023 19:30:44 +0200 Subject: [PATCH] LibWeb/Fetch: Align `is_network_error()` with the latest specification --- .../Fetch/Infrastructure/HTTP/Responses.cpp | 17 +++++++++++++++-- .../Fetch/Infrastructure/HTTP/Responses.h | 2 ++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Responses.cpp b/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Responses.cpp index 92f594e083..64b5be1f70 100644 --- a/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Responses.cpp +++ b/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Responses.cpp @@ -79,9 +79,22 @@ bool Response::is_aborted_network_error() const // https://fetch.spec.whatwg.org/#concept-network-error bool Response::is_network_error() const { - // A response whose type is "error" is known as a network error. + // A network error is a response whose type is "error", status is 0, status message is the empty byte sequence, + // header list is « », body is null, and body info is a new response body info. // NOTE: We have to use the virtual getter here to not bypass filtered responses. - return type() == Type::Error; + if (type() != Type::Error) + return false; + if (status() != 0) + return false; + if (!status_message().is_empty()) + return false; + if (!header_list()->is_empty()) + return false; + if (!body()) + return false; + if (body_info() != BodyInfo {}) + return false; + return true; } // https://fetch.spec.whatwg.org/#concept-response-url diff --git a/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Responses.h b/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Responses.h index fc7a5b2e23..a31f077dce 100644 --- a/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Responses.h +++ b/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Responses.h @@ -47,6 +47,8 @@ public: // https://fetch.spec.whatwg.org/#fetch-timing-info-decoded-body-size u64 decoded_size { 0 }; + + bool operator==(BodyInfo const&) const = default; }; [[nodiscard]] static JS::NonnullGCPtr create(JS::VM&);