LibWeb: Remove OOM propagation from Fetch::Response

This commit is contained in:
Timothy Flynn 2024-04-27 10:34:37 -04:00 committed by Andreas Kling
commit b04ef436fa
Notes: sideshowbarker 2024-07-17 06:45:52 +09:00
2 changed files with 10 additions and 16 deletions

View file

@ -87,8 +87,6 @@ JS::NonnullGCPtr<Response> Response::create(JS::Realm& realm, JS::NonnullGCPtr<I
// https://fetch.spec.whatwg.org/#initialize-a-response // https://fetch.spec.whatwg.org/#initialize-a-response
WebIDL::ExceptionOr<void> Response::initialize_response(ResponseInit const& init, Optional<Infrastructure::BodyWithType> const& body) WebIDL::ExceptionOr<void> Response::initialize_response(ResponseInit const& init, Optional<Infrastructure::BodyWithType> const& body)
{ {
auto& vm = this->vm();
// 1. If init["status"] is not in the range 200 to 599, inclusive, then throw a RangeError. // 1. If init["status"] is not in the range 200 to 599, inclusive, then throw a RangeError.
if (init.status < 200 || init.status > 599) if (init.status < 200 || init.status > 599)
return WebIDL::SimpleException { WebIDL::SimpleExceptionType::RangeError, "Status must be in range 200-599"sv }; return WebIDL::SimpleException { WebIDL::SimpleExceptionType::RangeError, "Status must be in range 200-599"sv };
@ -99,7 +97,7 @@ WebIDL::ExceptionOr<void> Response::initialize_response(ResponseInit const& init
m_response->set_status(init.status); m_response->set_status(init.status);
// 4. Set responses responses status message to init["statusText"]. // 4. Set responses responses status message to init["statusText"].
m_response->set_status_message(TRY_OR_THROW_OOM(vm, ByteBuffer::copy(init.status_text.bytes()))); m_response->set_status_message(MUST(ByteBuffer::copy(init.status_text.bytes())));
// 5. If init["headers"] exists, then fill responses headers with init["headers"]. // 5. If init["headers"] exists, then fill responses headers with init["headers"].
if (init.headers.has_value()) if (init.headers.has_value())
@ -118,7 +116,7 @@ WebIDL::ExceptionOr<void> Response::initialize_response(ResponseInit const& init
if (body->type.has_value() && m_response->header_list()->contains("Content-Type"sv.bytes())) { if (body->type.has_value() && m_response->header_list()->contains("Content-Type"sv.bytes())) {
auto header = Infrastructure::Header { auto header = Infrastructure::Header {
.name = MUST(ByteBuffer::copy("Content-Type"sv.bytes())), .name = MUST(ByteBuffer::copy("Content-Type"sv.bytes())),
.value = TRY_OR_THROW_OOM(vm, ByteBuffer::copy(body->type->span())), .value = MUST(ByteBuffer::copy(body->type->span())),
}; };
m_response->header_list()->append(move(header)); m_response->header_list()->append(move(header));
} }
@ -216,8 +214,8 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Response>> Response::json(JS::VM& vm, JS::V
// 4. Perform initialize a response given responseObject, init, and (body, "application/json"). // 4. Perform initialize a response given responseObject, init, and (body, "application/json").
auto body_with_type = Infrastructure::BodyWithType { auto body_with_type = Infrastructure::BodyWithType {
.body = move(body), .body = body,
.type = TRY_OR_THROW_OOM(vm, ByteBuffer::copy("application/json"sv.bytes())) .type = MUST(ByteBuffer::copy("application/json"sv.bytes()))
}; };
TRY(response_object->initialize_response(init, move(body_with_type))); TRY(response_object->initialize_response(init, move(body_with_type)));
@ -233,14 +231,12 @@ Bindings::ResponseType Response::type() const
} }
// https://fetch.spec.whatwg.org/#dom-response-url // https://fetch.spec.whatwg.org/#dom-response-url
WebIDL::ExceptionOr<String> Response::url() const String Response::url() const
{ {
auto& vm = this->vm();
// The url getter steps are to return the empty string if thiss responses URL is null; otherwise thiss responses URL, serialized with exclude fragment set to true. // The url getter steps are to return the empty string if thiss responses URL is null; otherwise thiss responses URL, serialized with exclude fragment set to true.
return !m_response->url().has_value() return !m_response->url().has_value()
? String {} ? String {}
: TRY_OR_THROW_OOM(vm, String::from_byte_string(m_response->url()->serialize(URL::ExcludeFragment::Yes))); : MUST(String::from_byte_string(m_response->url()->serialize(URL::ExcludeFragment::Yes)));
} }
// https://fetch.spec.whatwg.org/#dom-response-redirected // https://fetch.spec.whatwg.org/#dom-response-redirected
@ -265,12 +261,10 @@ bool Response::ok() const
} }
// https://fetch.spec.whatwg.org/#dom-response-statustext // https://fetch.spec.whatwg.org/#dom-response-statustext
WebIDL::ExceptionOr<String> Response::status_text() const String Response::status_text() const
{ {
auto& vm = this->vm();
// The statusText getter steps are to return thiss responses status message. // The statusText getter steps are to return thiss responses status message.
return TRY_OR_THROW_OOM(vm, String::from_utf8(m_response->status_message())); return MUST(String::from_utf8(m_response->status_message()));
} }
// https://fetch.spec.whatwg.org/#dom-response-headers // https://fetch.spec.whatwg.org/#dom-response-headers

View file

@ -53,11 +53,11 @@ public:
static WebIDL::ExceptionOr<JS::NonnullGCPtr<Response>> redirect(JS::VM&, String const& url, u16 status); static WebIDL::ExceptionOr<JS::NonnullGCPtr<Response>> redirect(JS::VM&, String const& url, u16 status);
static WebIDL::ExceptionOr<JS::NonnullGCPtr<Response>> json(JS::VM&, JS::Value data, ResponseInit const& init = {}); static WebIDL::ExceptionOr<JS::NonnullGCPtr<Response>> json(JS::VM&, JS::Value data, ResponseInit const& init = {});
[[nodiscard]] Bindings::ResponseType type() const; [[nodiscard]] Bindings::ResponseType type() const;
[[nodiscard]] WebIDL::ExceptionOr<String> url() const; [[nodiscard]] String url() const;
[[nodiscard]] bool redirected() const; [[nodiscard]] bool redirected() const;
[[nodiscard]] u16 status() const; [[nodiscard]] u16 status() const;
[[nodiscard]] bool ok() const; [[nodiscard]] bool ok() const;
[[nodiscard]] WebIDL::ExceptionOr<String> status_text() const; [[nodiscard]] String status_text() const;
[[nodiscard]] JS::NonnullGCPtr<Headers> headers() const; [[nodiscard]] JS::NonnullGCPtr<Headers> headers() const;
[[nodiscard]] WebIDL::ExceptionOr<JS::NonnullGCPtr<Response>> clone() const; [[nodiscard]] WebIDL::ExceptionOr<JS::NonnullGCPtr<Response>> clone() const;