Changeset 46062 in webkit


Ignore:
Timestamp:
Jul 17, 2009 3:37:41 PM (15 years ago)
Author:
pkasting@chromium.org
Message:

LayoutTests:

2009-07-17 Michelangelo De Simone <micdesim@gmail.com>

Reviewed by Darin Adler.

https://bugs.webkit.org/show_bug.cgi?id=25551
Test suite for the required attribute, the valueMissing flag and new
:required and :optional CSS pseudoclasses.
Part of the HTML5 sec. Forms.
http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#attr-input-required

  • fast/css/pseudo-required-optional-001-expected.txt: Added.
  • fast/css/pseudo-required-optional-001.html: Added.
  • fast/css/pseudo-required-optional-002-expected.txt: Added.
  • fast/css/pseudo-required-optional-002.html: Added.
  • fast/css/pseudo-required-optional-003-expected.txt: Added.
  • fast/css/pseudo-required-optional-003.html: Added.
  • fast/css/pseudo-required-optional-004-expected.txt: Added.
  • fast/css/pseudo-required-optional-004.html: Added.
  • fast/css/pseudo-required-optional-005-expected.txt: Added.
  • fast/css/pseudo-required-optional-005.html: Added.
  • fast/css/pseudo-required-optional-006-expected.txt: Added.
  • fast/css/pseudo-required-optional-006.html: Added.
  • fast/forms/ValidityState-valueMissing-001-expected.txt: Added.
  • fast/forms/ValidityState-valueMissing-001.html: Added.
  • fast/forms/ValidityState-valueMissing-002-expected.txt: Added.
  • fast/forms/ValidityState-valueMissing-002.html: Added.
  • fast/forms/ValidityState-valueMissing-003-expected.txt: Added.
  • fast/forms/ValidityState-valueMissing-003.html: Added.
  • fast/forms/ValidityState-valueMissing-004-expected.txt: Added.
  • fast/forms/ValidityState-valueMissing-004.html: Added.
  • fast/forms/ValidityState-valueMissing-005-expected.txt: Added.
  • fast/forms/ValidityState-valueMissing-005.html: Added.
  • fast/forms/ValidityState-valueMissing-006-expected.txt: Added.
  • fast/forms/ValidityState-valueMissing-006.html: Added.
  • fast/forms/ValidityState-valueMissing-007-expected.txt: Added.
  • fast/forms/ValidityState-valueMissing-007.html: Added.
  • fast/forms/ValidityState-valueMissing-008-expected.txt: Added.
  • fast/forms/ValidityState-valueMissing-008.html: Added.
  • fast/forms/ValidityState-valueMissing-009-expected.txt: Added.
  • fast/forms/ValidityState-valueMissing-009.html: Added.
  • fast/forms/required-attribute-001-expected.txt: Added.
  • fast/forms/required-attribute-001.html: Added.
  • fast/forms/required-attribute-002-expected.txt: Added.
  • fast/forms/required-attribute-002.html: Added.

WebCore:

2009-07-17 Michelangelo De Simone <micdesim@gmail.com>

Reviewed by Darin Adler.

https://bugs.webkit.org/show_bug.cgi?id=25551
Added support for the "required" attribute, the valueMissing flag
to the ValidityState object and :required/:optional CSS pseudoclasses.
Part of HTML5 sec. Forms specs.
http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#attr-input-required

Tests: fast/css/pseudo-required-optional-001.html

