Changeset 47649 in webkit


Ignore:
Timestamp:
Aug 21, 2009 4:55:30 PM (15 years ago)
Author:
pkasting@chromium.org
Message:

WebCore: https://bugs.webkit.org/show_bug.cgi?id=27452
Add support for checkValidity() method and invalid event, from HTML5
specs:
http://www.whatwg.org/specs/web-apps/current-work/#dom-form-checkvalidity

Patch by Michelangelo De Simone <micdesim@gmail.com> on 2009-08-21
Reviewed by Adele Peterson.

Tests: fast/events/invalid-001.html

fast/events/invalid-002.html
fast/events/invalid-003.html
fast/events/invalid-004.html
fast/events/invalid-005.html
fast/forms/checkValidity-001.html
fast/forms/checkValidity-002.html
fast/forms/checkValidity-003.html
fast/forms/checkValidity-004.html

  • dom/Document.idl: oninvalid event handler
  • dom/Element.idl: ditto
  • dom/EventNames.h: added invalid event
  • dom/Node.cpp:

(WebCore::Node::oninvalid): ditto
(WebCore::Node::setOninvalid): ditto

  • dom/Node.h: ditto
  • html/HTMLAttributeNames.in: oninvalid attribute
  • html/HTMLButtonElement.idl: added checkValidity() method
  • html/HTMLElement.cpp:

(WebCore::HTMLElement::parseMappedAttribute): parses oninvalid

  • html/HTMLFieldSetElement.idl: added checkValidity() method
  • html/HTMLFormControlElement.cpp:

(WebCore::HTMLFormControlElement::checkValidity): checkValidity()
implementation

  • html/HTMLFormControlElement.h:
  • html/HTMLFormElement.cpp:

(WebCore::HTMLFormElement::checkValidity): checkValidity() implementation
for form elements

  • html/HTMLFormElement.h: checkValidity() definition
  • html/HTMLFormElement.idl: added checkValidity() method
  • html/HTMLInputElement.idl: added checkValidity() method
  • html/HTMLSelectElement.idl: added checkValidity() method
  • html/HTMLTextAreaElement.idl: added checkValidity() method
  • page/DOMWindow.cpp:

(WebCore::DOMWindow::oninvalid): oninvalid event handler
(WebCore::DOMWindow::setOninvalid): ditto

  • page/DOMWindow.h: ditto
  • page/DOMWindow.idl: ditto

LayoutTests: https://bugs.webkit.org/show_bug.cgi?id=27452
Tests for checkValidity() method and invalid event, from HTML5
specs:
http://www.whatwg.org/specs/web-apps/current-work/#dom-form-checkvalidity

Patch by Michelangelo De Simone <micdesim@gmail.com> on 2009-08-21
Reviewed by Adele Peterson.

  • fast/events/invalid-001-expected.txt: Added.
  • fast/events/invalid-001.html: Added.
  • fast/events/invalid-002-expected.txt: Added.
  • fast/events/invalid-002.html: Added.
  • fast/events/invalid-003-expected.txt: Added.
  • fast/events/invalid-003.html: Added.
  • fast/events/invalid-004-expected.txt: Added.
  • fast/events/invalid-004.html: Added.
  • fast/events/invalid-005-expected.txt: Added.
  • fast/events/invalid-005.html: Added.
  • fast/forms/checkValidity-001-expected.txt: Added.
  • fast/forms/checkValidity-001.html: Added.
  • fast/forms/checkValidity-002-expected.txt: Added.
  • fast/forms/checkValidity-002.html: Added.
  • fast/forms/checkValidity-003-expected.txt: Added.
  • fast/forms/checkValidity-003.html: Added.
  • fast/forms/checkValidity-004-expected.txt: Added.
  • fast/forms/checkValidity-004.html: Added.
  • fast/dom/Window/window-properties-expected.txt:
  • fast/dom/domListEnumeration-expected.txt:
  • fast/dom/resources/domListEnumeration.js:
