mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-01 08:48:49 +00:00
LibWeb: Add “valid floating-point number” for HTMLInputElement.value
This change adds checking for the following spec requirements: - https://html.spec.whatwg.org/#number-state-(type=number):value-sanitization-algorithm - https://html.spec.whatwg.org/#range-state-(type=range):value-sanitization-algorithm That is, it adds checking that HTMLInputElement.value is what the spec defines as a “valid floating-point number” when the “type” attribute for the HTMLInputElement is either “number” or “range”. This change causes Ladybird to pass all the failing tests at https://wpt.fyi/results/html/semantics/forms/the-input-element/number.html?run_id=5080423051034624 and to match the relevant behavior in Webkit, Blink, and Gecko. Otherwise, without this change, Ladybird fails those tests, and the relevant Ladybird behavior isn’t interoperable with other engines.
This commit is contained in:
parent
edf0d9b7bb
commit
e76e48421f
Notes:
github-actions[bot]
2024-08-28 11:50:13 +00:00
Author: https://github.com/sideshowbarker
Commit: e76e48421f
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1204
Reviewed-by: https://github.com/trflynn89
4 changed files with 72 additions and 2 deletions
|
@ -1373,8 +1373,14 @@ String HTMLInputElement::value_sanitization_algorithm(String const& value) const
|
|||
return MUST(String::from_utf8(builder.string_view().trim(Infra::ASCII_WHITESPACE)));
|
||||
}
|
||||
} else if (type_state() == HTMLInputElement::TypeAttributeState::Number) {
|
||||
// If the value of the element is not a valid floating-point number, then set it to the empty string instead.
|
||||
// https://html.spec.whatwg.org/multipage/input.html#number-state-(type=number):value-sanitization-algorithm
|
||||
// If the value of the element is not a valid floating-point number, then set it
|
||||
// to the empty string instead.
|
||||
if (!is_valid_floating_point_number(value))
|
||||
return String {};
|
||||
auto maybe_value = parse_floating_point_number(value);
|
||||
// AD-HOC: The spec doesn’t require these checks — but other engines do them, and
|
||||
// there’s a WPT case which tests that the value is less than Number.MAX_VALUE.
|
||||
if (!maybe_value.has_value() || !isfinite(maybe_value.value()))
|
||||
return String {};
|
||||
} else if (type_state() == HTMLInputElement::TypeAttributeState::Date) {
|
||||
|
@ -1402,7 +1408,9 @@ String HTMLInputElement::value_sanitization_algorithm(String const& value) const
|
|||
// https://html.spec.whatwg.org/multipage/input.html#range-state-(type=range):value-sanitization-algorithm
|
||||
// If the value of the element is not a valid floating-point number, then set it to the best representation, as a floating-point number, of the default value.
|
||||
auto maybe_value = parse_floating_point_number(value);
|
||||
if (!maybe_value.has_value() || !isfinite(maybe_value.value())) {
|
||||
if (!is_valid_floating_point_number(value) ||
|
||||
// AD-HOC: The spec doesn’t require these checks — but other engines do them.
|
||||
!maybe_value.has_value() || !isfinite(maybe_value.value())) {
|
||||
// The default value is the minimum plus half the difference between the minimum and the maximum, unless the maximum is less than the minimum, in which case the default value is the minimum.
|
||||
auto minimum = *min();
|
||||
auto maximum = *max();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue