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));
}
}