From e79319ad85da401cee940b5b9cf52a044373544f Mon Sep 17 00:00:00 2001 From: sideshowbarker Date: Tue, 25 Feb 2025 17:43:11 +0900 Subject: [PATCH] LibWeb: Implement the form-control willValidate property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change — part of the HTML constraint-validation API (aka “client-side form validation”) — implements the willValidate IDL/DOM attribute/property for all form controls that support it. --- Libraries/LibWeb/HTML/HTMLButtonElement.cpp | 7 ++ Libraries/LibWeb/HTML/HTMLButtonElement.h | 2 + Libraries/LibWeb/HTML/HTMLButtonElement.idl | 2 +- Libraries/LibWeb/HTML/HTMLFieldSetElement.cpp | 11 +++ Libraries/LibWeb/HTML/HTMLFieldSetElement.h | 2 + Libraries/LibWeb/HTML/HTMLFieldSetElement.idl | 2 +- Libraries/LibWeb/HTML/HTMLInputElement.cpp | 7 ++ Libraries/LibWeb/HTML/HTMLInputElement.h | 1 + Libraries/LibWeb/HTML/HTMLInputElement.idl | 2 +- Libraries/LibWeb/HTML/HTMLObjectElement.cpp | 11 +++ Libraries/LibWeb/HTML/HTMLObjectElement.h | 2 + Libraries/LibWeb/HTML/HTMLObjectElement.idl | 2 +- Libraries/LibWeb/HTML/HTMLOutputElement.cpp | 11 +++ Libraries/LibWeb/HTML/HTMLOutputElement.h | 2 + Libraries/LibWeb/HTML/HTMLOutputElement.idl | 2 +- Libraries/LibWeb/HTML/HTMLSelectElement.cpp | 7 ++ Libraries/LibWeb/HTML/HTMLSelectElement.h | 2 + Libraries/LibWeb/HTML/HTMLSelectElement.idl | 2 +- Libraries/LibWeb/HTML/HTMLTextAreaElement.cpp | 7 ++ Libraries/LibWeb/HTML/HTMLTextAreaElement.h | 1 + Libraries/LibWeb/HTML/HTMLTextAreaElement.idl | 2 +- .../form-validation-willValidate.txt | 78 +++++++++++++++ ...select-willvalidate-readonly-attribute.txt | 4 +- .../form-validation-willValidate.html | 96 +++++++++++++++++++ 24 files changed, 256 insertions(+), 9 deletions(-) create mode 100644 Tests/LibWeb/Text/expected/wpt-import/html/semantics/forms/constraints/form-validation-willValidate.txt create mode 100644 Tests/LibWeb/Text/input/wpt-import/html/semantics/forms/constraints/form-validation-willValidate.html diff --git a/Libraries/LibWeb/HTML/HTMLButtonElement.cpp b/Libraries/LibWeb/HTML/HTMLButtonElement.cpp index e4fbcc9a7cb..f5bfe431938 100644 --- a/Libraries/LibWeb/HTML/HTMLButtonElement.cpp +++ b/Libraries/LibWeb/HTML/HTMLButtonElement.cpp @@ -156,6 +156,13 @@ void HTMLButtonElement::activation_behavior(DOM::Event const& event) PopoverInvokerElement::popover_target_activation_behaviour(*this, as(*event.target())); } +// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-cva-willvalidate +bool HTMLButtonElement::will_validate() +{ + // The willValidate attribute's getter must return true, if this element is a candidate for constraint validation + return is_candidate_for_constraint_validation(); +} + bool HTMLButtonElement::is_focusable() const { return enabled(); diff --git a/Libraries/LibWeb/HTML/HTMLButtonElement.h b/Libraries/LibWeb/HTML/HTMLButtonElement.h index 3a239914a82..831256ac816 100644 --- a/Libraries/LibWeb/HTML/HTMLButtonElement.h +++ b/Libraries/LibWeb/HTML/HTMLButtonElement.h @@ -44,6 +44,8 @@ public: virtual void form_associated_element_attribute_changed(FlyString const& name, Optional const& value, Optional const& namespace_) override; + bool will_validate(); + // ^EventTarget // https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute:the-button-element // https://html.spec.whatwg.org/multipage/interaction.html#focusable-area diff --git a/Libraries/LibWeb/HTML/HTMLButtonElement.idl b/Libraries/LibWeb/HTML/HTMLButtonElement.idl index 65e6fba987e..7a691f0733f 100644 --- a/Libraries/LibWeb/HTML/HTMLButtonElement.idl +++ b/Libraries/LibWeb/HTML/HTMLButtonElement.idl @@ -26,7 +26,7 @@ interface HTMLButtonElement : HTMLElement { [CEReactions, ImplementedAs=type_for_bindings, Enumerated=ButtonTypeState] attribute DOMString type; [CEReactions, Reflect] attribute DOMString value; - [FIXME] readonly attribute boolean willValidate; + readonly attribute boolean willValidate; readonly attribute ValidityState validity; [FIXME] readonly attribute DOMString validationMessage; [FIXME] boolean checkValidity(); diff --git a/Libraries/LibWeb/HTML/HTMLFieldSetElement.cpp b/Libraries/LibWeb/HTML/HTMLFieldSetElement.cpp index 57e07f7b698..38a72357f0c 100644 --- a/Libraries/LibWeb/HTML/HTMLFieldSetElement.cpp +++ b/Libraries/LibWeb/HTML/HTMLFieldSetElement.cpp @@ -88,4 +88,15 @@ GC::Ptr HTMLFieldSetElement::create_layout_node(GC::Ref(document(), *this, style); } +// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-cva-willvalidate +bool HTMLFieldSetElement::will_validate() +{ + // The willValidate attribute's getter must return true, if this element is a candidate for constraint validation, + // and false otherwise (i.e., false if any conditions are barring it from constraint validation). + // A submittable element is a candidate for constraint validation + // https://html.spec.whatwg.org/multipage/forms.html#category-submit + // Submittable elements: button, input, select, textarea, form-associated custom elements [but not fieldset] + return false; +} + } diff --git a/Libraries/LibWeb/HTML/HTMLFieldSetElement.h b/Libraries/LibWeb/HTML/HTMLFieldSetElement.h index de7d57dcf4e..fa60703acf7 100644 --- a/Libraries/LibWeb/HTML/HTMLFieldSetElement.h +++ b/Libraries/LibWeb/HTML/HTMLFieldSetElement.h @@ -42,6 +42,8 @@ public: virtual Optional default_role() const override { return ARIA::Role::group; } + static bool will_validate(); + virtual GC::Ptr create_layout_node(GC::Ref) override; Layout::FieldSetBox* layout_node(); Layout::FieldSetBox const* layout_node() const; diff --git a/Libraries/LibWeb/HTML/HTMLFieldSetElement.idl b/Libraries/LibWeb/HTML/HTMLFieldSetElement.idl index 494619e5761..7bdf58c0f55 100644 --- a/Libraries/LibWeb/HTML/HTMLFieldSetElement.idl +++ b/Libraries/LibWeb/HTML/HTMLFieldSetElement.idl @@ -14,7 +14,7 @@ interface HTMLFieldSetElement : HTMLElement { [SameObject] readonly attribute HTMLCollection elements; - [FIXME] readonly attribute boolean willValidate; + readonly attribute boolean willValidate; [FIXME, SameObject] readonly attribute ValidityState validity; [FIXME] readonly attribute DOMString validationMessage; [FIXME] boolean checkValidity(); diff --git a/Libraries/LibWeb/HTML/HTMLInputElement.cpp b/Libraries/LibWeb/HTML/HTMLInputElement.cpp index ebd935764f7..e934a865657 100644 --- a/Libraries/LibWeb/HTML/HTMLInputElement.cpp +++ b/Libraries/LibWeb/HTML/HTMLInputElement.cpp @@ -2523,6 +2523,13 @@ WebIDL::ExceptionOr HTMLInputElement::step_up_or_down(bool is_down, WebIDL return {}; } +// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-cva-willvalidate +bool HTMLInputElement::will_validate() +{ + // The willValidate attribute's getter must return true, if this element is a candidate for constraint validation + return is_candidate_for_constraint_validation(); +} + // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-cva-checkvalidity WebIDL::ExceptionOr HTMLInputElement::check_validity() { diff --git a/Libraries/LibWeb/HTML/HTMLInputElement.h b/Libraries/LibWeb/HTML/HTMLInputElement.h index 9e0993aae9a..f67d47f647b 100644 --- a/Libraries/LibWeb/HTML/HTMLInputElement.h +++ b/Libraries/LibWeb/HTML/HTMLInputElement.h @@ -149,6 +149,7 @@ public: WebIDL::ExceptionOr step_up(WebIDL::Long n = 1); WebIDL::ExceptionOr step_down(WebIDL::Long n = 1); + bool will_validate(); WebIDL::ExceptionOr check_validity(); WebIDL::ExceptionOr report_validity(); diff --git a/Libraries/LibWeb/HTML/HTMLInputElement.idl b/Libraries/LibWeb/HTML/HTMLInputElement.idl index c308e5f36b7..fd8df9cf980 100644 --- a/Libraries/LibWeb/HTML/HTMLInputElement.idl +++ b/Libraries/LibWeb/HTML/HTMLInputElement.idl @@ -51,7 +51,7 @@ interface HTMLInputElement : HTMLElement { undefined stepUp(optional long n = 1); undefined stepDown(optional long n = 1); - [FIXME] readonly attribute boolean willValidate; + readonly attribute boolean willValidate; readonly attribute ValidityState validity; [FIXME] readonly attribute DOMString validationMessage; boolean checkValidity(); diff --git a/Libraries/LibWeb/HTML/HTMLObjectElement.cpp b/Libraries/LibWeb/HTML/HTMLObjectElement.cpp index 5d5d1e25eac..38937d316e0 100644 --- a/Libraries/LibWeb/HTML/HTMLObjectElement.cpp +++ b/Libraries/LibWeb/HTML/HTMLObjectElement.cpp @@ -79,6 +79,17 @@ void HTMLObjectElement::visit_edges(Cell::Visitor& visitor) visitor.visit(m_document_observer); } +// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-cva-willvalidate +bool HTMLObjectElement::will_validate() +{ + // The willValidate attribute's getter must return true, if this element is a candidate for constraint validation, + // and false otherwise (i.e., false if any conditions are barring it from constraint validation). + // A submittable element is a candidate for constraint validation + // https://html.spec.whatwg.org/multipage/forms.html#category-submit + // Submittable elements: button, input, select, textarea, form-associated custom elements [but not object] + return false; +} + void HTMLObjectElement::form_associated_element_attribute_changed(FlyString const& name, Optional const&, Optional const&) { // https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element diff --git a/Libraries/LibWeb/HTML/HTMLObjectElement.h b/Libraries/LibWeb/HTML/HTMLObjectElement.h index c165a10a700..ccecc5e1b31 100644 --- a/Libraries/LibWeb/HTML/HTMLObjectElement.h +++ b/Libraries/LibWeb/HTML/HTMLObjectElement.h @@ -47,6 +47,8 @@ public: virtual void visit_edges(Cell::Visitor&) override; + static bool will_validate(); + private: HTMLObjectElement(DOM::Document&, DOM::QualifiedName); diff --git a/Libraries/LibWeb/HTML/HTMLObjectElement.idl b/Libraries/LibWeb/HTML/HTMLObjectElement.idl index dc10637152e..c91494d5483 100644 --- a/Libraries/LibWeb/HTML/HTMLObjectElement.idl +++ b/Libraries/LibWeb/HTML/HTMLObjectElement.idl @@ -18,7 +18,7 @@ interface HTMLObjectElement : HTMLElement { readonly attribute WindowProxy? contentWindow; Document? getSVGDocument(); - [FIXME] readonly attribute boolean willValidate; + readonly attribute boolean willValidate; readonly attribute ValidityState validity; [FIXME] readonly attribute DOMString validationMessage; [FIXME] boolean checkValidity(); diff --git a/Libraries/LibWeb/HTML/HTMLOutputElement.cpp b/Libraries/LibWeb/HTML/HTMLOutputElement.cpp index dae7cfa3cb7..2d226823705 100644 --- a/Libraries/LibWeb/HTML/HTMLOutputElement.cpp +++ b/Libraries/LibWeb/HTML/HTMLOutputElement.cpp @@ -110,4 +110,15 @@ void HTMLOutputElement::clear_algorithm() string_replace_all({}); } +// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-cva-willvalidate +bool HTMLOutputElement::will_validate() +{ + // The willValidate attribute's getter must return true, if this element is a candidate for constraint validation, + // and false otherwise (i.e., false if any conditions are barring it from constraint validation). + // A submittable element is a candidate for constraint validation + // https://html.spec.whatwg.org/multipage/forms.html#category-submit + // Submittable elements: button, input, select, textarea, form-associated custom elements [but not output] + return false; +} + } diff --git a/Libraries/LibWeb/HTML/HTMLOutputElement.h b/Libraries/LibWeb/HTML/HTMLOutputElement.h index 6c066dd78e1..9c2f7834e62 100644 --- a/Libraries/LibWeb/HTML/HTMLOutputElement.h +++ b/Libraries/LibWeb/HTML/HTMLOutputElement.h @@ -57,6 +57,8 @@ public: // https://www.w3.org/TR/html-aria/#el-output virtual Optional default_role() const override { return ARIA::Role::status; } + static bool will_validate(); + private: HTMLOutputElement(DOM::Document&, DOM::QualifiedName); diff --git a/Libraries/LibWeb/HTML/HTMLOutputElement.idl b/Libraries/LibWeb/HTML/HTMLOutputElement.idl index fd03c3b2a3b..f96e4480189 100644 --- a/Libraries/LibWeb/HTML/HTMLOutputElement.idl +++ b/Libraries/LibWeb/HTML/HTMLOutputElement.idl @@ -15,7 +15,7 @@ interface HTMLOutputElement : HTMLElement { [CEReactions] attribute DOMString defaultValue; [CEReactions] attribute DOMString value; - [FIXME] readonly attribute boolean willValidate; + readonly attribute boolean willValidate; readonly attribute ValidityState validity; [FIXME] readonly attribute DOMString validationMessage; [FIXME] boolean checkValidity(); diff --git a/Libraries/LibWeb/HTML/HTMLSelectElement.cpp b/Libraries/LibWeb/HTML/HTMLSelectElement.cpp index 8dcf2f86372..b8549d06c4d 100644 --- a/Libraries/LibWeb/HTML/HTMLSelectElement.cpp +++ b/Libraries/LibWeb/HTML/HTMLSelectElement.cpp @@ -695,6 +695,13 @@ void HTMLSelectElement::update_selectedness() update_inner_text_element(); } +// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-cva-willvalidate +bool HTMLSelectElement::will_validate() +{ + // The willValidate attribute's getter must return true, if this element is a candidate for constraint validation + return is_candidate_for_constraint_validation(); +} + bool HTMLSelectElement::is_focusable() const { return enabled(); diff --git a/Libraries/LibWeb/HTML/HTMLSelectElement.h b/Libraries/LibWeb/HTML/HTMLSelectElement.h index ce1884c1c3c..4cb72b20d6e 100644 --- a/Libraries/LibWeb/HTML/HTMLSelectElement.h +++ b/Libraries/LibWeb/HTML/HTMLSelectElement.h @@ -58,6 +58,8 @@ public: Vector> list_of_options() const; + bool will_validate(); + // ^EventTarget // https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute:the-select-element // https://html.spec.whatwg.org/multipage/interaction.html#focusable-area diff --git a/Libraries/LibWeb/HTML/HTMLSelectElement.idl b/Libraries/LibWeb/HTML/HTMLSelectElement.idl index f335665ca36..dd42e47748c 100644 --- a/Libraries/LibWeb/HTML/HTMLSelectElement.idl +++ b/Libraries/LibWeb/HTML/HTMLSelectElement.idl @@ -31,7 +31,7 @@ interface HTMLSelectElement : HTMLElement { attribute long selectedIndex; attribute DOMString value; - [FIXME] readonly attribute boolean willValidate; + readonly attribute boolean willValidate; readonly attribute ValidityState validity; [FIXME] readonly attribute DOMString validationMessage; [FIXME] boolean checkValidity(); diff --git a/Libraries/LibWeb/HTML/HTMLTextAreaElement.cpp b/Libraries/LibWeb/HTML/HTMLTextAreaElement.cpp index 12ccbe92ecd..cc35f7c00ab 100644 --- a/Libraries/LibWeb/HTML/HTMLTextAreaElement.cpp +++ b/Libraries/LibWeb/HTML/HTMLTextAreaElement.cpp @@ -237,6 +237,13 @@ u32 HTMLTextAreaElement::text_length() const return AK::utf16_code_unit_length_from_utf8(api_value()); } +// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-cva-willvalidate +bool HTMLTextAreaElement::will_validate() +{ + // The willValidate attribute's getter must return true, if this element is a candidate for constraint validation + return is_candidate_for_constraint_validation(); +} + // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-cva-checkvalidity bool HTMLTextAreaElement::check_validity() { diff --git a/Libraries/LibWeb/HTML/HTMLTextAreaElement.h b/Libraries/LibWeb/HTML/HTMLTextAreaElement.h index 5ebafec8018..430841df70d 100644 --- a/Libraries/LibWeb/HTML/HTMLTextAreaElement.h +++ b/Libraries/LibWeb/HTML/HTMLTextAreaElement.h @@ -95,6 +95,7 @@ public: u32 text_length() const; + bool will_validate(); bool check_validity(); bool report_validity(); diff --git a/Libraries/LibWeb/HTML/HTMLTextAreaElement.idl b/Libraries/LibWeb/HTML/HTMLTextAreaElement.idl index eec164b6475..ba3ac128ee5 100644 --- a/Libraries/LibWeb/HTML/HTMLTextAreaElement.idl +++ b/Libraries/LibWeb/HTML/HTMLTextAreaElement.idl @@ -26,7 +26,7 @@ interface HTMLTextAreaElement : HTMLElement { [LegacyNullToEmptyString] attribute DOMString value; readonly attribute unsigned long textLength; - [FIXME] readonly attribute boolean willValidate; + readonly attribute boolean willValidate; readonly attribute ValidityState validity; [FIXME] readonly attribute DOMString validationMessage; boolean checkValidity(); diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/semantics/forms/constraints/form-validation-willValidate.txt b/Tests/LibWeb/Text/expected/wpt-import/html/semantics/forms/constraints/form-validation-willValidate.txt new file mode 100644 index 00000000000..e9eb0b237bf --- /dev/null +++ b/Tests/LibWeb/Text/expected/wpt-import/html/semantics/forms/constraints/form-validation-willValidate.txt @@ -0,0 +1,78 @@ +Harness status: OK + +Found 73 tests + +73 Pass +Pass [INPUT in HIDDEN status] Must be barred from the constraint validation +Pass [INPUT in BUTTON status] Must be barred from the constraint validation +Pass [INPUT in RESET status] Must be barred from the constraint validation +Pass [BUTTON in BUTTON status] Must be barred from the constraint validation +Pass [BUTTON in RESET status] Must be barred from the constraint validation +Pass [fieldset] The willValidate attribute must be false since FIELDSET is not a submittable element +Pass [output] The willValidate attribute must be false since OUTPUT is not a submittable element +Pass [object] Must be barred from the constraint validation +Pass [INPUT in TEXT status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in TEXT status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in TEXT status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in TEXT status] The willValidate attribute must be false if it has a datalist ancestor +Pass [INPUT in SEARCH status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in SEARCH status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in SEARCH status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in SEARCH status] The willValidate attribute must be false if it has a datalist ancestor +Pass [INPUT in TEL status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in TEL status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in TEL status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in TEL status] The willValidate attribute must be false if it has a datalist ancestor +Pass [INPUT in URL status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in URL status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in URL status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in URL status] The willValidate attribute must be false if it has a datalist ancestor +Pass [INPUT in EMAIL status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in EMAIL status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in EMAIL status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in EMAIL status] The willValidate attribute must be false if it has a datalist ancestor +Pass [INPUT in PASSWORD status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in PASSWORD status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in PASSWORD status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in PASSWORD status] The willValidate attribute must be false if it has a datalist ancestor +Pass [INPUT in DATETIME-LOCAL status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in DATETIME-LOCAL status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in DATETIME-LOCAL status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in DATETIME-LOCAL status] The willValidate attribute must be false if it has a datalist ancestor +Pass [INPUT in DATE status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in DATE status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in DATE status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in DATE status] The willValidate attribute must be false if it has a datalist ancestor +Pass [INPUT in MONTH status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in MONTH status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in MONTH status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in MONTH status] The willValidate attribute must be false if it has a datalist ancestor +Pass [INPUT in WEEK status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in WEEK status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in WEEK status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in WEEK status] The willValidate attribute must be false if it has a datalist ancestor +Pass [INPUT in TIME status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in TIME status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in TIME status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in TIME status] The willValidate attribute must be false if it has a datalist ancestor +Pass [INPUT in COLOR status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in COLOR status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in COLOR status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in COLOR status] The willValidate attribute must be false if it has a datalist ancestor +Pass [INPUT in FILE status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in FILE status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in FILE status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in FILE status] The willValidate attribute must be false if it has a datalist ancestor +Pass [INPUT in SUBMIT status] Must be barred from the constraint validation if it is disabled +Pass [INPUT in SUBMIT status] The willValidate attribute must be true if an element is mutable +Pass [INPUT in SUBMIT status] Must be barred from the constraint validation if it is readonly +Pass [INPUT in SUBMIT status] The willValidate attribute must be false if it has a datalist ancestor +Pass [BUTTON in SUBMIT status] Must be barred from the constraint validation +Pass [BUTTON in SUBMIT status] The willValidate attribute must be true if an element is mutable +Pass [BUTTON in SUBMIT status] The willValidate attribute must be false if it has a datalist ancestor +Pass [select] Must be barred from the constraint validation +Pass [select] The willValidate attribute must be true if an element is mutable +Pass [select] The willValidate attribute must be false if it has a datalist ancestor +Pass [textarea] Must be barred from the constraint validation +Pass [textarea] The willValidate attribute must be true if an element is mutable +Pass [textarea] The willValidate attribute must be false if it has a datalist ancestor \ No newline at end of file diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/semantics/forms/the-select-element/select-willvalidate-readonly-attribute.txt b/Tests/LibWeb/Text/expected/wpt-import/html/semantics/forms/the-select-element/select-willvalidate-readonly-attribute.txt index 100fb28078e..b5c2a3c39f7 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/html/semantics/forms/the-select-element/select-willvalidate-readonly-attribute.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/html/semantics/forms/the-select-element/select-willvalidate-readonly-attribute.txt @@ -2,5 +2,5 @@ Harness status: OK Found 1 tests -1 Fail -Fail Select element with "readonly" attribute shouldn't be barred from constraint validation \ No newline at end of file +1 Pass +Pass Select element with "readonly" attribute shouldn't be barred from constraint validation \ No newline at end of file diff --git a/Tests/LibWeb/Text/input/wpt-import/html/semantics/forms/constraints/form-validation-willValidate.html b/Tests/LibWeb/Text/input/wpt-import/html/semantics/forms/constraints/form-validation-willValidate.html new file mode 100644 index 00000000000..9442faea78f --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/html/semantics/forms/constraints/form-validation-willValidate.html @@ -0,0 +1,96 @@ + + +The constraint validation API Test: element.willValidate + + + + + + +
+