diff --git a/Userland/Libraries/LibWeb/Fetch/Enums.cpp b/Userland/Libraries/LibWeb/Fetch/Enums.cpp index 25377d17dda..0ed77a8779c 100644 --- a/Userland/Libraries/LibWeb/Fetch/Enums.cpp +++ b/Userland/Libraries/LibWeb/Fetch/Enums.cpp @@ -113,6 +113,20 @@ Infrastructure::Request::RedirectMode from_bindings_enum(Bindings::RequestRedire } } +Infrastructure::Request::Priority from_bindings_enum(Bindings::RequestPriority request_priority) +{ + switch (request_priority) { + case Bindings::RequestPriority::High: + return Infrastructure::Request::Priority::High; + case Bindings::RequestPriority::Low: + return Infrastructure::Request::Priority::Low; + case Bindings::RequestPriority::Auto: + return Infrastructure::Request::Priority::Auto; + default: + VERIFY_NOT_REACHED(); + } +} + Bindings::ReferrerPolicy to_bindings_enum(ReferrerPolicy::ReferrerPolicy referrer_policy) { switch (referrer_policy) { diff --git a/Userland/Libraries/LibWeb/Fetch/Enums.h b/Userland/Libraries/LibWeb/Fetch/Enums.h index 8e559a81979..bb4f6022f43 100644 --- a/Userland/Libraries/LibWeb/Fetch/Enums.h +++ b/Userland/Libraries/LibWeb/Fetch/Enums.h @@ -18,6 +18,7 @@ namespace Web::Fetch { [[nodiscard]] Infrastructure::Request::CredentialsMode from_bindings_enum(Bindings::RequestCredentials); [[nodiscard]] Infrastructure::Request::CacheMode from_bindings_enum(Bindings::RequestCache); [[nodiscard]] Infrastructure::Request::RedirectMode from_bindings_enum(Bindings::RequestRedirect); +[[nodiscard]] Infrastructure::Request::Priority from_bindings_enum(Bindings::RequestPriority); [[nodiscard]] Bindings::ReferrerPolicy to_bindings_enum(ReferrerPolicy::ReferrerPolicy); [[nodiscard]] Bindings::RequestDestination to_bindings_enum(Optional const&); diff --git a/Userland/Libraries/LibWeb/Fetch/Request.cpp b/Userland/Libraries/LibWeb/Fetch/Request.cpp index a85ff840fb9..ced3ef5c1a5 100644 --- a/Userland/Libraries/LibWeb/Fetch/Request.cpp +++ b/Userland/Libraries/LibWeb/Fetch/Request.cpp @@ -383,7 +383,9 @@ WebIDL::ExceptionOr> Request::construct_impl(JS::Realm if (init.signal.has_value()) input_signal = *init.signal; - // FIXME: 27. If init["priority"] exists, then: + // 27. If init["priority"] exists, then: + if (init.priority.has_value()) + request->set_priority(from_bindings_enum(*init.priority)); // 28. Set this’s request to request. // NOTE: This is done at the beginning as the 'this' value Request object diff --git a/Userland/Libraries/LibWeb/Fetch/Request.h b/Userland/Libraries/LibWeb/Fetch/Request.h index 064fef649dd..eac7663ded7 100644 --- a/Userland/Libraries/LibWeb/Fetch/Request.h +++ b/Userland/Libraries/LibWeb/Fetch/Request.h @@ -37,6 +37,7 @@ struct RequestInit { Optional keepalive; Optional> signal; Optional duplex; + Optional priority; Optional window; // https://infra.spec.whatwg.org/#map-is-empty @@ -55,6 +56,7 @@ struct RequestInit { || keepalive.has_value() || signal.has_value() || duplex.has_value() + || priority.has_value() || window.has_value()); } }; diff --git a/Userland/Libraries/LibWeb/Fetch/Request.idl b/Userland/Libraries/LibWeb/Fetch/Request.idl index 1916d737d32..e04eac710fe 100644 --- a/Userland/Libraries/LibWeb/Fetch/Request.idl +++ b/Userland/Libraries/LibWeb/Fetch/Request.idl @@ -46,6 +46,7 @@ dictionary RequestInit { boolean keepalive; AbortSignal? signal; RequestDuplex duplex; + RequestPriority priority; any window; // can only be set to null }; @@ -55,6 +56,7 @@ enum RequestCredentials { "omit", "same-origin", "include" }; enum RequestCache { "default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached" }; enum RequestRedirect { "follow", "error", "manual" }; enum RequestDuplex { "half" }; +enum RequestPriority { "high", "low", "auto" }; // https://w3c.github.io/webappsec-referrer-policy/#enumdef-referrerpolicy enum ReferrerPolicy { diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 0bfadeb8aaa..8daa2e66cf0 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -61,6 +61,7 @@ enum class RequestCredentials; enum class RequestDestination; enum class RequestDuplex; enum class RequestMode; +enum class RequestPriority; enum class RequestRedirect; enum class ResizeObserverBoxOptions; enum class ResponseType;