Changeset 48043 in webkit


Ignore:
Timestamp:
Sep 4, 2009 1:32:51 AM (15 years ago)
Author:
eric@webkit.org
Message:

2009-09-04 Kent Tamura <tkent@chromium.org>

Reviewed by Eric Seidel.

Tests for <input type=color> validation.
https://bugs.webkit.org/show_bug.cgi?id=28966

  • fast/forms/ValidityState-patternMismatch-unsupported-expected.txt: Added.
  • fast/forms/ValidityState-patternMismatch-unsupported.html: Added.
  • fast/forms/ValidityState-typeMismatch-color-expected.txt: Added.
  • fast/forms/ValidityState-typeMismatch-color.html: Added.
  • fast/forms/resources/ValidityState-patternMismatch-unsupported.js: Added.
  • fast/forms/resources/ValidityState-typeMismatch-color.js: Added.

2009-09-04 Kent Tamura <tkent@chromium.org>

Reviewed by Eric Seidel.

Tests: fast/forms/ValidityState-patternMismatch-unsupported.html

fast/forms/ValidityState-typeMismatch-color.html

  • html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::valueMissing): (WebCore::HTMLInputElement::patternMismatch): (WebCore::HTMLInputElement::setInputType): (WebCore::HTMLInputElement::formControlType): (WebCore::HTMLInputElement::saveFormControlState): (WebCore::HTMLInputElement::restoreFormControlState): (WebCore::HTMLInputElement::accessKeyAction): (WebCore::HTMLInputElement::rendererIsNeeded): (WebCore::HTMLInputElement::createRenderer): (WebCore::HTMLInputElement::appendFormData): (WebCore::HTMLInputElement::valueWithDefault): (WebCore::HTMLInputElement::storesValueSeparateFromAttribute): (WebCore::HTMLInputElement::defaultEventHandler): (WebCore::HTMLInputElement::isRequiredFormControl): (WebCore::HTMLInputElement::dataList):
  • html/HTMLInputElement.h: (WebCore::HTMLInputElement::): (WebCore::HTMLInputElement::isTextField):
  • html/ValidityState.cpp: (WebCore::ValidityState::typeMismatch): (WebCore::ValidityState::isValidColorString):
  • html/ValidityState.h:
Location:
trunk
Files:
6 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r48040 r48043  
     12009-09-04  Kent Tamura  <tkent@chromium.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Tests for <input type=color> validation.
     6        https://bugs.webkit.org/show_bug.cgi?id=28966
     7
     8        * fast/forms/ValidityState-patternMismatch-unsupported-expected.txt: Added.
     9        * fast/forms/ValidityState-patternMismatch-unsupported.html: Added.
     10        * fast/forms/ValidityState-typeMismatch-color-expected.txt: Added.
     11        * fast/forms/ValidityState-typeMismatch-color.html: Added.
     12        * fast/forms/resources/ValidityState-patternMismatch-unsupported.js: Added.
     13        * fast/forms/resources/ValidityState-typeMismatch-color.js: Added.
     14
    1152009-09-04  Yaar Schnitman  <yaar@chromium.org>
    216
  • trunk/WebCore/ChangeLog

    r48042 r48043  
     12009-09-04  Kent Tamura  <tkent@chromium.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        - Implement <input type=color> as a text field.
     6        - ValidityState::typeMismatch supports for type=color.
     7        https://bugs.webkit.org/show_bug.cgi?id=28966
     8
     9        Tests: fast/forms/ValidityState-patternMismatch-unsupported.html
     10               fast/forms/ValidityState-typeMismatch-color.html
     11
     12        * html/HTMLInputElement.cpp:
     13        (WebCore::HTMLInputElement::valueMissing):
     14        (WebCore::HTMLInputElement::patternMismatch):
     15        (WebCore::HTMLInputElement::setInputType):
     16        (WebCore::HTMLInputElement::formControlType):
     17        (WebCore::HTMLInputElement::saveFormControlState):
     18        (WebCore::HTMLInputElement::restoreFormControlState):
     19        (WebCore::HTMLInputElement::accessKeyAction):
     20        (WebCore::HTMLInputElement::rendererIsNeeded):
     21        (WebCore::HTMLInputElement::createRenderer):
     22        (WebCore::HTMLInputElement::appendFormData):
     23        (WebCore::HTMLInputElement::valueWithDefault):
     24        (WebCore::HTMLInputElement::storesValueSeparateFromAttribute):
     25        (WebCore::HTMLInputElement::defaultEventHandler):
     26        (WebCore::HTMLInputElement::isRequiredFormControl):
     27        (WebCore::HTMLInputElement::dataList):
     28        * html/HTMLInputElement.h:
     29        (WebCore::HTMLInputElement::):
     30        (WebCore::HTMLInputElement::isTextField):
     31        * html/ValidityState.cpp:
     32        (WebCore::ValidityState::typeMismatch):
     33        (WebCore::ValidityState::isValidColorString):
     34        * html/ValidityState.h:
     35
    1362009-09-04  Mads Ager  <ager@chromium.org>
    237
  • trunk/WebCore/html/HTMLInputElement.cpp

    r48011 r48043  
    138138        case RADIO:
    139139            return !document()->checkedRadioButtons().checkedButtonForGroup(name());
     140        case COLOR:
     141            return false;
    140142        case HIDDEN:
    141143        case RANGE:
     
    166168        case RANGE:
    167169        case NUMBER:
     170        case COLOR:
    168171            return false;
    169172        case TEXT:
     
    315318    else if (equalIgnoringCase(t, "url"))
    316319        newType = URL;
     320    else if (equalIgnoringCase(t, "color"))
     321        newType = COLOR;
    317322    else
    318323        newType = TEXT;
     
    398403            return checkbox;
    399404        }
     405        case COLOR: {
     406            DEFINE_STATIC_LOCAL(const AtomicString, color, ("color"));
     407            return color;
     408        }
    400409        case EMAIL: {
    401410            DEFINE_STATIC_LOCAL(const AtomicString, email, ("email"));
     
    467476    switch (inputType()) {
    468477        case BUTTON:
     478        case COLOR:
    469479        case EMAIL:
    470480        case FILE:
     
    498508    switch (inputType()) {
    499509        case BUTTON:
     510        case COLOR:
    500511        case EMAIL:
    501512        case FILE:
     
    609620            // a no-op for this type
    610621            break;
     622        case COLOR:
    611623        case EMAIL:
    612624        case ISINDEX:
     
    752764        case BUTTON:
    753765        case CHECKBOX:
     766        case COLOR:
    754767        case EMAIL:
    755768        case FILE:
     
    792805        case RANGE:
    793806            return new (arena) RenderSlider(this);
     807        case COLOR:
    794808        case EMAIL:
    795809        case ISINDEX:
     
    878892
    879893    switch (inputType()) {
     894        case COLOR:
    880895        case EMAIL:
    881896        case HIDDEN:
     
    10551070            case BUTTON:
    10561071            case CHECKBOX:
     1072            case COLOR:
    10571073            case EMAIL:
    10581074            case FILE:
     
    11601176        case SUBMIT:
    11611177            return false;
     1178        case COLOR:
    11621179        case EMAIL:
    11631180        case FILE:
     
    13351352            switch (inputType()) {
    13361353                case CHECKBOX:
     1354                case COLOR:
    13371355                case EMAIL:
    13381356                case HIDDEN:
     
    14621480                        clickElement = true;
    14631481                    break;
     1482                case COLOR:
    14641483                case EMAIL:
    14651484                case HIDDEN:
     
    16941713        case RESET:
    16951714        case BUTTON:
     1715        case COLOR:
    16961716        case ISINDEX:
    16971717            return false;
     
    17911811    case EMAIL:
    17921812    case NUMBER:
    1793     case RANGE: {
     1813    case RANGE:
     1814    case COLOR: {
    17941815        Element* element = document()->getElementById(getAttribute(listAttr));
    17951816        if (element && element->hasTagName(datalistTag))
  • trunk/WebCore/html/HTMLInputElement.h

    r47889 r48043  
    5757        NUMBER,
    5858        TELEPHONE,
    59         URL
     59        URL,
     60        COLOR
    6061    };
    6162   
     
    9899    bool isTextButton() const { return m_type == SUBMIT || m_type == RESET || m_type == BUTTON; }
    99100    virtual bool isRadioButton() const { return m_type == RADIO; }
    100     virtual bool isTextField() const { return m_type == TEXT || m_type == PASSWORD || m_type == SEARCH || m_type == ISINDEX || m_type == EMAIL || m_type == NUMBER || m_type == TELEPHONE || m_type == URL; }
     101    virtual bool isTextField() const { return m_type == TEXT || m_type == PASSWORD || m_type == SEARCH || m_type == ISINDEX || m_type == EMAIL || m_type == NUMBER || m_type == TELEPHONE || m_type == URL || m_type == COLOR; }
    101102    virtual bool isSearchField() const { return m_type == SEARCH; }
    102103    virtual bool isInputTypeHidden() const { return m_type == HIDDEN; }
  • trunk/WebCore/html/ValidityState.cpp

    r46062 r48043  
    2424#include "ValidityState.h"
    2525
     26#include "HTMLInputElement.h"
     27#include "HTMLNames.h"
     28
    2629namespace WebCore {
     30
     31using namespace HTMLNames;
    2732
    2833ValidityState::ValidityState(HTMLFormControlElement* parent)
     
    3035{
    3136    ASSERT(parent);
     37}
     38
     39bool ValidityState::typeMismatch()
     40{
     41    if (!control()->hasTagName(inputTag))
     42        return false;
     43
     44    HTMLInputElement* input = static_cast<HTMLInputElement*>(control());
     45    String value = input->value();
     46
     47    if (value.isEmpty())
     48        return false;
     49
     50    if (input->inputType() != HTMLInputElement::COLOR)
     51        return false;
     52    return !isValidColorString(value);
    3253}
    3354
     
    4061}
    4162
     63bool ValidityState::isValidColorString(const String& value)
     64{
     65    if (value.isEmpty())
     66        return false;
     67    if (value[0] == '#') {
     68        // We don't accept #rgb and #aarrggbb formats.
     69        if (value.length() != 7)
     70            return false;
     71    }
     72    Color color(value);  // This accepts named colors such as "white".
     73    return color.isValid() && !color.hasAlpha();
     74}
     75
    4276} // namespace
  • trunk/WebCore/html/ValidityState.h

    r46869 r48043  
    4242
    4343        bool valueMissing() { return control()->valueMissing(); }
    44         bool typeMismatch() { return false; }
     44        bool typeMismatch();
    4545        bool patternMismatch() { return control()->patternMismatch(); }
    4646        bool tooLong() { return false; }
     
    5555        HTMLFormControlElement* m_control;
    5656        String m_customErrorMessage;
     57
     58        static bool isValidColorString(const String&);
    5759    };
    5860
Note: See TracChangeset for help on using the changeset viewer.