fast/css/pseudo-required-optional-002.html
fast/css/pseudo-required-optional-003.html
fast/css/pseudo-required-optional-004.html
fast/css/pseudo-required-optional-005.html
fast/css/pseudo-required-optional-006.html
fast/forms/ValidityState-valueMissing-001.html
fast/forms/ValidityState-valueMissing-002.html
fast/forms/ValidityState-valueMissing-003.html
fast/forms/ValidityState-valueMissing-004.html
fast/forms/ValidityState-valueMissing-005.html
fast/forms/ValidityState-valueMissing-006.html
fast/forms/ValidityState-valueMissing-007.html
fast/forms/ValidityState-valueMissing-008.html
fast/forms/ValidityState-valueMissing-009.html
fast/forms/required-attribute-001.html
fast/forms/required-attribute-002.html

  • css/CSSSelector.cpp: (WebCore::CSSSelector::extractPseudoType): pseudoRequired/pseudoOptional
  • css/CSSSelector.h: (WebCore::CSSSelector::): ditto
  • css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): ditto
  • dom/Element.h: (WebCore::Element::isOptionalFormControl): check for optional controls (WebCore::Element::isRequiredFormControl): check for required controls
  • html/HTMLAttributeNames.in: required attribute
  • html/HTMLButtonElement.h: (WebCore::HTMLButtonElement::isOptionalFormControl): ditto
  • html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::required): requiredAttr getter (WebCore::HTMLFormControlElement::setRequired): requiredAttr setter
  • html/HTMLFormControlElement.h: (WebCore::HTMLFormControlElement::valueMissing): method definition
  • html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::valueMissing): validation code (WebCore::HTMLInputElement::isRequiredFormControl): ditto
  • html/HTMLInputElement.h: (WebCore::HTMLInputElement::isOptionalFormControl): ditto
  • html/HTMLInputElement.idl: required DOM attribute
  • html/HTMLSelectElement.h: (WebCore::HTMLSelectElement::isOptionalFormControl): ditto
  • html/HTMLTextAreaElement.h: (WebCore::HTMLTextAreaElement::valueMissing): validation code (WebCore::HTMLTextAreaElement::isOptionalFormControl): ditto (WebCore::HTMLTextAreaElement::isRequiredFormControl): ditto
  • html/HTMLTextAreaElement.idl: required DOM attribute
  • html/ValidityState.cpp:
  • html/ValidityState.h: (WebCore::ValidityState::valueMissing): validation flag
