From 2f51e9a98e90ea1d89d63fcb10d2b68fefca4777 Mon Sep 17 00:00:00 2001 From: Khaled Lakehal Date: Mon, 25 Nov 2024 22:40:22 +0100 Subject: [PATCH] LibWeb/HTML: Use default input size (20) when value is 0 According to the HTML specification, the `size` attribute of an input element must be a valid non-negative integer greater than zero. If the value is invalid or set to `0`, the default size of `20` should be used. This small change fixes one issue identified in https://wpt.live/html/rendering/widgets/input-text-size.html The WPT test suite was also automatically imported. --- Libraries/LibWeb/HTML/HTMLInputElement.cpp | 3 +- .../rendering/widgets/input-text-size.txt | 16 +++++++ .../rendering/widgets/input-text-size.html | 45 +++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 Tests/LibWeb/Text/expected/wpt-import/html/rendering/widgets/input-text-size.txt create mode 100644 Tests/LibWeb/Text/input/wpt-import/html/rendering/widgets/input-text-size.html diff --git a/Libraries/LibWeb/HTML/HTMLInputElement.cpp b/Libraries/LibWeb/HTML/HTMLInputElement.cpp index 0032d636804..337542a90c7 100644 --- a/Libraries/LibWeb/HTML/HTMLInputElement.cpp +++ b/Libraries/LibWeb/HTML/HTMLInputElement.cpp @@ -1863,9 +1863,10 @@ WebIDL::ExceptionOr HTMLInputElement::set_min_length(WebIDL::Long value) // https://html.spec.whatwg.org/multipage/input.html#the-size-attribute unsigned HTMLInputElement::size() const { + // The size attribute, if specified, must have a value that is a valid non-negative integer greater than zero. // The size IDL attribute is limited to only positive numbers and has a default value of 20. if (auto size_string = get_attribute(HTML::AttributeNames::size); size_string.has_value()) { - if (auto size = parse_non_negative_integer(*size_string); size.has_value()) + if (auto size = parse_non_negative_integer(*size_string); size.has_value() && size.value() != 0) return *size; } return 20; diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/rendering/widgets/input-text-size.txt b/Tests/LibWeb/Text/expected/wpt-import/html/rendering/widgets/input-text-size.txt new file mode 100644 index 00000000000..910538125a9 --- /dev/null +++ b/Tests/LibWeb/Text/expected/wpt-import/html/rendering/widgets/input-text-size.txt @@ -0,0 +1,16 @@ +Summary + +Harness status: OK + +Rerun + +Found 5 tests + +4 Pass +1 Fail +Details +Result Test Name MessagePass A misssing attribute is equivalent to size=20 +Pass An invalid attribute value is equivalent to size=20 +Pass The width depends on a size attribute +Pass Size attribute value affects layout-dependent computed style +Fail Size attribute value is not a presentational hint \ No newline at end of file diff --git a/Tests/LibWeb/Text/input/wpt-import/html/rendering/widgets/input-text-size.html b/Tests/LibWeb/Text/input/wpt-import/html/rendering/widgets/input-text-size.html new file mode 100644 index 00000000000..8b7f42aaf03 --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/html/rendering/widgets/input-text-size.html @@ -0,0 +1,45 @@ + + +Test `size` attribute behavior + + + + + + + + + + + + + + + +