Title: [154801] trunk/Source/WebCore
Revision
154801
Author
[email protected]
Date
2013-08-28 18:35:21 -0700 (Wed, 28 Aug 2013)

Log Message

The code to look for an ancestor form element is duplicated in three different places
https://bugs.webkit.org/show_bug.cgi?id=120391

Reviewed by Darin Adler.

Unduplicated the code by putting a single implementation in HTMLFormElement.cpp.

* WebCore.order:
* html/FormAssociatedElement.cpp:
(WebCore::FormAssociatedElement::findAssociatedForm):
(WebCore::FormAssociatedElement::formAttributeChanged):
* html/HTMLElement.cpp:
(WebCore::HTMLElement::virtualForm):
* html/HTMLElement.h:
* html/HTMLFormControlElement.cpp:
(WebCore::HTMLFormControlElement::HTMLFormControlElement):
* html/HTMLFormElement.cpp:
(WebCore::HTMLFormElement::findClosestFormAncestor):
* html/HTMLFormElement.h:
* html/HTMLImageElement.cpp:
(WebCore::HTMLImageElement::insertedInto):
* html/HTMLObjectElement.cpp:
(WebCore::HTMLObjectElement::HTMLObjectElement):
* html/parser/HTMLTreeBuilder.cpp:
(WebCore::HTMLTreeBuilder::HTMLTreeBuilder):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (154800 => 154801)


--- trunk/Source/WebCore/ChangeLog	2013-08-29 01:13:07 UTC (rev 154800)
+++ trunk/Source/WebCore/ChangeLog	2013-08-29 01:35:21 UTC (rev 154801)
@@ -1,5 +1,33 @@
 2013-08-28  Ryosuke Niwa  <[email protected]>
 
+        The code to look for an ancestor form element is duplicated in three different places
+        https://bugs.webkit.org/show_bug.cgi?id=120391
+
+        Reviewed by Darin Adler.
+
+        Unduplicated the code by putting a single implementation in HTMLFormElement.cpp.
+
+        * WebCore.order:
+        * html/FormAssociatedElement.cpp:
+        (WebCore::FormAssociatedElement::findAssociatedForm):
+        (WebCore::FormAssociatedElement::formAttributeChanged):
+        * html/HTMLElement.cpp:
+        (WebCore::HTMLElement::virtualForm):
+        * html/HTMLElement.h:
+        * html/HTMLFormControlElement.cpp:
+        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
+        * html/HTMLFormElement.cpp:
+        (WebCore::HTMLFormElement::findClosestFormAncestor):
+        * html/HTMLFormElement.h:
+        * html/HTMLImageElement.cpp:
+        (WebCore::HTMLImageElement::insertedInto):
+        * html/HTMLObjectElement.cpp:
+        (WebCore::HTMLObjectElement::HTMLObjectElement):
+        * html/parser/HTMLTreeBuilder.cpp:
+        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
+
+2013-08-28  Ryosuke Niwa  <[email protected]>
+
         Stop throwing DOM exceptions in internal 'XMLHttpRequest' response getters
         https://bugs.webkit.org/show_bug.cgi?id=120446
 

Modified: trunk/Source/WebCore/WebCore.order (154800 => 154801)


--- trunk/Source/WebCore/WebCore.order	2013-08-29 01:13:07 UTC (rev 154800)
+++ trunk/Source/WebCore/WebCore.order	2013-08-29 01:35:21 UTC (rev 154801)
@@ -5486,7 +5486,6 @@
 __ZN7WebCore22HTMLFormControlElementC2ERKNS_13QualifiedNameEPNS_8DocumentEPNS_15HTMLFormElementE
 __ZN7WebCore16LabelableElementC2ERKNS_13QualifiedNameEPNS_8DocumentE
 __ZN7WebCore21FormAssociatedElementC2Ev
-__ZNK7WebCore11HTMLElement16findFormAncestorEv
 __ZN7WebCore21FormAssociatedElement7setFormEPNS_15HTMLFormElementE
 __ZN7WebCore9InputType10createTextEPNS_16HTMLInputElementE
 __ZN7WebCore13TextInputType6createEPNS_16HTMLInputElementE

