Changeset 86744 in webkit


Ignore:
Timestamp:
May 18, 2011 2:33:42 AM (13 years ago)
Author:
tkent@chromium.org
Message:

2011-05-18 Kent Tamura <tkent@chromium.org>

Reviewed by Hajime Morita.

valueMissing validity for <select> is lame when selecting a value by a key operation
https://bugs.webkit.org/show_bug.cgi?id=61021

Add test cases for the bug.

  • fast/forms/ValidityState-valueMissing-002-expected.txt:
  • fast/forms/ValidityState-valueMissing-002.html:

2011-05-18 Kent Tamura <tkent@chromium.org>

Reviewed by Hajime Morita.

valueMissing validity for <select> is lame when selecting a value by a key operation
https://bugs.webkit.org/show_bug.cgi?id=61021

We missed updating validity in case that SelectElement::defaultEventHandler
update selections. So, SelectElement::setSelectedIndex() updates validity.

  • dom/SelectElement.cpp: (WebCore::SelectElement::setSelectedIndex): Call SelectElement::updateValidity().
  • html/HTMLSelectElement.cpp: (WebCore::HTMLSelectElement::setSelectedIndex): Remove unnecessary setNeedsValidityCheck() call. SelectElement::setSlectedIndex() calls it. (WebCore::HTMLSelectElement::setSelectedIndexByUser): ditto.
Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r86742 r86744  
     12011-05-18  Kent Tamura  <tkent@chromium.org>
     2
     3        Reviewed by Hajime Morita.
     4
     5        valueMissing validity for <select> is lame when selecting a value by a key operation
     6        https://bugs.webkit.org/show_bug.cgi?id=61021
     7
     8        Add test cases for the bug.
     9
     10        * fast/forms/ValidityState-valueMissing-002-expected.txt:
     11        * fast/forms/ValidityState-valueMissing-002.html:
     12
    1132011-05-18  Kristóf Kosztyó  <Kosztyo.Kristof@stud.u-szeged.hu>
    214
  • trunk/LayoutTests/fast/forms/ValidityState-valueMissing-002-expected.txt

    r73606 r86744  
    1414PASS valueMissingFor("select-with-fake-placeholder-size2-multiple") is false
    1515PASS valueMissingFor("select-without-fake-placeholder-size2-multiple") is false
     16Updating valueMissing state by a key input:
     17PASS valueMissingFor("select-selecting-by-key") is true
     18PASS select.value is "a"
     19PASS valueMissingFor("select-selecting-by-key") is false
     20PASS valueMissingFor("select-selecting-by-key-2") is true
     21PASS select.value is "a"
     22PASS valueMissingFor("select-selecting-by-key-2") is false
    1623PASS successfullyParsed is true
    1724
    1825TEST COMPLETE
    19          
     26
  • trunk/LayoutTests/fast/forms/ValidityState-valueMissing-002.html

    r73606 r86744  
    99<p id="description"></p>
    1010<div id="console"></div>
     11<div id=parent>
    1112<input id="input" name="victim" value="something" required/>
    1213<textarea id="textarea" name="victim" required>something</textarea>
     
    4344  <option value="" />
    4445</select>
     46<select id=select-selecting-by-key required>
     47  <option value="" selected/>
     48  <option>a</option>
     49</select>
     50<select id=select-selecting-by-key-2 required>
     51  <option value="" selected/>
     52  <option accesskey="1">a</option>
     53</select>
     54</div>
    4555<script language="JavaScript" type="text/javascript">
    4656    function valueMissingFor(id) {
     
    4959
    5060    description("This test checks validity.valueMissing with some values or options with some values selected.");
    51 
    52     v = document.getElementsByName("victim");
    5361
    5462    shouldBeFalse('valueMissingFor("input")');
     
    6371    shouldBeFalse('valueMissingFor("select-without-fake-placeholder-size2-multiple")');
    6472
     73    // Need to use eventSender instead of initKeyboardEvent() because we can't
     74    // make an event which returns a correct value for keyCode by initKeyboardEvent().
     75    if (window.eventSender) {
     76        debug("Updating valueMissing state by a key input:")
     77        // Select by type-ahead.
     78        var select = document.getElementById("select-selecting-by-key");
     79        shouldBeTrue('valueMissingFor("select-selecting-by-key")');
     80        select.focus();
     81        eventSender.keyDown("a");
     82        shouldBe('select.value', '"a"');
     83        shouldBeFalse('valueMissingFor("select-selecting-by-key")');
     84
     85        // Select by accesskey.
     86        select = document.getElementById("select-selecting-by-key-2");
     87        shouldBeTrue('valueMissingFor("select-selecting-by-key-2")');
     88        select.focus();
     89        var modifiers;
     90        if (navigator.userAgent.search(/\bMac OS X\b/) != -1)
     91            modifiers = ['ctrlKey', 'altKey'];
     92        else
     93            modifiers = ['altKey'];
     94        eventSender.keyDown("1", modifiers);
     95        shouldBe('select.value', '"a"');
     96        shouldBeFalse('valueMissingFor("select-selecting-by-key-2")');
     97    } else {
     98        debug('There are tests using eventSender.');
     99    }
     100
     101    document.body.removeChild(document.getElementById('parent'));
    65102    var successfullyParsed = true;
    66103</script>
  • trunk/Source/WebCore/ChangeLog

    r86743 r86744  
     12011-05-18  Kent Tamura  <tkent@chromium.org>
     2
     3        Reviewed by Hajime Morita.
     4
     5        valueMissing validity for <select> is lame when selecting a value by a key operation
     6        https://bugs.webkit.org/show_bug.cgi?id=61021
     7
     8        We missed updating validity in case that SelectElement::defaultEventHandler
     9        update selections.  So, SelectElement::setSelectedIndex() updates validity.
     10
     11        * dom/SelectElement.cpp:
     12        (WebCore::SelectElement::setSelectedIndex): Call SelectElement::updateValidity().
     13        * html/HTMLSelectElement.cpp:
     14        (WebCore::HTMLSelectElement::setSelectedIndex):
     15          Remove unnecessary setNeedsValidityCheck() call.
     16          SelectElement::setSlectedIndex() calls it.
     17        (WebCore::HTMLSelectElement::setSelectedIndexByUser): ditto.
     18
    1192011-05-17  Mikhail Naganov  <mnaganov@chromium.org>
    220
  • trunk/Source/WebCore/dom/SelectElement.cpp

    r86135 r86744  
    396396    }
    397397
     398    toSelectElement(element)->updateValidity();
    398399    if (Frame* frame = element->document()->frame())
    399400        frame->page()->chrome()->client()->formStateDidChange(element);
  • trunk/Source/WebCore/html/HTMLSelectElement.cpp

    r80808 r86744  
    8585{
    8686    SelectElement::setSelectedIndex(m_data, this, optionIndex, deselect, false, false);
    87     setNeedsValidityCheck();
    8887}
    8988
     
    108107   
    109108    SelectElement::setSelectedIndex(m_data, this, optionIndex, deselect, fireOnChangeNow, true);
    110     setNeedsValidityCheck();
    111109}
    112110
Note: See TracChangeset for help on using the changeset viewer.