RadioNodeList does not include a object element
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 May 2012 08:51:07 +0000 (08:51 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 25 May 2012 08:51:07 +0000 (08:51 +0000)
https://bugs.webkit.org/show_bug.cgi?id=87371

Patch by Rakesh KN <rakesh.kn@motorola.com> on 2012-05-25
Reviewed by Kent Tamura.

Source/WebCore:

As per spec http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#category-listed
Object element should also be listed in RadioNodeList object.

Updated existing test.

* html/RadioNodeList.cpp:
(WebCore::RadioNodeList::checkElementMatchesRadioNodeListFilter):
Compares if test element's name/id  and form matches that of the RadioNodeList filter.
(WebCore::RadioNodeList::nodeMatches):
Added support for Object element, check if object elements name/id matches the RadioNodeList filter.
* html/RadioNodeList.h:
(RadioNodeList): Ditto

LayoutTests:

* fast/forms/form-collection-radio-node-list-expected.txt:
* fast/forms/form-collection-radio-node-list.html:
Updated test to include test for object element.

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

LayoutTests/ChangeLog
LayoutTests/fast/forms/form-collection-radio-node-list-expected.txt
LayoutTests/fast/forms/form-collection-radio-node-list.html
Source/WebCore/ChangeLog
Source/WebCore/html/RadioNodeList.cpp
Source/WebCore/html/RadioNodeList.h

index 178eee5..c935bb8 100644 (file)
@@ -1,3 +1,14 @@
+2012-05-25  Rakesh KN  <rakesh.kn@motorola.com>
+
+        RadioNodeList does not include a object element
+        https://bugs.webkit.org/show_bug.cgi?id=87371
+
+        Reviewed by Kent Tamura.
+
+        * fast/forms/form-collection-radio-node-list-expected.txt:
+        * fast/forms/form-collection-radio-node-list.html:
+        Updated test to include test for object element.
+
 2012-05-25  Jan Keromnes  <janx@linux.com>
 
         Web Inspector: Resource object has no methods getContent and setContent
index 1cc511d..878f04d 100644 (file)
@@ -51,6 +51,11 @@ PASS radioNodeList2[2].type is 'reset'
 After changing the id
 PASS radioNodeList2.length is 2
 
+Check that object element also reflects in RadioNodeList.
+PASS radioNodeList.length is 5
+
+Check that object element does not reflect in RadioNodeList if its owner form is not present.
+PASS container.appendChild(nonSubtreeObjectElement); radioNodeList.length is 5
 PASS successfullyParsed is true
 
 TEST COMPLETE
index f82f4df..7fb8b9b 100644 (file)
@@ -123,6 +123,16 @@ debug("After changing the id");
 shouldBe('radioNodeList2.length', '2');
 debug("");
 
+debug("Check that object element also reflects in RadioNodeList.");
+document.getElementById("object1").id = "inputcommon";
+shouldBe('radioNodeList.length', '5');
+
+debug("");
+debug("Check that object element does not reflect in RadioNodeList if its owner form is not present.");
+var nonSubtreeObjectElement = document.createElement("object");
+nonSubtreeObjectElement.setAttribute("id", "inputcommon");
+shouldBe('container.appendChild(nonSubtreeObjectElement); radioNodeList.length', '5');
+
 container.parentNode.removeChild(container);
 </script>
 <script src="../js/resources/js-test-post.js"></script>
index 636ba67..4669f3b 100644 (file)
@@ -1,3 +1,23 @@
+2012-05-25  Rakesh KN  <rakesh.kn@motorola.com>
+
+        RadioNodeList does not include a object element
+        https://bugs.webkit.org/show_bug.cgi?id=87371
+
+        Reviewed by Kent Tamura.
+
+        As per spec http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#category-listed
+        Object element should also be listed in RadioNodeList object.
+
+        Updated existing test.
+
+        * html/RadioNodeList.cpp:
+        (WebCore::RadioNodeList::checkElementMatchesRadioNodeListFilter):
+        Compares if test element's name/id  and form matches that of the RadioNodeList filter.
+        (WebCore::RadioNodeList::nodeMatches):
+        Added support for Object element, check if object elements name/id matches the RadioNodeList filter.
+        * html/RadioNodeList.h:
+        (RadioNodeList): Ditto
+
 2012-05-25  Jan Keromnes  <janx@linux.com>
 
         Web Inspector: Resource object has no methods getContent and setContent
index 2a1af38..b34a6c9 100644 (file)
@@ -30,6 +30,7 @@
 #include "HTMLFormElement.h"
 #include "HTMLInputElement.h"
 #include "HTMLNames.h"
+#include "HTMLObjectElement.h"
 
 namespace WebCore {
 
@@ -82,13 +83,23 @@ void RadioNodeList::setValue(const String& value)
     }
 }
 
-bool RadioNodeList::nodeMatches(Element* testElement) const
+bool RadioNodeList::checkElementMatchesRadioNodeListFilter(Element* testElement) const
 {
-    if (!testElement->isFormControlElement())
+    ASSERT(testElement->hasTagName(objectTag) || testElement->isFormControlElement());
+    HTMLFormElement* formElement = 0;
+    if (testElement->hasTagName(objectTag))
+        formElement = static_cast<HTMLObjectElement*>(testElement)->form();
+    else
+        formElement = static_cast<HTMLFormControlElement*>(testElement)->form();
+    if (!formElement || formElement != m_formElement)
         return false;
 
-    HTMLFormElement* formElement = static_cast<HTMLFormControlElement*>(testElement)->form();
-    if (!formElement || formElement != m_formElement)
+    return testElement->getIdAttribute() == m_name || testElement->getNameAttribute() == m_name;
+}
+
+bool RadioNodeList::nodeMatches(Element* testElement) const
+{
+    if (!testElement->hasTagName(objectTag) && !testElement->isFormControlElement())
         return false;
 
     if (HTMLInputElement* inputElement = testElement->toInputElement()) {
@@ -96,7 +107,7 @@ bool RadioNodeList::nodeMatches(Element* testElement) const
             return false;
     }
 
-    return testElement->getIdAttribute() ==  m_name || testElement->getNameAttribute() == m_name;
+    return checkElementMatchesRadioNodeListFilter(testElement);
 }
 
 } // namspace
index ebde797..becb52e 100644 (file)
@@ -51,6 +51,7 @@ protected:
 
 private:
     RadioNodeList(const AtomicString& name, Element*);
+    bool checkElementMatchesRadioNodeListFilter(Element*) const;
 
     AtomicString m_name;
     RefPtr<Element> m_formElement;