[Forms] The "progress" element should not be a form-associated element.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 16 Mar 2012 15:01:16 +0000 (15:01 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 16 Mar 2012 15:01:16 +0000 (15:01 +0000)
https://bugs.webkit.org/show_bug.cgi?id=80240

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

Source/WebCore:

This patch changes base class of HTMLProgressElement to LabelableElement from
HTMLFormControlElement for saving memory space and iteration time of
extra "progress" elements in HTMLFormElement::m_formAssociatedElements
and matching the HTML5 specification for ease of maintenance.

Changes of TextIterator is lead by usage of isFormControlElement. This
changes will be replaced with more meaningful predicate as part of
https://bugs.webkit.org/show_bug.cgi?id=80381

No new tests. Update existing tests to cover this change.

* css/CSSStyleSelector.cpp:
(WebCore::CSSStyleSelector::canShareStyleWithElement): Moved the "progress" element support code from canShareStyleWithControl.
(WebCore::CSSStyleSelector::canShareStyleWithControl):
* css/SelectorChecker.cpp:
(WebCore::SelectorChecker::checkOneSelector): Remove isFormControlElement check for PseudoIndeterminate.
* editing/TextIterator.cpp:
(WebCore::TextIterator::advance): Check HTMLProgressElement in addition to isFormControlElement. This change is for text dump in LayoutTests implemented by document.innerText attribute.
* html/HTMLProgressElement.cpp: Remove unused include file.
(WebCore::HTMLProgressElement::HTMLProgressElement): Changed base class to LabelableElement.
(WebCore::HTMLProgressElement::create): Remove form paraprogress.
(WebCore::HTMLProgressElement::parseAttribute): Replace HTMLFormControlElement to LabelableElement.
(WebCore::HTMLProgressElement::attach): Replace HTMLFormControlElement to LabelableElement.
* html/HTMLProgressElement.h:
(HTMLProgressElement):
* html/HTMLProgressElement.idl: Remove the "form" attribute which isn't listed in the HTML5 specification.
* html/HTMLTagNames.in: Remove "constructorNeedsFormElement" for not passing "form" parameter in HTMLElementFactory.

LayoutTests:

This patch changes tests for non-existent "form" attribute of the
"progress" element. The "form" attribute is available only for
form-associate elements. However, the "progress" element isn't.

* fast/dom/HTMLProgressElement/progress-element-form-expected.txt: Update expectation for test output changes.
* fast/dom/HTMLProgressElement/progress-element-form.html: Changed for the "progress" element doesn't have IDL attribute "form".
* fast/forms/form-attribute-expected.txt: Update expectation for test output changes.
* fast/forms/form-attribute.html: Removed lines for the "progress" element.

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

13 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/dom/HTMLProgressElement/progress-element-form-expected.txt
LayoutTests/fast/dom/HTMLProgressElement/progress-element-form.html
LayoutTests/fast/forms/form-attribute-expected.txt
LayoutTests/fast/forms/form-attribute.html
Source/WebCore/ChangeLog
Source/WebCore/css/CSSStyleSelector.cpp
Source/WebCore/css/SelectorChecker.cpp
Source/WebCore/editing/TextIterator.cpp
Source/WebCore/html/HTMLProgressElement.cpp
Source/WebCore/html/HTMLProgressElement.h
Source/WebCore/html/HTMLProgressElement.idl
Source/WebCore/html/HTMLTagNames.in

index ffa64012832563cb13648520b9578f706bac77e2..de936bfbd335153101980ff3533de372ac57b097 100644 (file)
@@ -1,3 +1,19 @@
+2012-03-16  Yoshifumi Inoue  <yosin@chromium.org>
+
+        [Forms] The "progress" element should not be a form-associated element.
+        https://bugs.webkit.org/show_bug.cgi?id=80240
+
+        Reviewed by Kent Tamura.
+
+        This patch changes tests for non-existent "form" attribute of the
+        "progress" element. The "form" attribute is available only for
+        form-associate elements. However, the "progress" element isn't.
+
+        * fast/dom/HTMLProgressElement/progress-element-form-expected.txt: Update expectation for test output changes.
+        * fast/dom/HTMLProgressElement/progress-element-form.html: Changed for the "progress" element doesn't have IDL attribute "form".
+        * fast/forms/form-attribute-expected.txt: Update expectation for test output changes.
+        * fast/forms/form-attribute.html: Removed lines for the "progress" element.
+
 2012-03-16  Yoshifumi Inoue  <yosin@chromium.org>
 
         [Forms] label.form attribute doesn't work
index f0773046a233bbcf8e15c68234d738d663003ee6..26be5b233d8ea151249529522b377a6f24405784 100644 (file)
@@ -1,3 +1,3 @@
 
-This test passes if the progress element can find its form.
+This test passes if the progress element doesn't have form attribute.
 PASS
index fc2bab1ff0e23f7b9f85ad83062c6424e2cf80ec..ea38a6457f3c6f6b36272d8220e9075e1241d3f6 100644 (file)
@@ -9,11 +9,11 @@ if (window.layoutTestController)
 <table><form id=form1>
 <progress id=progress1></progress>
 </form></table>
-<div>This test passes if the progress element can find its form.</div>
+<div>This test passes if the progress element doesn't have form attribute.</div>
 <div id=console>FAIL</div>
 
 <script>
-if (document.getElementById('progress1').form.id == "form1")
+if (document.getElementById('progress1').form === undefined)
     document.getElementById('console').innerHTML = "PASS";
 </script>
 </body>
index b1020892719135687eda49f311aef35b155475be..340d456db9bdf55802ffc5598308dc029c31f1a5 100644 (file)
@@ -11,7 +11,6 @@ PASS document.getElementsByTagName("keygen")[0].form is owner
 PASS document.getElementsByTagName("label")[0].form is owner
 PASS document.getElementsByTagName("object")[0].form is owner
 PASS document.getElementsByTagName("output")[0].form is owner
-PASS document.getElementsByTagName("progress")[0].form is owner
 PASS document.getElementsByTagName("select")[0].form is owner
 PASS document.getElementsByTagName("textarea")[0].form is owner
 
index 7902b0f9a823d799eeefc313aeadbd3eaa98be2e..9137b338036611a153dd2a5ecee0a5fef9abbc52 100644 (file)
@@ -21,7 +21,6 @@ container.innerHTML = '<form id=owner></form>' +
     '<label name=victim form=owner />' +
     '<object name=victim form=owner></object>' +
     '<output name=victim form=owner />' +
-    '<progress name=victim form=owner />' +
     '<select name=victim form=owner />' +
     '<textarea name=victim form=owner />';
 
@@ -33,7 +32,6 @@ shouldBe('document.getElementsByTagName("keygen")[0].form', 'owner');
 shouldBe('document.getElementsByTagName("label")[0].form', 'owner');
 shouldBe('document.getElementsByTagName("object")[0].form', 'owner');
 shouldBe('document.getElementsByTagName("output")[0].form', 'owner');
-shouldBe('document.getElementsByTagName("progress")[0].form', 'owner');
 shouldBe('document.getElementsByTagName("select")[0].form', 'owner');
 shouldBe('document.getElementsByTagName("textarea")[0].form', 'owner');
 
index 18598514549f088889cda787aa182548f0d8d9dd..9f56abccc0c8139a0fc26198d494c598076535df 100644 (file)
@@ -1,3 +1,38 @@
+2012-03-16  Yoshifumi Inoue  <yosin@chromium.org>
+
+        [Forms] The "progress" element should not be a form-associated element.
+        https://bugs.webkit.org/show_bug.cgi?id=80240
+
+        Reviewed by Kent Tamura.
+
+        This patch changes base class of HTMLProgressElement to LabelableElement from
+        HTMLFormControlElement for saving memory space and iteration time of
+        extra "progress" elements in HTMLFormElement::m_formAssociatedElements
+        and matching the HTML5 specification for ease of maintenance.
+
+        Changes of TextIterator is lead by usage of isFormControlElement. This
+        changes will be replaced with more meaningful predicate as part of
+        https://bugs.webkit.org/show_bug.cgi?id=80381
+
+        No new tests. Update existing tests to cover this change.
+
+        * css/CSSStyleSelector.cpp:
+        (WebCore::CSSStyleSelector::canShareStyleWithElement): Moved the "progress" element support code from canShareStyleWithControl.
+        (WebCore::CSSStyleSelector::canShareStyleWithControl):
+        * css/SelectorChecker.cpp:
+        (WebCore::SelectorChecker::checkOneSelector): Remove isFormControlElement check for PseudoIndeterminate.
+        * editing/TextIterator.cpp:
+        (WebCore::TextIterator::advance): Check HTMLProgressElement in addition to isFormControlElement. This change is for text dump in LayoutTests implemented by document.innerText attribute.
+        * html/HTMLProgressElement.cpp: Remove unused include file.
+        (WebCore::HTMLProgressElement::HTMLProgressElement): Changed base class to LabelableElement.
+        (WebCore::HTMLProgressElement::create): Remove form paraprogress.
+        (WebCore::HTMLProgressElement::parseAttribute): Replace HTMLFormControlElement to LabelableElement.
+        (WebCore::HTMLProgressElement::attach): Replace HTMLFormControlElement to LabelableElement.
+        * html/HTMLProgressElement.h:
+        (HTMLProgressElement):
+        * html/HTMLProgressElement.idl: Remove the "form" attribute which isn't listed in the HTML5 specification.
+        * html/HTMLTagNames.in: Remove "constructorNeedsFormElement" for not passing "form" parameter in HTMLElementFactory.
+
 2012-03-16  Ilya Tikhonovsky  <loislo@chromium.org>
 
         Web Inspector: Heap Snapshot: Unreviewed single line fix for isWindow getter.
index e4b5f8f69d65f25aa45b544f59db646dfc7f027c..5d2c992ac9c96a462241010f37fe2d81df867a09 100644 (file)
@@ -1207,20 +1207,6 @@ bool CSSStyleSelector::matchesRuleSet(RuleSet* ruleSet)
 
 bool CSSStyleSelector::canShareStyleWithControl(StyledElement* element) const
 {
-#if ENABLE(PROGRESS_TAG)
-    if (element->hasTagName(progressTag)) {
-        if (!m_element->hasTagName(progressTag))
-            return false;
-
-        HTMLProgressElement* thisProgressElement = static_cast<HTMLProgressElement*>(element);
-        HTMLProgressElement* otherProgressElement = static_cast<HTMLProgressElement*>(m_element);
-        if (thisProgressElement->isDeterminate() != otherProgressElement->isDeterminate())
-            return false;
-
-        return true;
-    }
-#endif
-
     HTMLInputElement* thisInputElement = element->toInputElement();
     HTMLInputElement* otherInputElement = m_element->toInputElement();
 
@@ -1346,6 +1332,18 @@ bool CSSStyleSelector::canShareStyleWithElement(StyledElement* element) const
         return false;
 #endif
 
+#if ENABLE(PROGRESS_TAG)
+    if (element->hasTagName(progressTag)) {
+        if (!m_element->hasTagName(progressTag))
+            return false;
+
+        HTMLProgressElement* thisProgressElement = static_cast<HTMLProgressElement*>(element);
+        HTMLProgressElement* otherProgressElement = static_cast<HTMLProgressElement*>(m_element);
+        if (thisProgressElement->isDeterminate() != otherProgressElement->isDeterminate())
+            return false;
+    }
+#endif
+
     bool isControl = element->isFormControlElement();
 
     if (isControl != m_element->isFormControlElement())
index 316f44650fd106d085d189d60be1524b60b6d479..086491593dd3c2c8261b883dd1c73d33f720931c 100644 (file)
@@ -1093,7 +1093,7 @@ bool SelectorChecker::checkOneSelector(const SelectorCheckingContext& context, P
             }
         case CSSSelector::PseudoIndeterminate:
             {
-                if (!element || !element->isFormControlElement())
+                if (!element)
                     break;
 #if ENABLE(PROGRESS_TAG)
                 if (element->hasTagName(progressTag)) {
index 9d385ac14e98a3638d34771672e3d41373b10e32..47de1ce4dc1e1f074e7bcfbe6add68446eae585c 100644 (file)
@@ -396,7 +396,8 @@ void TextIterator::advance()
                          (renderer->node() && renderer->node()->isElementNode() &&
                           (static_cast<Element*>(renderer->node())->isFormControlElement()
                           || static_cast<Element*>(renderer->node())->hasTagName(legendTag)
-                          || static_cast<Element*>(renderer->node())->hasTagName(meterTag)))))
+                          || static_cast<Element*>(renderer->node())->hasTagName(meterTag)
+                          || static_cast<Element*>(renderer->node())->hasTagName(progressTag)))))
                     m_handledNode = handleReplacedElement();
                 else
                     m_handledNode = handleNonTextNode();
