Source/WebCore: [Forms] Hidden input element should not have labels.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 14 Mar 2012 06:54:01 +0000 (06:54 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 14 Mar 2012 06:54:01 +0000 (06:54 +0000)
https://bugs.webkit.org/show_bug.cgi?id=80403

Patch by Yosifumi Inoue <yosin@chromium.org> on 2012-03-13
Reviewed by Kent Tamura.

This patch changes "labels" attribute behavior for hidden input type.
It returns null instead of NodeList of labels or empty node list.

Note: The HTML5 specification isn't clear for non-labelable element's "labels"
attribute return value. Firefox and Opera return empty node list. IE returns null.

No new tests. Existing tests are updated.

* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::isLabelable): Added. Dispatch to InputType.
* html/HiddenInputType.h:  Added isLabelable returning false.
* html/InputType.cpp:
(WebCore::InputType::isLabelable): Added. Returning true for all input types except for "hidden" type.
(WebCore):
* html/InputType.h:
(InputType): Added isLabelable declaration.

LayoutTests: [Forms] Hidden input element should not have labels.
https://bugs.webkit.org/show_bug.cgi?id=80403

Patch by Yosifumi Inoue <yosin@chromium.org> on 2012-03-13
Reviewed by Kent Tamura.

This patch changes expected text for null value of labels attribute
of hidden input type and labelable-elements to check null value for
the labels attribute of input type.

* fast/forms/label/labelable-elements-expected.txt:
* fast/forms/label/labelable-elements.html:
* fast/forms/label/labels-add-htmlFor-label-expected.txt:
* fast/forms/label/labels-add-parent-label-expected.txt:
* fast/forms/label/labels-change-htmlFor-attribute-expected.txt:
* fast/forms/label/labels-multiple-sibling-labels-expected.txt:
* fast/forms/label/labels-parent-and-sibling-labels-expected.txt:
* fast/forms/label/labels-remove-htmlFor-attribute-expected.txt:
* fast/forms/label/labels-remove-htmlFor-label-expected.txt:
* fast/forms/label/labels-remove-parent-label-expected.txt:
* fast/forms/label/labels-set-htmlFor-attribute-expected.txt:
* platform/chromium/fast/forms/label/labelable-elements-expected.txt:
* platform/mac/fast/forms/label/labelable-elements-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@110665 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/forms/label/labelable-elements-expected.txt
LayoutTests/fast/forms/label/labelable-elements.html
LayoutTests/fast/forms/label/labels-add-htmlFor-label-expected.txt
LayoutTests/fast/forms/label/labels-add-parent-label-expected.txt
LayoutTests/fast/forms/label/labels-change-htmlFor-attribute-expected.txt
LayoutTests/fast/forms/label/labels-multiple-sibling-labels-expected.txt
LayoutTests/fast/forms/label/labels-parent-and-sibling-labels-expected.txt
LayoutTests/fast/forms/label/labels-remove-htmlFor-attribute-expected.txt
LayoutTests/fast/forms/label/labels-remove-htmlFor-label-expected.txt
LayoutTests/fast/forms/label/labels-remove-parent-label-expected.txt
LayoutTests/fast/forms/label/labels-set-htmlFor-attribute-expected.txt
LayoutTests/platform/chromium/fast/forms/label/labelable-elements-expected.txt
LayoutTests/platform/mac/fast/forms/label/labelable-elements-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/html/HTMLInputElement.cpp
Source/WebCore/html/HiddenInputType.h
Source/WebCore/html/InputType.cpp
Source/WebCore/html/InputType.h

index de681a1..8f0f541 100644 (file)
@@ -1,5 +1,30 @@
 2012-03-13  Yosifumi Inoue  <yosin@chromium.org>
 
+        [Forms] Hidden input element should not have labels.
+        https://bugs.webkit.org/show_bug.cgi?id=80403
+
+        Reviewed by Kent Tamura.
+
+        This patch changes expected text for null value of labels attribute
+        of hidden input type and labelable-elements to check null value for
+        the labels attribute of input type.
+
+        * fast/forms/label/labelable-elements-expected.txt:
+        * fast/forms/label/labelable-elements.html:
+        * fast/forms/label/labels-add-htmlFor-label-expected.txt:
+        * fast/forms/label/labels-add-parent-label-expected.txt:
+        * fast/forms/label/labels-change-htmlFor-attribute-expected.txt:
+        * fast/forms/label/labels-multiple-sibling-labels-expected.txt:
+        * fast/forms/label/labels-parent-and-sibling-labels-expected.txt:
+        * fast/forms/label/labels-remove-htmlFor-attribute-expected.txt:
+        * fast/forms/label/labels-remove-htmlFor-label-expected.txt:
+        * fast/forms/label/labels-remove-parent-label-expected.txt:
+        * fast/forms/label/labels-set-htmlFor-attribute-expected.txt:
+        * platform/chromium/fast/forms/label/labelable-elements-expected.txt:
+        * platform/mac/fast/forms/label/labelable-elements-expected.txt:
+
+2012-03-13  Yosifumi Inoue  <yosin@chromium.org>
+
         [Forms] The "output" element should have labels.
         https://bugs.webkit.org/show_bug.cgi?id=80466
 
