From 8edade071d5d404f40b0056e71e2161868951ed8 Mon Sep 17 00:00:00 2001 From: Adam Hodgen Date: Thu, 17 Feb 2022 21:22:36 +0000 Subject: [PATCH] LibWeb: Reflect only known values for element's type attribute --- .../LibWeb/HTML/HTMLInputElement.cpp | 16 +++++++++--- .../Libraries/LibWeb/HTML/HTMLInputElement.h | 26 +++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp index abeece9e81..06a80791a2 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2018-2022, Andreas Kling + * Copyright (c) 2022, Adam Hodgen * * SPDX-License-Identifier: BSD-2-Clause */ @@ -229,11 +230,18 @@ void HTMLInputElement::did_remove_attribute(FlyString const& name) String HTMLInputElement::type() const { - // FIXME: This should only reflect known values. auto value = attribute(HTML::AttributeNames::type); - if (value.is_null()) - return "text"; - return value; + +#define __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(keyword) \ + if (value.equals_ignoring_case(#keyword)) \ + return #keyword; + ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTES +#undef __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE + + // The missing value default and the invalid value default are the Text state. + // https://html.spec.whatwg.org/multipage/input.html#the-input-element:missing-value-default + // https://html.spec.whatwg.org/multipage/input.html#the-input-element:invalid-value-default + return "text"; } void HTMLInputElement::set_type(String const& type) diff --git a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.h b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.h index 2b1302affb..9b8b2be17c 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2018-2022, Andreas Kling + * Copyright (c) 2022, Adam Hodgen * * SPDX-License-Identifier: BSD-2-Clause */ @@ -11,6 +12,31 @@ namespace Web::HTML { +// https://html.spec.whatwg.org/multipage/input.html#attr-input-type +#define ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTES \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(hidden) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(text) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(search) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(tel) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(url) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(email) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(password) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(date) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(month) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(week) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(time) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE("datetime-local") \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(number) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(range) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(color) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(checkbox) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(radio) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(file) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(submit) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(image) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(reset) \ + __ENUMERATE_HTML_INPUT_TYPE_ATTRIBUTE(button) + class HTMLInputElement final : public FormAssociatedElement { public: using WrapperType = Bindings::HTMLInputElementWrapper;