diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index e23f386ca0..70981a0111 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -121,6 +121,7 @@ set(SOURCES Fetch/Infrastructure/URL.cpp Fetch/Infrastructure/HTTP/Headers.cpp Fetch/Infrastructure/HTTP/Methods.cpp + Fetch/Infrastructure/HTTP/Statuses.cpp FontCache.cpp Geometry/DOMRectList.cpp HTML/AttributeNames.cpp diff --git a/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Statuses.cpp b/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Statuses.cpp new file mode 100644 index 0000000000..5bf1d0a702 --- /dev/null +++ b/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Statuses.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2022, Linus Groh + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +namespace Web::Fetch { + +// https://fetch.spec.whatwg.org/#null-body-status +bool is_null_body_status(Status status) +{ + // A null body status is a status that is 101, 103, 204, 205, or 304. + return any_of(Array { 101, 103, 204, 205, 304 }, [&](auto redirect_status) { + return status == redirect_status; + }); +} + +// https://fetch.spec.whatwg.org/#ok-status +bool is_ok_status(Status status) +{ + // An ok status is a status in the range 200 to 299, inclusive. + return status >= 200 && status <= 299; +} + +// https://fetch.spec.whatwg.org/#redirect-status +bool is_redirect_status(Status status) +{ + // A redirect status is a status that is 301, 302, 303, 307, or 308. + return any_of(Array { 301, 302, 303, 307, 308 }, [&](auto redirect_status) { + return status == redirect_status; + }); +} + +} diff --git a/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Statuses.h b/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Statuses.h new file mode 100644 index 0000000000..7815f2e144 --- /dev/null +++ b/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Statuses.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2022, Linus Groh + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace Web::Fetch { + +// https://fetch.spec.whatwg.org/#concept-status +// A status is an integer in the range 0 to 999, inclusive. +using Status = u16; + +[[nodiscard]] bool is_null_body_status(Status); +[[nodiscard]] bool is_ok_status(Status); +[[nodiscard]] bool is_redirect_status(Status); + +}