LibWeb: Update (not replace) timeout values in WebDriver's Set Timeouts

Contradictory to the spec, the Set Timeouts endpoint should update the
existing timeouts configuration in-place, rather than replacing it. WPT
expects this, and other browsers already implement this endpoint this
way.
This commit is contained in:
Timothy Flynn 2024-10-11 15:15:06 -04:00 committed by Andreas Kling
parent 8396afeb76
commit dae6200c1d
Notes: github-actions[bot] 2024-10-12 13:03:32 +00:00
3 changed files with 20 additions and 7 deletions

View file

@ -31,14 +31,23 @@ JsonObject timeouts_object(TimeoutsConfiguration const& timeouts)
// https://w3c.github.io/webdriver/#dfn-deserialize-as-timeouts-configuration
ErrorOr<TimeoutsConfiguration, Error> json_deserialize_as_a_timeouts_configuration(JsonValue const& timeouts)
{
// 2. Let configuration be a new timeouts configuration.
TimeoutsConfiguration configuration {};
TRY(json_deserialize_as_a_timeouts_configuration_into(timeouts, configuration));
// 4. Return success with data configuration.
return configuration;
}
// https://w3c.github.io/webdriver/#dfn-deserialize-as-timeouts-configuration
ErrorOr<void, Error> json_deserialize_as_a_timeouts_configuration_into(JsonValue const& timeouts, TimeoutsConfiguration& configuration)
{
// 1. Set timeouts to the result of converting a JSON-derived JavaScript value to an Infra value with timeouts.
if (!timeouts.is_object())
return Error::from_code(ErrorCode::InvalidArgument, "Payload is not a JSON object");
// 2. Let configuration be a new timeouts configuration.
TimeoutsConfiguration configuration {};
// 3. For each key → value in timeouts:
TRY(timeouts.as_object().try_for_each_member([&](auto const& key, JsonValue const& value) -> ErrorOr<void, Error> {
Optional<u64> parsed_value;
@ -78,8 +87,7 @@ ErrorOr<TimeoutsConfiguration, Error> json_deserialize_as_a_timeouts_configurati
return {};
}));
// 4. Return success with data configuration.
return configuration;
return {};
}
}