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 3e7de5b..158fd61 100644 (file)
@@ -1,5 +1,15 @@
 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.
         <https://webkit.org/b/122424>
 
index 11d6ee1..a6a3b0d 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 3a04f84..85c4664 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 2e80072..bd69b07 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 a076545..87818a8 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)