Modified: trunk/Source/WebCore/html/FormAssociatedElement.cpp (154800 => 154801)


--- trunk/Source/WebCore/html/FormAssociatedElement.cpp	2013-08-29 01:13:07 UTC (rev 154800)
+++ trunk/Source/WebCore/html/FormAssociatedElement.cpp	2013-08-29 01:35:21 UTC (rev 154801)
@@ -114,7 +114,7 @@
     }
 
     if (!currentAssociatedForm)
-        return element->findFormAncestor();
+        return HTMLFormElement::findClosestFormAncestor(*element);
 
     return currentAssociatedForm;
 }
@@ -172,7 +172,7 @@
     if (!element->fastHasAttribute(formAttr)) {
         // The form attribute removed. We need to reset form owner here.
         HTMLFormElement* originalForm = m_form;
-        setForm(element->findFormAncestor());
+        setForm(HTMLFormElement::findClosestFormAncestor(*element));
         HTMLElement* element = toHTMLElement(this);
         if (m_form && m_form != originalForm && m_form->inDocument())
             element->document()->didAssociateFormControl(element);

Modified: trunk/Source/WebCore/html/HTMLElement.cpp (154800 => 154801)


--- trunk/Source/WebCore/html/HTMLElement.cpp	2013-08-29 01:13:07 UTC (rev 154800)
+++ trunk/Source/WebCore/html/HTMLElement.cpp	2013-08-29 01:35:21 UTC (rev 154801)
@@ -771,18 +771,9 @@
     return RenderObject::createObject(this, style);
 }
 
-HTMLFormElement* HTMLElement::findFormAncestor() const
-{
-    for (ContainerNode* ancestor = parentNode(); ancestor; ancestor = ancestor->parentNode()) {
-        if (isHTMLFormElement(ancestor))
-            return toHTMLFormElement(ancestor);
-    }
-    return 0;
-}
-
 HTMLFormElement* HTMLElement::virtualForm() const
 {
-    return findFormAncestor();
+    return HTMLFormElement::findClosestFormAncestor(*this);
 }
 
 static inline bool elementAffectsDirectionality(const Node* node)

Modified: trunk/Source/WebCore/html/HTMLElement.h (154800 => 154801)


--- trunk/Source/WebCore/html/HTMLElement.h	2013-08-29 01:13:07 UTC (rev 154800)
+++ trunk/Source/WebCore/html/HTMLElement.h	2013-08-29 01:35:21 UTC (rev 154801)
@@ -86,8 +86,6 @@
 
     HTMLFormElement* form() const { return virtualForm(); }
 
-    HTMLFormElement* findFormAncestor() const;
-
     bool hasDirectionAuto() const;
     TextDirection directionalityIfhasDirAutoAttribute(bool& isAuto) const;
 

Modified: trunk/Source/WebCore/html/HTMLFormControlElement.cpp (154800 => 154801)


--- trunk/Source/WebCore/html/HTMLFormControlElement.cpp	2013-08-29 01:13:07 UTC (rev 154800)
+++ trunk/Source/WebCore/html/HTMLFormControlElement.cpp	2013-08-29 01:35:21 UTC (rev 154801)
@@ -62,7 +62,7 @@
     , m_wasChangedSinceLastFormControlChangeEvent(false)
     , m_hasAutofocused(false)
 {
-    setForm(form ? form : findFormAncestor());
+    setForm(form ? form : HTMLFormElement::findClosestFormAncestor(*this));
     setHasCustomStyleResolveCallbacks();
 }
 

Modified: trunk/Source/WebCore/html/HTMLFormElement.cpp (154800 => 154801)


--- trunk/Source/WebCore/html/HTMLFormElement.cpp	2013-08-29 01:13:07 UTC (rev 154800)
+++ trunk/Source/WebCore/html/HTMLFormElement.cpp	2013-08-29 01:35:21 UTC (rev 154801)
@@ -723,4 +723,13 @@
     HTMLElement::copyNonAttributePropertiesFromElement(source);
 }
 