index 78bbde32b7731c290fc5a72e3b26b6284567a953..52aed2c487ff32db9afe5fe7207d8c4a4cf0a1b9 100644 (file)
 #include "Attribute.h"
 #include "EventNames.h"
 #include "ExceptionCode.h"
-#include "FormDataList.h"
 #include "NodeRenderingContext.h"
 #include "HTMLDivElement.h"
-#include "HTMLFormElement.h"
 #include "HTMLNames.h"
 #include "HTMLParserIdioms.h"
 #include "ProgressShadowElement.h"
@@ -43,8 +41,8 @@ using namespace HTMLNames;
 const double HTMLProgressElement::IndeterminatePosition = -1;
 const double HTMLProgressElement::InvalidPosition = -2;
 
-HTMLProgressElement::HTMLProgressElement(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
-    : HTMLFormControlElement(tagName, document, form)
+HTMLProgressElement::HTMLProgressElement(const QualifiedName& tagName, Document* document)
+    : LabelableElement(tagName, document)
 {
     ASSERT(hasTagName(progressTag));
 }
@@ -53,9 +51,9 @@ HTMLProgressElement::~HTMLProgressElement()
 {
 }
 
-PassRefPtr<HTMLProgressElement> HTMLProgressElement::create(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
+PassRefPtr<HTMLProgressElement> HTMLProgressElement::create(const QualifiedName& tagName, Document* document)
 {
-    RefPtr<HTMLProgressElement> progress = adoptRef(new HTMLProgressElement(tagName, document, form));
+    RefPtr<HTMLProgressElement> progress = adoptRef(new HTMLProgressElement(tagName, document));
     progress->createShadowSubtree();
     return progress;
 }
@@ -75,12 +73,6 @@ bool HTMLProgressElement::supportsFocus() const
     return Node::supportsFocus() && !disabled();
 }
 
-const AtomicString& HTMLProgressElement::formControlType() const
-{
-    DEFINE_STATIC_LOCAL(const AtomicString, progress, ("progress"));
-    return progress;
-}
-
 void HTMLProgressElement::parseAttribute(Attribute* attribute)
 {
     if (attribute->name() == valueAttr)
@@ -88,12 +80,12 @@ void HTMLProgressElement::parseAttribute(Attribute* attribute)
     else if (attribute->name() == maxAttr)
         didElementStateChange();
     else
-        HTMLFormControlElement::parseAttribute(attribute);
+        LabelableElement::parseAttribute(attribute);
 }
 
 void HTMLProgressElement::attach()
 {
-    HTMLFormControlElement::attach();
+    LabelableElement::attach();
     didElementStateChange();
 }
 
index 9c3b436cc71c9e163b36cf50bbdccecf84da9bfc..35fff15e68051e629d541eab90785245d848b29a 100644 (file)
 #define HTMLProgressElement_h
 
 #if ENABLE(PROGRESS_TAG)
-#include "HTMLFormControlElement.h"
+#include "LabelableElement.h"
 
 namespace WebCore {
 
 class ProgressValueElement;
 
-class HTMLProgressElement : public HTMLFormControlElement {
+class HTMLProgressElement : public LabelableElement {
 public:
     static const double IndeterminatePosition;
     static const double InvalidPosition;
 
-    static PassRefPtr<HTMLProgressElement> create(const QualifiedName&, Document*, HTMLFormElement*);
+    static PassRefPtr<HTMLProgressElement> create(const QualifiedName&, Document*);
 
     double value() const;
     void setValue(double, ExceptionCode&);
@@ -48,17 +48,13 @@ public:
     virtual bool canContainRangeEndPoint() const { return false; }
 
 private:
-    HTMLProgressElement(const QualifiedName&, Document*, HTMLFormElement*);
+    HTMLProgressElement(const QualifiedName&, Document*);
     virtual ~HTMLProgressElement();
 
     virtual bool supportLabels() const OVERRIDE { return true; }
 
     virtual bool supportsFocus() const;
 
-    virtual bool recalcWillValidate() const { return false; }
-
-    virtual const AtomicString& formControlType() const;
-
     virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
     virtual bool childShouldCreateRenderer(const NodeRenderingContext&) const OVERRIDE;
 
index b49252cad4ef0a0a5fc90f2184b05ec22099e6f7..ace4def836fc6dc45230ddfc46ca6f321f554a47 100644 (file)
@@ -26,7 +26,6 @@ module html {
                  attribute  double                max
                      setter raises(DOMException);
         readonly attribute  double                position;
-        readonly attribute  HTMLFormElement       form;
         readonly attribute  NodeList              labels;
     };
 
index bc9182272313fbe19c61918ee366569aa5fcbd72..74e2408620ecaf4ada65a66b6534dcd28f757266 100644 (file)
@@ -99,7 +99,7 @@ p interfaceName=HTMLParagraphElement
 param
 plaintext interfaceName=HTMLElement
 pre
-progress interfaceName=HTMLProgressElement, constructorNeedsFormElement, conditional=PROGRESS_TAG
+progress interfaceName=HTMLProgressElement, conditional=PROGRESS_TAG
 q interfaceName=HTMLQuoteElement
 rp interfaceName=HTMLElement
 rt interfaceName=HTMLElement