index bd921fa..e566c03 100644 (file)
@@ -81,8 +81,7 @@ Labelable: fileType [object HTMLInputElement]
 PASS element.labels.length is 1
 
 Not labelable: hiddenType [object HTMLInputElement]
-FAIL element.labels should be undefined. Was [object NodeList]
-PASS element.labels is not null
+PASS element.labels is null
 
 Labelable: imageType [object HTMLInputElement]
 PASS element.labels.length is 1
index 6fb681e..c23b6e0 100644 (file)
@@ -21,8 +21,14 @@ for (var name in tester.dataSet) {
         shouldNotBe('element.labels', 'null');
     } else if (!data.isLabelable) {
         debug('\nNot labelable: ' + name + ' ' + element);
-        shouldBeUndefined('element.labels');
-        shouldNotBe('element.labels', 'null');
+        if (data.inputType) {
+            // Note: labels attribute of input element isn't undefined,
+            // because HTMLInputElement.idl defines labels attribute.
+            shouldBe('element.labels', 'null');
+        } else {
+            shouldBeUndefined('element.labels');
+            shouldNotBe('element.labels', 'null');
+        }
     } else {
         debug('\nLabelable: ' + name + ' ' + element);
         shouldBe('element.labels.length', '1');
index 8b200b1..104502b 100644 (file)
@@ -51,9 +51,6 @@ PASS element.labels.length is 1
 Check fileType
 PASS element.labels.length is 0
 PASS element.labels.length is 1
-Check hiddenType
-PASS element.labels.length is 0
-PASS element.labels.length is 1
 Check imageType
 PASS element.labels.length is 0
 PASS element.labels.length is 1
index d063e15..871d696 100644 (file)
@@ -51,9 +51,6 @@ PASS element.labels.length is 1
 Check fileType
 PASS element.labels.length is 0
 PASS element.labels.length is 1
-Check hiddenType
-PASS element.labels.length is 0
-PASS element.labels.length is 1
 Check imageType
 PASS element.labels.length is 0
 PASS element.labels.length is 1
index bdbf977..b4a1859 100644 (file)
@@ -51,9 +51,6 @@ PASS element.labels.length is 1
 Check fileType
 PASS element.labels.length is 0
 PASS element.labels.length is 1
-Check hiddenType
-PASS element.labels.length is 0
-PASS element.labels.length is 1
 Check imageType
 PASS element.labels.length is 0
 PASS element.labels.length is 1
index 2f13a29..ef0ebc8 100644 (file)
@@ -35,8 +35,6 @@ Check emailType
 PASS element.labels.length is 2
 Check fileType
 PASS element.labels.length is 2
-Check hiddenType
-PASS element.labels.length is 2
 Check imageType
 PASS element.labels.length is 2
 Check monthType
index 226ddb7..6e64cca 100644 (file)
@@ -35,8 +35,6 @@ Check emailType
 PASS element.labels.length is 2
 Check fileType
 PASS element.labels.length is 2
-Check hiddenType
-PASS element.labels.length is 2
 Check imageType
 PASS element.labels.length is 2
 Check monthType
index 3c138d5..6d4ce0b 100644 (file)
@@ -51,9 +51,6 @@ PASS element.labels.length is 0
 Check fileType
 PASS element.labels.length is 1
 PASS element.labels.length is 0
-Check hiddenType
-PASS element.labels.length is 1
-PASS element.labels.length is 0
 Check imageType
 PASS element.labels.length is 1
 PASS element.labels.length is 0
index 0806331..336b960 100644 (file)
@@ -51,9 +51,6 @@ PASS element.labels.length is 0
 Check fileType
 PASS element.labels.length is 1
 PASS element.labels.length is 0
-Check hiddenType
-PASS element.labels.length is 1
-PASS element.labels.length is 0
 Check imageType
 PASS element.labels.length is 1
 PASS element.labels.length is 0
index 493b1c2..f55ad3f 100644 (file)
@@ -51,9 +51,6 @@ PASS element.labels.length is 0
 Check fileType
 PASS element.labels.length is 1
 PASS element.labels.length is 0
-Check hiddenType
-PASS element.labels.length is 1
-PASS element.labels.length is 0
 Check imageType
 PASS element.labels.length is 1
 PASS element.labels.length is 0
index bdbf977..b4a1859 100644 (file)
@@ -51,9 +51,6 @@ PASS element.labels.length is 1
 Check fileType
 PASS element.labels.length is 0
 PASS element.labels.length is 1
-Check hiddenType
-PASS element.labels.length is 0
-PASS element.labels.length is 1
 Check imageType
 PASS element.labels.length is 0
 PASS element.labels.length is 1
index bd921fa..e566c03 100644 (file)
@@ -81,8 +81,7 @@ Labelable: fileType [object HTMLInputElement]
 PASS element.labels.length is 1
 
 Not labelable: hiddenType [object HTMLInputElement]
-FAIL element.labels should be undefined. Was [object NodeList]
-PASS element.labels is not null
+PASS element.labels is null
 
 Labelable: imageType [object HTMLInputElement]
 PASS element.labels.length is 1
index 72943af..ff6e41a 100644 (file)
@@ -81,8 +81,7 @@ Labelable: fileType [object HTMLInputElement]
 PASS element.labels.length is 1
 
 Not labelable: hiddenType [object HTMLInputElement]
-FAIL element.labels should be undefined. Was [object NodeList]
-PASS element.labels is not null
+PASS element.labels is null
 
 Labelable: imageType [object HTMLInputElement]
 PASS element.labels.length is 1
index 7355e5a..b6f1fd1 100644 (file)
@@ -1,5 +1,29 @@
 2012-03-13  Yosifumi Inoue  <yosin@chromium.org>
 
+        [Forms] Hidden input element should not have labels. 
+        https://bugs.webkit.org/show_bug.cgi?id=80403
+
+        Reviewed by Kent Tamura.
+
+        This patch changes "labels" attribute behavior for hidden input type.
+        It returns null instead of NodeList of labels or empty node list.
+
+        Note: The HTML5 specification isn't clear for non-labelable element's "labels"
+        attribute return value. Firefox and Opera return empty node list. IE returns null.
+
+        No new tests. Existing tests are updated.
+
+        * html/HTMLInputElement.cpp:
+        (WebCore::HTMLInputElement::isLabelable): Added. Dispatch to InputType.
+        * html/HiddenInputType.h:  Added isLabelable returning false.
+        * html/InputType.cpp:
+        (WebCore::InputType::isLabelable): Added. Returning true for all input types except for "hidden" type.
+        (WebCore):
+        * html/InputType.h:
+        (InputType): Added isLabelable declaration.
+
+2012-03-13  Yosifumi Inoue  <yosin@chromium.org>
+
         [Forms] The "output" element should have labels.
         https://bugs.webkit.org/show_bug.cgi?id=80466
 
index cd078d1..eca144a 100644 (file)
@@ -1763,8 +1763,7 @@ bool HTMLInputElement::isEnumeratable() const
 
 bool HTMLInputElement::isLabelable() const
 {
-    // FIXME: We should return false for type="hidden".
-    return true;
+    return m_inputType->isLabelable();
 }
 
 bool HTMLInputElement::shouldAppearChecked() const
index 40af7d7..75d3663 100644 (file)
@@ -50,6 +50,7 @@ private:
     virtual bool rendererIsNeeded() OVERRIDE;
     virtual bool storesValueSeparateFromAttribute() OVERRIDE;
     virtual bool isHiddenType() const OVERRIDE;
+    virtual bool isLabelable() const OVERRIDE { return false; }
     virtual bool shouldRespectHeightAndWidthAttributes() OVERRIDE;
     virtual void setValue(const String&, bool, TextFieldEventBehavior) OVERRIDE;
     virtual bool appendFormData(FormDataList&, bool) const OVERRIDE;
index 1366382..2e1adbd 100644 (file)
@@ -658,6 +658,11 @@ bool InputType::isImageButton() const
     return false;
 }
 
+bool InputType::isLabelable() const
+{
+    return true;
+}
+
 bool InputType::isNumberField() const
 {
     return false;
index 04b580c..aafd76d 100644 (file)
@@ -100,6 +100,7 @@ public:
     virtual bool isFileUpload() const;
     virtual bool isHiddenType() const;
     virtual bool isImageButton() const;
+    virtual bool isLabelable() const;
     virtual bool isNumberField() const;
     virtual bool isPasswordField() const;
     virtual bool isRadioButton() const;