LibWeb/Fetch: Support setting request priority from JS

This commit is contained in:
Jamie Mansfield 2024-05-04 00:17:24 +01:00 committed by Andrew Kaster
parent 4387d12159
commit 74d90338b1
Notes: sideshowbarker 2024-07-17 06:24:08 +09:00
6 changed files with 23 additions and 1 deletions

View File

@ -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) {

View File

@ -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<Infrastructure::Request::Destination> const&);

View File

@ -383,7 +383,9 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Request>> 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 thiss request to request.
// NOTE: This is done at the beginning as the 'this' value Request object

View File

@ -37,6 +37,7 @@ struct RequestInit {
Optional<bool> keepalive;
Optional<JS::GCPtr<DOM::AbortSignal>> signal;
Optional<Bindings::RequestDuplex> duplex;
Optional<Bindings::RequestPriority> priority;
Optional<JS::Value> 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());
}
};

View File

@ -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 {

View File

@ -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;