Changeset 212522 in webkit


Ignore:
Timestamp:
Feb 16, 2017 8:30:45 PM (7 years ago)
Author:
Chris Dumez
Message:

<input>.labels is empty if type changes from text->hidden->checkbox
https://bugs.webkit.org/show_bug.cgi?id=168358

Reviewed by Ryosuke Niwa.

LayoutTests/imported/w3c:

Re-sync web-platform-test from:
https://github.com/w3c/web-platform-tests/pull/4804

  • web-platform-tests/html/semantics/forms/the-label-element/labelable-elements-expected.txt:
  • web-platform-tests/html/semantics/forms/the-label-element/labelable-elements.html:

Source/WebCore:

We were invalidating LabelsNodeLists on 'for' attribute change.
We now also invalidate them of 'type' attribute change since
HTMLInputElements whose type is 'hidden' do not support labels.

No new tests, updated existing test.

  • dom/Document.h:
  • dom/LiveNodeList.h:

(WebCore::shouldInvalidateTypeOnAttributeChange):

  • html/LabelsNodeList.cpp:

(WebCore::LabelsNodeList::LabelsNodeList):

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r212470 r212522  
     12017-02-16  Chris Dumez  <cdumez@apple.com>
     2
     3        <input>.labels is empty if type changes from text->hidden->checkbox
     4        https://bugs.webkit.org/show_bug.cgi?id=168358
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        Re-sync web-platform-test from:
     9        https://github.com/w3c/web-platform-tests/pull/4804
     10
     11        * web-platform-tests/html/semantics/forms/the-label-element/labelable-elements-expected.txt:
     12        * web-platform-tests/html/semantics/forms/the-label-element/labelable-elements.html:
     13
    1142017-02-16  Alex Christensen  <achristensen@webkit.org>
    215
  • trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/forms/the-label-element/labelable-elements-expected.txt

    r210823 r212522  
    1111PASS Check if the button element can access 'labels'
    1212PASS Check if the hidden input element is not a labelable element.
    13 FAIL Check if the hidden input element can access 'labels' null is not an object (evaluating 'elem.labels.length')
     13PASS Check if the hidden input element has null 'labels'
    1414PASS Check if the input element in radio state is a labelable element
    1515PASS Check if the input element in radio state can access 'labels'
  • trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/forms/the-label-element/labelable-elements.html

    r210823 r212522  
    3737
    3838<script>
    39 function testLabelsAttr(formElementId, labelElementId, hasLabels) {
     39function testLabelsAttr(formElementId, labelElementId) {
    4040  var elem = document.getElementById(formElementId);
    4141  if (labelElementId) {
     
    9292
    9393test(function() {
    94   testLabelsAttr("testHidden", null);
    95 }, "Check if the hidden input element can access 'labels'");
     94  var hiddenInput = document.getElementById("testHidden");
     95  assert_equals(hiddenInput.labels, null, "input[type=hidden] must have null .labels");
     96
     97  this.add_cleanup(function () {
     98    hiddenInput.type = "hidden";
     99  });
     100
     101  hiddenInput.type = "text";
     102  testLabelsAttr("testHidden", "lbl5");
     103  var labels = hiddenInput.labels;
     104
     105  hiddenInput.type = "hidden";
     106  assert_equals(labels.length, 0, "Retained .labels NodeList should be empty after input type changed to hidden");
     107
     108  hiddenInput.type = "checkbox";
     109  assert_true(labels === hiddenInput.labels, ".labels property must return the [SameObject] after input type is toggled back from 'hidden'");
     110  assert_equals(hiddenInput.labels.length, 1, ".labels NodeList should contain the input after the input type is changed from 'hidden' to 'checkbox'");
     111}, "Check if the hidden input element has null 'labels'");
    96112
    97113test(function() {
  • trunk/Source/WebCore/ChangeLog

    r212521 r212522  
     12017-02-16  Chris Dumez  <cdumez@apple.com>
     2
     3        <input>.labels is empty if type changes from text->hidden->checkbox
     4        https://bugs.webkit.org/show_bug.cgi?id=168358
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        We were invalidating LabelsNodeLists on 'for' attribute change.
     9        We now also invalidate them of 'type' attribute change since
     10        HTMLInputElements whose type is 'hidden' do not support labels.
     11
     12        No new tests, updated existing test.
     13
     14        * dom/Document.h:
     15        * dom/LiveNodeList.h:
     16        (WebCore::shouldInvalidateTypeOnAttributeChange):
     17        * html/LabelsNodeList.cpp:
     18        (WebCore::LabelsNodeList::LabelsNodeList):
     19
    1202017-02-16  Michael Catanzaro  <mcatanzaro@igalia.com>
    221
  • trunk/Source/WebCore/dom/Document.h

    r212463 r212522  
    231231    InvalidateOnIdNameAttrChange,
    232232    InvalidateOnNameAttrChange,
    233     InvalidateOnForAttrChange,
     233    InvalidateOnForTypeAttrChange,
    234234    InvalidateForFormControls,
    235235    InvalidateOnHRefAttrChange,
  • trunk/Source/WebCore/dom/LiveNodeList.h

    r211591 r212522  
    114114    case InvalidateOnIdNameAttrChange:
    115115        return attrName == HTMLNames::idAttr || attrName == HTMLNames::nameAttr;
    116     case InvalidateOnForAttrChange:
    117         return attrName == HTMLNames::forAttr;
     116    case InvalidateOnForTypeAttrChange:
     117        return attrName == HTMLNames::forAttr || attrName == HTMLNames::typeAttr;
    118118    case InvalidateForFormControls:
    119119        return attrName == HTMLNames::nameAttr || attrName == HTMLNames::idAttr || attrName == HTMLNames::forAttr
  • trunk/Source/WebCore/html/LabelsNodeList.cpp

    r173980 r212522  
    3535
    3636LabelsNodeList::LabelsNodeList(LabelableElement& forNode)
    37     : CachedLiveNodeList(forNode, InvalidateOnForAttrChange)
     37    : CachedLiveNodeList(forNode, InvalidateOnForTypeAttrChange)
    3838{
    3939}
Note: See TracChangeset for help on using the changeset viewer.