Element ancestor iterator should have a first() for convenience.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 6 Oct 2013 21:29:36 +0000 (21:29 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 6 Oct 2013 21:29:36 +0000 (21:29 +0000)
<https://webkit.org/b/122425>

Reviewed by Antti Koivisto.

Added an easy way to get the first element ancestor of a certain type
and put it to use in a few places.

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

Source/WebCore/ChangeLog
Source/WebCore/accessibility/AccessibilityNodeObject.cpp
Source/WebCore/dom/ElementAncestorIterator.h
Source/WebCore/html/HTMLFrameSetElement.cpp
Source/WebCore/html/HTMLLegendElement.cpp

index 3e7de5b4ef45d60dc89258b4670cfa8f143b1b59..158fd61bb90f77422bbe3e4d28ae5375d6801a9d 100644 (file)
@@ -1,3 +1,13 @@
+2013-10-06  Andreas Kling  <akling@apple.com>
+
+        Element ancestor iterator should have a first() for convenience.
+        <https://webkit.org/b/122425>
+
+        Reviewed by Antti Koivisto.
+
+        Added an easy way to get the first element ancestor of a certain type
+        and put it to use in a few places.
+
 2013-10-06  Andreas Kling  <akling@apple.com>
 
         CTTE: FrameLoader::notifier() should return a reference.
index 11d6ee12da2e8b5a3328c5d7a4b75fc0f458fe3d..a6a3b0ddcb89e5917c06b0007d584e6403c9917a 100644 (file)
@@ -1115,9 +1115,7 @@ HTMLLabelElement* AccessibilityNodeObject::labelForElement(Element* element) con
             return label;
     }
 
-    auto labelAncestors = ancestorsOfType<HTMLLabelElement>(element);
-    auto enclosingLabel = labelAncestors.begin();
-    return enclosingLabel != labelAncestors.end() ? &*enclosingLabel : nullptr;
+    return ancestorsOfType<HTMLLabelElement>(element).first();
 }
 
 String AccessibilityNodeObject::ariaAccessibilityDescription() const
index 3a04f84024718c91b35788060634981e7db83be9..85c466450df266934d72f6d2e21c923d2027678a 100644 (file)
@@ -52,6 +52,7 @@ public:
     explicit ElementAncestorIteratorAdapter(ElementType* descendant);
     ElementAncestorIterator<ElementType> begin();
     ElementAncestorIterator<ElementType> end();
+    ElementType* first() { return m_first; }
 
 private:
     ElementType* m_first;
@@ -63,6 +64,7 @@ public:
     explicit ElementAncestorConstIteratorAdapter(const ElementType* descendant);
     ElementAncestorConstIterator<ElementType> begin() const;
     ElementAncestorConstIterator<ElementType> end() const;
+    const ElementType* first() const { return m_first; }
 
 private:
     const ElementType* m_first;
index 2e800726a7ee44560e88f26a286ed2735ece4f89..bd69b07bd56d22585478d23967fe10ca8026237e 100644 (file)
@@ -165,9 +165,7 @@ RenderElement* HTMLFrameSetElement::createRenderer(RenderArena& arena, RenderSty
 
 HTMLFrameSetElement* HTMLFrameSetElement::findContaining(Element* descendant)
 {
-    auto ancestorFrameSets = ancestorsOfType<HTMLFrameSetElement>(descendant);
-    auto enclosingFrameSet = ancestorFrameSets.begin();
-    return enclosingFrameSet != ancestorFrameSets.end() ? &*enclosingFrameSet : nullptr;
+    return ancestorsOfType<HTMLFrameSetElement>(descendant).first();
 }
 
 void HTMLFrameSetElement::willAttachRenderers()
index a0765450a7f5799b603d63cad2efa51405a916ce..87818a8f8239d0a9f2778a58c0e63219f8e97a99 100644 (file)
@@ -49,14 +49,13 @@ PassRefPtr<HTMLLegendElement> HTMLLegendElement::create(const QualifiedName& tag
 HTMLFormControlElement* HTMLLegendElement::associatedControl()
 {
     // Check if there's a fieldset belonging to this legend.
-    auto fieldsetAncestors = ancestorsOfType<HTMLFieldSetElement>(this);
-    auto enclosingFieldset = fieldsetAncestors.begin();
-    if (enclosingFieldset == fieldsetAncestors.end())
-        return 0;
+    auto enclosingFieldset = ancestorsOfType<HTMLFieldSetElement>(this).first();
+    if (!enclosingFieldset)
+        return nullptr;
 
     // Find first form element inside the fieldset that is not a legend element.
     // FIXME: Should we consider tabindex?
-    return descendantsOfType<HTMLFormControlElement>(&*enclosingFieldset).first();
+    return descendantsOfType<HTMLFormControlElement>(enclosingFieldset).first();
 }
 
 void HTMLLegendElement::focus(bool, FocusDirection direction)