Location:
trunk
Files:
34 added
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r46048 r46062  
     12009-07-17  Michelangelo De Simone  <micdesim@gmail.com>
     2
     3        Reviewed by Darin Adler.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=25551
     6        Test suite for the required attribute, the valueMissing flag and new
     7        :required and :optional CSS pseudoclasses.
     8        Part of the HTML5 sec. Forms.
     9        http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#attr-input-required
     10
     11        * fast/css/pseudo-required-optional-001-expected.txt: Added.
     12        * fast/css/pseudo-required-optional-001.html: Added.
     13        * fast/css/pseudo-required-optional-002-expected.txt: Added.
     14        * fast/css/pseudo-required-optional-002.html: Added.
     15        * fast/css/pseudo-required-optional-003-expected.txt: Added.
     16        * fast/css/pseudo-required-optional-003.html: Added.
     17        * fast/css/pseudo-required-optional-004-expected.txt: Added.
     18        * fast/css/pseudo-required-optional-004.html: Added.
     19        * fast/css/pseudo-required-optional-005-expected.txt: Added.
     20        * fast/css/pseudo-required-optional-005.html: Added.
     21        * fast/css/pseudo-required-optional-006-expected.txt: Added.
     22        * fast/css/pseudo-required-optional-006.html: Added.
     23        * fast/forms/ValidityState-valueMissing-001-expected.txt: Added.
     24        * fast/forms/ValidityState-valueMissing-001.html: Added.
     25        * fast/forms/ValidityState-valueMissing-002-expected.txt: Added.
     26        * fast/forms/ValidityState-valueMissing-002.html: Added.
     27        * fast/forms/ValidityState-valueMissing-003-expected.txt: Added.
     28        * fast/forms/ValidityState-valueMissing-003.html: Added.
     29        * fast/forms/ValidityState-valueMissing-004-expected.txt: Added.
     30        * fast/forms/ValidityState-valueMissing-004.html: Added.
     31        * fast/forms/ValidityState-valueMissing-005-expected.txt: Added.
     32        * fast/forms/ValidityState-valueMissing-005.html: Added.
     33        * fast/forms/ValidityState-valueMissing-006-expected.txt: Added.
     34        * fast/forms/ValidityState-valueMissing-006.html: Added.
     35        * fast/forms/ValidityState-valueMissing-007-expected.txt: Added.
     36        * fast/forms/ValidityState-valueMissing-007.html: Added.
     37        * fast/forms/ValidityState-valueMissing-008-expected.txt: Added.
     38        * fast/forms/ValidityState-valueMissing-008.html: Added.
     39        * fast/forms/ValidityState-valueMissing-009-expected.txt: Added.
     40        * fast/forms/ValidityState-valueMissing-009.html: Added.
     41        * fast/forms/required-attribute-001-expected.txt: Added.
     42        * fast/forms/required-attribute-001.html: Added.
     43        * fast/forms/required-attribute-002-expected.txt: Added.
     44        * fast/forms/required-attribute-002.html: Added.
     45
    1462009-07-17  Drew Wilson  <atwilson@google.com>
    247
  • trunk/WebCore/ChangeLog

    r46061 r46062  
     12009-07-17  Michelangelo De Simone  <micdesim@gmail.com>
     2
     3        Reviewed by Darin Adler.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=25551
     6        Added support for the "required" attribute, the valueMissing flag
     7        to the ValidityState object and :required/:optional CSS pseudoclasses.
     8        Part of HTML5 sec. Forms specs.
     9        http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#attr-input-required
     10
     11        Tests: fast/css/pseudo-required-optional-001.html
     12               fast/css/pseudo-required-optional-002.html
     13               fast/css/pseudo-required-optional-003.html
     14               fast/css/pseudo-required-optional-004.html
     15               fast/css/pseudo-required-optional-005.html
     16               fast/css/pseudo-required-optional-006.html
     17               fast/forms/ValidityState-valueMissing-001.html
     18               fast/forms/ValidityState-valueMissing-002.html
     19               fast/forms/ValidityState-valueMissing-003.html
     20               fast/forms/ValidityState-valueMissing-004.html
     21               fast/forms/ValidityState-valueMissing-005.html
     22               fast/forms/ValidityState-valueMissing-006.html
     23               fast/forms/ValidityState-valueMissing-007.html
     24               fast/forms/ValidityState-valueMissing-008.html
     25               fast/forms/ValidityState-valueMissing-009.html
     26               fast/forms/required-attribute-001.html
     27               fast/forms/required-attribute-002.html
     28
     29        * css/CSSSelector.cpp:
     30        (WebCore::CSSSelector::extractPseudoType): pseudoRequired/pseudoOptional
     31        * css/CSSSelector.h:
     32        (WebCore::CSSSelector::): ditto
     33        * css/CSSStyleSelector.cpp:
     34        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): ditto
     35        * dom/Element.h:
     36        (WebCore::Element::isOptionalFormControl): check for optional controls
     37        (WebCore::Element::isRequiredFormControl): check for required controls
     38        * html/HTMLAttributeNames.in: required attribute
     39        * html/HTMLButtonElement.h:
     40        (WebCore::HTMLButtonElement::isOptionalFormControl): ditto
     41        * html/HTMLFormControlElement.cpp:
     42        (WebCore::HTMLFormControlElement::required): requiredAttr getter
     43        (WebCore::HTMLFormControlElement::setRequired): requiredAttr setter
     44        * html/HTMLFormControlElement.h:
     45        (WebCore::HTMLFormControlElement::valueMissing): method definition
     46        * html/HTMLInputElement.cpp:
     47        (WebCore::HTMLInputElement::valueMissing): validation code
     48        (WebCore::HTMLInputElement::isRequiredFormControl): ditto
     49        * html/HTMLInputElement.h:
     50        (WebCore::HTMLInputElement::isOptionalFormControl): ditto
     51        * html/HTMLInputElement.idl: required DOM attribute
     52        * html/HTMLSelectElement.h:
     53        (WebCore::HTMLSelectElement::isOptionalFormControl): ditto
     54        * html/HTMLTextAreaElement.h:
     55        (WebCore::HTMLTextAreaElement::valueMissing): validation code
     56        (WebCore::HTMLTextAreaElement::isOptionalFormControl): ditto
     57        (WebCore::HTMLTextAreaElement::isRequiredFormControl): ditto
     58        * html/HTMLTextAreaElement.idl: required DOM attribute
     59        * html/ValidityState.cpp:
     60        * html/ValidityState.h:
     61        (WebCore::ValidityState::valueMissing): validation flag
     62
    1632009-07-17  Beth Dakin  <bdakin@apple.com>
    264
  • trunk/WebCore/css/CSSSelector.cpp

    r45474 r46062  
    118118    DEFINE_STATIC_LOCAL(AtomicString, onlyChild, ("only-child"));
    119119    DEFINE_STATIC_LOCAL(AtomicString, onlyOfType, ("only-of-type"));
     120    DEFINE_STATIC_LOCAL(AtomicString, optional, ("optional"));
     121    DEFINE_STATIC_LOCAL(AtomicString, required, ("required"));
    120122    DEFINE_STATIC_LOCAL(AtomicString, resizer, ("-webkit-resizer"));
    121123    DEFINE_STATIC_LOCAL(AtomicString, root, ("root"));
     
    287289    else if (m_value == noButton)
    288290        m_pseudoType = PseudoNoButton;
     291    else if (m_value == optional)
     292        m_pseudoType = PseudoOptional;
     293    else if (m_value == required)
     294        m_pseudoType = PseudoRequired;
    289295    else if (m_value == scrollbarCorner) {
    290296        element = true;
  • trunk/WebCore/css/CSSSelector.h

    r45891 r46062  
    129129            PseudoDisabled,
    130130            PseudoInputPlaceholder,
     131            PseudoOptional,
     132            PseudoRequired,
    131133            PseudoReadOnly,
    132134            PseudoReadWrite,
  • trunk/WebCore/css/CSSStyleSelector.cpp

    r45919 r46062  
    23762376                return e->isTextFormControl() && !e->isReadOnlyFormControl();
    23772377            }
     2378            case CSSSelector::PseudoOptional:
     2379                return e && e->isOptionalFormControl();
     2380            case CSSSelector::PseudoRequired:
     2381                return e && e->isRequiredFormControl();
    23782382            case CSSSelector::PseudoChecked: {
    23792383                if (!e || !e->isFormControlElement())
  • trunk/WebCore/dom/Element.h

    r45937 r46062  
    213213    virtual bool isReadOnlyFormControl() const { return false; }
    214214    virtual bool isTextFormControl() const { return false; }
     215    virtual bool isOptionalFormControl() const { return false; }
     216    virtual bool isRequiredFormControl() const { return false; }
    215217
    216218    virtual bool formControlValueMatchesRenderer() const { return false; }
  • trunk/WebCore/html/HTMLAttributeNames.in

    r45851 r46062  
    196196readonly
    197197rel
     198required
    198199results
    199200rev
  • trunk/WebCore/html/HTMLButtonElement.h

    r43367 r46062  
    6262private:
    6363    enum Type { SUBMIT, RESET, BUTTON };
     64    virtual bool isOptionalFormControl() const { return true; }
    6465
    6566    Type m_type;
  • trunk/WebCore/html/HTMLFormControlElement.cpp

    r45888 r46062  
    205205}
    206206
     207bool HTMLFormControlElement::required() const
     208{
     209    return hasAttribute(requiredAttr);
     210}
     211
     212void HTMLFormControlElement::setRequired(bool b)
     213{
     214    setAttribute(requiredAttr, b ? "required" : 0);
     215}
     216
    207217void HTMLFormControlElement::recalcStyle(StyleChange change)
    208218{
  • trunk/WebCore/html/HTMLFormControlElement.h

    r45888 r46062  
    7575    void setAutofocus(bool);
    7676
     77    bool required() const;
     78    void setRequired(bool);
     79
     80    virtual bool valueMissing() const { return false; }
     81
    7782    virtual void recalcStyle(StyleChange);
    7883
  • trunk/WebCore/html/HTMLInputElement.cpp

    r46006 r46062  
    113113    // The default is true
    114114    return true;
     115}
     116
     117bool HTMLInputElement::valueMissing() const
     118{
     119    if (!isRequiredFormControl() || readOnly() || disabled())
     120        return false;
     121
     122    switch (inputType()) {
     123        case TEXT:
     124        case SEARCH:
     125        case URL:
     126        case TELEPHONE:
     127        case EMAIL:
     128        case PASSWORD:
     129        case NUMBER:
     130        case FILE:
     131            return value().isEmpty();
     132        case CHECKBOX:
     133            return !checked();
     134        case RADIO:
     135            return !document()->checkedRadioButtons().checkedButtonForGroup(name());
     136        case HIDDEN:
     137        case RANGE:
     138        case SUBMIT:
     139        case IMAGE:
     140        case RESET:
     141        case BUTTON:
     142        case ISINDEX:
     143            break;
     144    }
     145
     146    ASSERT_NOT_REACHED();
     147    return false;
    115148}
    116149
     
    15801613}
    15811614
     1615bool HTMLInputElement::isRequiredFormControl() const
     1616{
     1617    if (!required())
     1618        return false;
     1619
     1620    switch (inputType()) {
     1621        case TEXT:
     1622        case SEARCH:
     1623        case URL:
     1624        case TELEPHONE:
     1625        case EMAIL:
     1626        case PASSWORD:
     1627        case NUMBER:
     1628        case CHECKBOX:
     1629        case RADIO:
     1630        case FILE:
     1631            return true;
     1632        case HIDDEN:
     1633        case RANGE:
     1634        case SUBMIT:
     1635        case IMAGE:
     1636        case RESET:
     1637        case BUTTON:
     1638        case ISINDEX:
     1639            return false;
     1640    }
     1641
     1642    ASSERT_NOT_REACHED();
     1643    return false;
     1644}
     1645
    15821646void HTMLInputElement::cacheSelection(int start, int end)
    15831647{
  • trunk/WebCore/html/HTMLInputElement.h

    r44218 r46062  
    9191    virtual bool isTextFormControl() const { return isTextField(); }
    9292
     93    virtual bool valueMissing() const;
     94
    9395    bool isTextButton() const { return m_type == SUBMIT || m_type == RESET || m_type == BUTTON; }
    9496    virtual bool isRadioButton() const { return m_type == RADIO; }
     
    237239    void registerForActivationCallbackIfNeeded();
    238240    void unregisterForActivationCallbackIfNeeded();
     241
     242    virtual bool isOptionalFormControl() const { return !isRequiredFormControl(); }
     243    virtual bool isRequiredFormControl() const;
    239244
    240245    InputElementData m_data;
  • trunk/WebCore/html/HTMLInputElement.idl

    r45888 r46062  
    4444                 attribute DOMString       placeholder;
    4545                 attribute boolean         readOnly;
     46                 attribute boolean         required;
    4647#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
    4748                 attribute [ConvertToString] DOMString size; // DOM level 2 changed this to a long, but our existing API is a string
  • trunk/WebCore/html/HTMLSelectElement.h

    r45185 r46062  
    131131    virtual void insertedIntoTree(bool);
    132132
     133    virtual bool isOptionalFormControl() const { return true; }
     134
    133135    SelectElementData m_data;
    134136    CollectionCache m_collectionInfo;
  • trunk/WebCore/html/HTMLTextAreaElement.h

    r43367 r46062  
    5353    virtual bool isTextFormControl() const { return true; }
    5454
     55    virtual bool valueMissing() const { return isRequiredFormControl() && !disabled() && !readOnly() && value().isEmpty(); }
     56
    5557    int selectionStart();
    5658    int selectionEnd();
     
    9799    void updateValue() const;
    98100
     101    virtual bool isOptionalFormControl() const { return !isRequiredFormControl(); }
     102    virtual bool isRequiredFormControl() const { return required(); }
     103
    99104    int m_rows;
    100105    int m_cols;
  • trunk/WebCore/html/HTMLTextAreaElement.idl

    r45888 r46062  
    3737                 attribute  [ConvertNullToNullString] DOMString            name;
    3838                 attribute  boolean              readOnly;
     39                 attribute  boolean              required;
    3940                 attribute  long                 rows;
    4041        readonly attribute  DOMString            type;
  • trunk/WebCore/html/ValidityState.cpp

    r45895 r46062  
    2323#include "config.h"
    2424#include "ValidityState.h"
    25 #include "HTMLFormControlElement.h"
    2625
    2726namespace WebCore {
  • trunk/WebCore/html/ValidityState.h

    r45895 r46062  
    2424#define ValidityState_h
    2525
     26#include "HTMLFormControlElement.h"
    2627#include <wtf/PassRefPtr.h>
    2728#include <wtf/RefCounted.h>
    2829
    2930namespace WebCore {
    30 
    31     class HTMLFormControlElement;
    3231
    3332    class ValidityState : public RefCounted<ValidityState> {
     
    4039        HTMLFormControlElement* control() const { return m_control; }
    4140
    42         bool valueMissing() { return false; }
     41        bool valueMissing() { return control()->valueMissing(); }
    4342        bool typeMismatch() { return false; }
    4443        bool patternMismatch() { return false; }
Note: See TracChangeset for help on using the changeset viewer.