+HTMLFormElement* HTMLFormElement::findClosestFormAncestor(const Element& startElement)
+{
+    for (Element* element = startElement.parentElement(); element; element = element->parentElement()) {
+        if (isHTMLFormElement(element))
+            return toHTMLFormElement(element);
+    }
+    return 0;
+}
+
 } // namespace

Modified: trunk/Source/WebCore/html/HTMLFormElement.h (154800 => 154801)


--- trunk/Source/WebCore/html/HTMLFormElement.h	2013-08-29 01:13:07 UTC (rev 154800)
+++ trunk/Source/WebCore/html/HTMLFormElement.h	2013-08-29 01:35:21 UTC (rev 154801)
@@ -106,6 +106,8 @@
 
     void getTextFieldValues(StringPairVector& fieldNamesAndValues) const;
 
+    static HTMLFormElement* findClosestFormAncestor(const Element&);
+
 private:
     HTMLFormElement(const QualifiedName&, Document*);
 

Modified: trunk/Source/WebCore/html/HTMLImageElement.cpp (154800 => 154801)


--- trunk/Source/WebCore/html/HTMLImageElement.cpp	2013-08-29 01:13:07 UTC (rev 154800)
+++ trunk/Source/WebCore/html/HTMLImageElement.cpp	2013-08-29 01:35:21 UTC (rev 154801)
@@ -205,15 +205,10 @@
 
 Node::InsertionNotificationRequest HTMLImageElement::insertedInto(ContainerNode* insertionPoint)
 {
-    if (!m_form) {
-        // m_form can be non-null if it was set in constructor.
-        for (ContainerNode* ancestor = parentNode(); ancestor; ancestor = ancestor->parentNode()) {
-            if (isHTMLFormElement(ancestor)) {
-                m_form = toHTMLFormElement(ancestor);
-                m_form->registerImgElement(this);
-                break;
-            }
-        }
+    if (!m_form) { // m_form can be non-null if it was set in constructor.
+        m_form = HTMLFormElement::findClosestFormAncestor(*this);
+        if (m_form)
+            m_form->registerImgElement(this);
     }
 
     // If we have been inserted from a renderer-less document,

Modified: trunk/Source/WebCore/html/HTMLObjectElement.cpp (154800 => 154801)


--- trunk/Source/WebCore/html/HTMLObjectElement.cpp	2013-08-29 01:13:07 UTC (rev 154800)
+++ trunk/Source/WebCore/html/HTMLObjectElement.cpp	2013-08-29 01:35:21 UTC (rev 154801)
@@ -63,7 +63,7 @@
     , m_useFallbackContent(false)
 {
     ASSERT(hasTagName(objectTag));
-    setForm(form ? form : findFormAncestor());
+    setForm(form ? form : HTMLFormElement::findClosestFormAncestor(*this));
 }
 
 inline HTMLObjectElement::~HTMLObjectElement()

Modified: trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp (154800 => 154801)


--- trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp	2013-08-29 01:13:07 UTC (rev 154800)
+++ trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp	2013-08-29 01:35:21 UTC (rev 154801)
@@ -136,20 +136,6 @@
     return tagName == aTag || isNonAnchorFormattingTag(tagName);
 }
 
-static HTMLFormElement* closestFormAncestor(Element* element)
-{
-    ASSERT(isMainThread());
-    while (element) {
-        if (isHTMLFormElement(element))
-            return toHTMLFormElement(element);
-        ContainerNode* parent = element->parentNode();
-        if (!parent || !parent->isElementNode())
-            return 0;
-        element = toElement(parent);
-    }
-    return 0;
-}
-
 class HTMLTreeBuilder::ExternalCharacterTokenBuffer {
     WTF_MAKE_NONCOPYABLE(ExternalCharacterTokenBuffer);
 public:
@@ -313,7 +299,7 @@
 #endif
 
         resetInsertionModeAppropriately();
-        m_tree.setForm(closestFormAncestor(contextElement));
+        m_tree.setForm(!contextElement || isHTMLFormElement(contextElement) ? toHTMLFormElement(contextElement) : HTMLFormElement::findClosestFormAncestor(*contextElement));
     }
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to