Location:
trunk
Files:
18 added
25 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r47648 r47649  
     12009-08-21  Michelangelo De Simone  <micdesim@gmail.com>
     2
     3        Reviewed by Adele Peterson.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=27452
     6        Tests for checkValidity() method and invalid event, from HTML5
     7        specs:
     8        http://www.whatwg.org/specs/web-apps/current-work/#dom-form-checkvalidity
     9
     10        * fast/events/invalid-001-expected.txt: Added.
     11        * fast/events/invalid-001.html: Added.
     12        * fast/events/invalid-002-expected.txt: Added.
     13        * fast/events/invalid-002.html: Added.
     14        * fast/events/invalid-003-expected.txt: Added.
     15        * fast/events/invalid-003.html: Added.
     16        * fast/events/invalid-004-expected.txt: Added.
     17        * fast/events/invalid-004.html: Added.
     18        * fast/events/invalid-005-expected.txt: Added.
     19        * fast/events/invalid-005.html: Added.
     20        * fast/forms/checkValidity-001-expected.txt: Added.
     21        * fast/forms/checkValidity-001.html: Added.
     22        * fast/forms/checkValidity-002-expected.txt: Added.
     23        * fast/forms/checkValidity-002.html: Added.
     24        * fast/forms/checkValidity-003-expected.txt: Added.
     25        * fast/forms/checkValidity-003.html: Added.
     26        * fast/forms/checkValidity-004-expected.txt: Added.
     27        * fast/forms/checkValidity-004.html: Added.
     28        * fast/dom/Window/window-properties-expected.txt:
     29        * fast/dom/domListEnumeration-expected.txt:
     30        * fast/dom/resources/domListEnumeration.js:
     31
    1322009-08-21  Beth Dakin  <bdakin@apple.com>
    233
  • trunk/LayoutTests/fast/dom/Window/window-properties-expected.txt

    r47397 r47649  
    17351735window.onhashchange [null]
    17361736window.oninput [null]
     1737window.oninvalid [null]
    17371738window.onkeydown [null]
    17381739window.onkeypress [null]
  • trunk/LayoutTests/fast/dom/domListEnumeration-expected.txt

    r46869 r47649  
    3333
    3434[object HTMLFormElement]
    35 PASS resultArray.length is 131
     35PASS resultArray.length is 132
    3636PASS resultArray[0].i is '0'
    3737PASS resultArray[0].item is document.getElementsByTagName('select')[0]
     
    4242
    4343[object HTMLSelectElement]
    44 PASS resultArray.length is 138
     44PASS resultArray.length is 139
    4545PASS resultArray[0].i is '0'
    4646PASS resultArray[0].item is document.getElementsByTagName('option')[0]
  • trunk/LayoutTests/fast/dom/resources/domListEnumeration.js

    r46869 r47649  
    131131var htmlFormElement = document.getElementsByTagName('form')[0];
    132132resultArray = iterateList(htmlFormElement);
    133 shouldBe("resultArray.length", "131");
     133shouldBe("resultArray.length", "132");
    134134shouldBe("resultArray[0].i", "'0'");
    135135shouldBe("resultArray[0].item", "document.getElementsByTagName('select')[0]");
     
    142142var htmlSelectElement = document.getElementsByTagName('select')[0];
    143143resultArray = iterateList(htmlSelectElement);
    144 shouldBe("resultArray.length", "138");
     144shouldBe("resultArray.length", "139");
    145145shouldBe("resultArray[0].i", "'0'");
    146146shouldBe("resultArray[0].item", "document.getElementsByTagName('option')[0]");
  • trunk/WebCore/ChangeLog

    r47648 r47649  
     12009-08-21  Michelangelo De Simone  <micdesim@gmail.com>
     2
     3        Reviewed by Adele Peterson.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=27452
     6        Add support for checkValidity() method and invalid event, from HTML5
     7        specs:
     8        http://www.whatwg.org/specs/web-apps/current-work/#dom-form-checkvalidity
     9
     10        Tests: fast/events/invalid-001.html
     11               fast/events/invalid-002.html
     12               fast/events/invalid-003.html
     13               fast/events/invalid-004.html
     14               fast/events/invalid-005.html
     15               fast/forms/checkValidity-001.html
     16               fast/forms/checkValidity-002.html
     17               fast/forms/checkValidity-003.html
     18               fast/forms/checkValidity-004.html
     19
     20        * dom/Document.idl: oninvalid event handler
     21        * dom/Element.idl: ditto
     22        * dom/EventNames.h: added invalid event
     23        * dom/Node.cpp:
     24        (WebCore::Node::oninvalid): ditto
     25        (WebCore::Node::setOninvalid): ditto
     26        * dom/Node.h: ditto
     27        * html/HTMLAttributeNames.in: oninvalid attribute
     28        * html/HTMLButtonElement.idl: added checkValidity() method
     29        * html/HTMLElement.cpp:
     30        (WebCore::HTMLElement::parseMappedAttribute): parses oninvalid
     31        * html/HTMLFieldSetElement.idl: added checkValidity() method
     32        * html/HTMLFormControlElement.cpp:
     33        (WebCore::HTMLFormControlElement::checkValidity): checkValidity()
     34        implementation
     35        * html/HTMLFormControlElement.h:
     36        * html/HTMLFormElement.cpp:
     37        (WebCore::HTMLFormElement::checkValidity): checkValidity() implementation
     38        for form elements
     39        * html/HTMLFormElement.h: checkValidity() definition
     40        * html/HTMLFormElement.idl: added checkValidity() method
     41        * html/HTMLInputElement.idl: added checkValidity() method
     42        * html/HTMLSelectElement.idl: added checkValidity() method
     43        * html/HTMLTextAreaElement.idl: added checkValidity() method
     44        * page/DOMWindow.cpp:
     45        (WebCore::DOMWindow::oninvalid): oninvalid event handler
     46        (WebCore::DOMWindow::setOninvalid): ditto
     47        * page/DOMWindow.h: ditto
     48        * page/DOMWindow.idl: ditto
     49
    1502009-08-21  Beth Dakin  <bdakin@apple.com>
    251
  • trunk/WebCore/dom/Document.idl

    r47562 r47649  
    265265        attribute [DontEnum] EventListener onfocus;
    266266        attribute [DontEnum] EventListener oninput;
     267        attribute [DontEnum] EventListener oninvalid;
    267268        attribute [DontEnum] EventListener onkeydown;
    268269        attribute [DontEnum] EventListener onkeypress;
     
    286287        // attribute [DontEnum] EventListener onformchange;
    287288        // attribute [DontEnum] EventListener onforminput;
    288         // attribute [DontEnum] EventListener oninvalid;
    289289        // attribute [DontEnum] EventListener onloadeddata;
    290290        // attribute [DontEnum] EventListener onloadedmetadata;
  • trunk/WebCore/dom/Element.idl

    r47165 r47649  
    150150        attribute [DontEnum] EventListener onfocus;
    151151        attribute [DontEnum] EventListener oninput;
     152        attribute [DontEnum] EventListener oninvalid;
    152153        attribute [DontEnum] EventListener onkeydown;
    153154        attribute [DontEnum] EventListener onkeypress;
     
    171172        // attribute [DontEnum] EventListener onformchange;
    172173        // attribute [DontEnum] EventListener onforminput;
    173         // attribute [DontEnum] EventListener oninvalid;
    174174        // attribute [DontEnum] EventListener onloadeddata;
    175175        // attribute [DontEnum] EventListener onloadedmetadata;
  • trunk/WebCore/dom/EventNames.h

    r47579 r47649  
    5858    macro(hashchange) \
    5959    macro(input) \
     60    macro(invalid) \
    6061    macro(keydown) \
    6162    macro(keypress) \
  • trunk/WebCore/dom/Node.cpp

    r47313 r47649  
    30693069}
    30703070
     3071EventListener* Node::oninvalid() const
     3072{
     3073    return getAttributeEventListener(eventNames().invalidEvent);
     3074}
     3075
     3076void Node::setOninvalid(PassRefPtr<EventListener> eventListener)
     3077{
     3078    setAttributeEventListener(eventNames().invalidEvent, eventListener);
     3079}
     3080
    30713081EventListener* Node::onkeydown() const
    30723082{
  • trunk/WebCore/dom/Node.h

    r47313 r47649  
    574574    EventListener* ondblclick() const;
    575575    void setOndblclick(PassRefPtr<EventListener>);
     576    EventListener* ondragenter() const;
     577    void setOndragenter(PassRefPtr<EventListener>);
     578    EventListener* ondragover() const;
     579    void setOndragover(PassRefPtr<EventListener>);
     580    EventListener* ondragleave() const;
     581    void setOndragleave(PassRefPtr<EventListener>);
     582    EventListener* ondrop() const;
     583    void setOndrop(PassRefPtr<EventListener>);
     584    EventListener* ondragstart() const;
     585    void setOndragstart(PassRefPtr<EventListener>);
     586    EventListener* ondrag() const;
     587    void setOndrag(PassRefPtr<EventListener>);
     588    EventListener* ondragend() const;
     589    void setOndragend(PassRefPtr<EventListener>);
    576590    EventListener* oninput() const;
    577591    void setOninput(PassRefPtr<EventListener>);
     592    EventListener* oninvalid() const;
     593    void setOninvalid(PassRefPtr<EventListener>);
    578594    EventListener* onkeydown() const;
    579595    void setOnkeydown(PassRefPtr<EventListener>);
     
    594610    EventListener* onmousewheel() const;
    595611    void setOnmousewheel(PassRefPtr<EventListener>);
    596     EventListener* ondragenter() const;
    597     void setOndragenter(PassRefPtr<EventListener>);
    598     EventListener* ondragover() const;
    599     void setOndragover(PassRefPtr<EventListener>);
    600     EventListener* ondragleave() const;
    601     void setOndragleave(PassRefPtr<EventListener>);
    602     EventListener* ondrop() const;
    603     void setOndrop(PassRefPtr<EventListener>);
    604     EventListener* ondragstart() const;
    605     void setOndragstart(PassRefPtr<EventListener>);
    606     EventListener* ondrag() const;
    607     void setOndrag(PassRefPtr<EventListener>);
    608     EventListener* ondragend() const;
    609     void setOndragend(PassRefPtr<EventListener>);
    610612    EventListener* onscroll() const;
    611613    void setOnscroll(PassRefPtr<EventListener>);
  • trunk/WebCore/html/HTMLAttributeNames.in

    r47581 r47649  
    148148onhashchange
    149149oninput
     150oninvalid
    150151onkeydown
    151152onkeypress
  • trunk/WebCore/html/HTMLButtonElement.idl

    r46869 r47649  
    3737                 attribute  [ConvertNullToNullString] DOMString            value;
    3838        readonly attribute boolean               willValidate;
     39        boolean  checkValidity();
    3940        void setCustomValidity(in [ConvertUndefinedOrNullToNullString] DOMString error);
    4041        void click();
  • trunk/WebCore/html/HTMLElement.cpp

    r47489 r47649  
    225225    } else if (attr->name() == oninputAttr) {
    226226        setAttributeEventListener(eventNames().inputEvent, createAttributeEventListener(this, attr));
     227    } else if (attr->name() == oninvalidAttr) {
     228        setAttributeEventListener(eventNames().invalidEvent, createAttributeEventListener(this, attr));
    227229    }
    228230}
  • trunk/WebCore/html/HTMLFieldSetElement.idl

    r46869 r47649  
    3030#endif
    3131        readonly attribute boolean         willValidate;
     32        boolean  checkValidity();
    3233        void     setCustomValidity(in [ConvertUndefinedOrNullToNullString] DOMString error);
    3334    };
  • trunk/WebCore/html/HTMLFormControlElement.cpp

    r47444 r47649  
    264264}
    265265
     266bool HTMLFormControlElement::checkValidity()
     267{
     268    if (willValidate() && !isValidFormControlElement()) {
     269        dispatchEvent(EventNames().invalidEvent, false, true);
     270        return false;
     271    }
     272
     273    return true;
     274}
     275
    266276void HTMLFormControlElement::setCustomValidity(const String& error)
    267277{
  • trunk/WebCore/html/HTMLFormControlElement.h

    r47444 r47649  
    103103
    104104    virtual bool willValidate() const;
     105    bool checkValidity();
    105106    void setCustomValidity(const String&);
    106107
  • trunk/WebCore/html/HTMLFormElement.cpp

    r47155 r47649  
    4848#include "Page.h"
    4949#include "RenderTextControl.h"
     50#include "ValidityState.h"
    5051#include <limits>
    5152#include <wtf/CurrentTime.h>
     
    589590}
    590591
     592bool HTMLFormElement::checkValidity()
     593{
     594    // TODO: Check for unhandled invalid controls, see #27452 for tips.
     595
     596    bool hasOnlyValidControls = true;
     597    for (unsigned i = 0; i < formElements.size(); ++i) {
     598        HTMLFormControlElement* control = formElements[i];
     599        if (!control->checkValidity())
     600            hasOnlyValidControls = false;
     601    }
     602
     603    return hasOnlyValidControls;
     604}
     605
    591606PassRefPtr<HTMLFormControlElement> HTMLFormElement::elementForAlias(const AtomicString& alias)
    592607{
  • trunk/WebCore/html/HTMLFormElement.h

    r47155 r47649  
    110110
    111111    HTMLFormControlElement* defaultButton() const;
    112    
     112
     113    bool checkValidity();
     114
    113115    PassRefPtr<HTMLFormControlElement> elementForAlias(const AtomicString&);
    114116    void addElementAlias(HTMLFormControlElement*, const AtomicString& alias);
  • trunk/WebCore/html/HTMLFormElement.idl

    r40424 r47649  
    4040        [Custom] void submit();
    4141        void reset();
     42        boolean  checkValidity();
    4243    };
    4344}
  • trunk/WebCore/html/HTMLInputElement.idl

    r46869 r47649  
    5757                 attribute [ConvertNullToNullString] DOMString value;
    5858        readonly attribute boolean         willValidate;
     59        boolean            checkValidity();
    5960        void               setCustomValidity(in [ConvertUndefinedOrNullToNullString] DOMString error);
    6061        void               select();
  • trunk/WebCore/html/HTMLSelectElement.idl

    r46869 r47649  
    4646#endif
    4747        readonly attribute boolean         willValidate;
     48        boolean            checkValidity();
    4849        void               setCustomValidity(in [ConvertUndefinedOrNullToNullString] DOMString error);
    4950
  • trunk/WebCore/html/HTMLTextAreaElement.idl

    r46869 r47649  
    4545
    4646        readonly attribute boolean         willValidate;
     47        boolean  checkValidity();
    4748        void     setCustomValidity(in [ConvertUndefinedOrNullToNullString] DOMString error);
    4849
  • trunk/WebCore/page/DOMWindow.cpp

    r47233 r47649  
    20462046}
    20472047
     2048EventListener* DOMWindow::oninvalid() const
     2049{
     2050    return getAttributeEventListener(eventNames().invalidEvent);
     2051}
     2052
     2053void DOMWindow::setOninvalid(PassRefPtr<EventListener> eventListener)
     2054{
     2055    setAttributeEventListener(eventNames().invalidEvent, eventListener);
     2056}
     2057
    20482058void DOMWindow::captureEvents()
    20492059{
  • trunk/WebCore/page/DOMWindow.h

    r47233 r47649  
    375375        EventListener* oncontextmenu() const;
    376376        void setOncontextmenu(PassRefPtr<EventListener>);
     377        EventListener* oninvalid() const;
     378        void setOninvalid(PassRefPtr<EventListener>);
    377379
    378380        void captureEvents();
  • trunk/WebCore/page/DOMWindow.idl

    r47323 r47649  
    217217        attribute EventListener onhashchange;
    218218        attribute EventListener oninput;
     219        attribute EventListener oninvalid;
    219220        attribute EventListener onkeydown;
    220221        attribute EventListener onkeypress;
     
    258259        // attribute EventListener onforminput;
    259260        // attribute EventListener onhashchange;
    260         // attribute EventListener oninvalid;
    261261        // attribute EventListener onpopstate;
    262262        // attribute EventListener onreadystatechange;
Note: See TracChangeset for help on using the changeset viewer.