[webkit-changes] [WebKit/WebKit] 9a503b: Support :user-invalid / :user-valid pseudo-classes

Tim Nguyen noreply at github.com
Fri Dec 16 09:29:34 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 9a503b34f22f8b58a6335bf7d7dea506e2515c2e
      https://github.com/WebKit/WebKit/commit/9a503b34f22f8b58a6335bf7d7dea506e2515c2e
  Author: Tim Nguyen <ntim at apple.com>
  Date:   2022-12-16 (Fri, 16 Dec 2022)

  Changed paths:
    M LayoutTests/imported/w3c/web-platform-tests/css/selectors/user-invalid-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/selectors/user-valid-expected.txt
    M Source/WebCore/css/CSSSelector.cpp
    M Source/WebCore/css/CSSSelector.h
    M Source/WebCore/css/SelectorChecker.cpp
    M Source/WebCore/css/SelectorCheckerTestFunctions.h
    M Source/WebCore/css/SelectorPseudoClassAndCompatibilityElementMap.in
    M Source/WebCore/cssjit/SelectorCompiler.cpp
    M Source/WebCore/html/FileInputType.cpp
    M Source/WebCore/html/HTMLFormControlElement.cpp
    M Source/WebCore/html/HTMLFormControlElement.h
    M Source/WebCore/html/HTMLFormElement.cpp
    M Source/WebCore/html/HTMLTextFormControlElement.cpp

  Log Message:
  -----------
  Support :user-invalid / :user-valid pseudo-classes
https://bugs.webkit.org/show_bug.cgi?id=222267
rdar://74866546

Reviewed by Aditya Keerthi.

https://w3c.github.io/csswg-drafts/selectors/#user-pseudos

> The :user-invalid and the :user-valid pseudo-classes represent an element with incorrect or correct input, respectively, but only after the user has significantly interacted with it.

"significant user interaction" here is implemented as the first time the change event is emitted for a control, which is in practice
represents when the user has finished entering a value then moves focus away from the element. This matches Firefox's behavior.

User-initiated form submissions reset the state as the CSSWG spec says.

Based on patch by Devin Rousso.

* LayoutTests/imported/w3c/web-platform-tests/css/selectors/user-invalid-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/selectors/user-valid-expected.txt:
* Source/WebCore/css/CSSSelector.cpp:
(WebCore::CSSSelector::selectorText const):
* Source/WebCore/css/CSSSelector.h:
* Source/WebCore/css/SelectorChecker.cpp:
(WebCore::SelectorChecker::checkOne const):
* Source/WebCore/css/SelectorCheckerTestFunctions.h:
(WebCore::matchesUserInvalidPseudoClass):
(WebCore::matchesUserValidPseudoClass):
* Source/WebCore/css/SelectorPseudoClassAndCompatibilityElementMap.in:
* Source/WebCore/cssjit/SelectorCompiler.cpp:
(WebCore::SelectorCompiler::JSC_DEFINE_JIT_OPERATION):
(WebCore::SelectorCompiler::addPseudoClassType):
* Source/WebCore/html/FileInputType.cpp:
(WebCore::FileInputType::setFiles):
* Source/WebCore/html/HTMLFormControlElement.cpp:
(WebCore::HTMLFormControlElement::HTMLFormControlElement):
(WebCore::HTMLFormControlElement::setInteractedWithSinceLastFormSubmitEvent):
(WebCore::HTMLFormControlElement::dispatchFormControlChangeEvent):
(WebCore::HTMLFormControlElement::updateValidity):
(WebCore::HTMLFormControlElement::matchesUserInvalidPseudoClass const):
(WebCore::HTMLFormControlElement::matchesUserValidPseudoClass const):
* Source/WebCore/html/HTMLFormControlElement.h:
(WebCore::HTMLFormControlElement::wasInteractedWithSinceLastFormSubmitEvent const):
* Source/WebCore/html/HTMLFormElement.cpp:
(WebCore::HTMLFormElement::submitIfPossible):
* Source/WebCore/html/HTMLTextFormControlElement.cpp:
(WebCore::HTMLTextFormControlElement::dispatchFormControlChangeEvent):

Canonical link: https://commits.webkit.org/257997@main




More information about the webkit-changes mailing list