Changeset 154581 in webkit


Ignore:
Timestamp:
Aug 25, 2013, 2:30:10 PM (12 years ago)
Author:
Antti Koivisto
Message:

Element child and descendant iterators
https://bugs.webkit.org/show_bug.cgi?id=120248

Reviewed by Sam Weinig and Andreas Kling.

Add iterators for Element children and descendants.

To iterate over element children:

#include "ChildIterator.h"

for (auto it = elementChildren(this).begin(), end = elementChildren(this).end(); it != end; ++it) {

Element& element = *it;
...

for (auto it = childrenOfType<HTMLAreaElement>(this).begin(), end = childrenOfType<HTMLAreaElement>(this).end(); it != end; ++it) {

HTMLAreaElement& area = *it;
...

To iteratate over element descendants in pre-order:

#include "DescendantIterator.h"

for (auto it = elementDescendants(this).begin(), end = elementDescendants(this).end(); it != end; ++it) {

Element& element = *it;
...

for (auto it = descendantsOfType<HTMLAreaElement>(this).begin(), end = descendantsOfType<HTMLAreaElement>(this).end(); it != end; ++it) {

HTMLAreaElement& area = *it;
...


The iterators assert against DOM mutations and event dispatch while iterating in debug builds.

They are compatible with C++11 range-based for loops. In the future we can use

for (auto& element : elementChildren(this))

...

etc.

The patch all uses the new iterators in a few places.

  • WebCore.xcodeproj/project.pbxproj:
  • accessibility/AccessibilityNodeObject.cpp:

(WebCore::AccessibilityNodeObject::canvasHasFallbackContent):
(WebCore::siblingWithAriaRole):

  • accessibility/AccessibilityRenderObject.cpp:
  • accessibility/AccessibilityTable.cpp:

(WebCore::AccessibilityTable::isDataTable):

  • dom/ChildIterator.h: Added.

(WebCore::ChildIterator::operator*):
(WebCore::ChildIterator::operator->):
(WebCore::::ChildIterator):
(WebCore::::operator):
(WebCore::=):
(WebCore::::ChildIteratorAdapter):
(WebCore::::begin):
(WebCore::::end):
(WebCore::elementChildren):
(WebCore::childrenOfType):

  • dom/DescendantIterator.h: Added.

(WebCore::DescendantIterator::operator*):
(WebCore::DescendantIterator::operator->):
(WebCore::::DescendantIterator):
(WebCore::::operator):
(WebCore::=):
(WebCore::::DescendantIteratorAdapter):
(WebCore::::begin):
(WebCore::::end):
(WebCore::elementDescendants):
(WebCore::descendantsOfType):

  • dom/Document.cpp:

(WebCore::Document::buildAccessKeyMap):
(WebCore::Document::childrenChanged):
(WebCore::Document::attach):
(WebCore::Document::detach):

  • editing/ApplyStyleCommand.cpp:

(WebCore::ApplyStyleCommand::cleanupUnstyledAppleStyleSpans):

  • editing/markup.cpp:

(WebCore::completeURLs):

  • html/HTMLMapElement.cpp:

(WebCore::HTMLMapElement::mapMouseEvent):

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::selectMediaResource):
(WebCore::HTMLMediaElement::textTrackModeChanged):

Location:
trunk/Source/WebCore
Files:
2 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r154580 r154581  
     12013-08-25  Antti Koivisto  <antti@apple.com>
     2
     3        Element child and descendant iterators
     4        https://bugs.webkit.org/show_bug.cgi?id=120248
     5
     6        Reviewed by Sam Weinig and Andreas Kling.
     7
     8        Add iterators for Element children and descendants.
     9       
     10        To iterate over element children:
     11       
     12        #include "ChildIterator.h"
     13       
     14        for (auto it = elementChildren(this).begin(), end = elementChildren(this).end(); it != end; ++it) {
     15            Element& element = *it;
     16            ...
     17
     18        for (auto it = childrenOfType<HTMLAreaElement>(this).begin(), end = childrenOfType<HTMLAreaElement>(this).end(); it != end; ++it) {
     19            HTMLAreaElement& area = *it;
     20            ...
     21
     22        To iteratate over element descendants in pre-order:
     23       
     24        #include "DescendantIterator.h"
     25       
     26        for (auto it = elementDescendants(this).begin(), end = elementDescendants(this).end(); it != end; ++it) {
     27            Element& element = *it;
     28            ...
     29
     30        for (auto it = descendantsOfType<HTMLAreaElement>(this).begin(), end = descendantsOfType<HTMLAreaElement>(this).end(); it != end; ++it) {
     31            HTMLAreaElement& area = *it;
     32            ...
     33           
     34        The iterators assert against DOM mutations and event dispatch while iterating in debug builds.
     35           
     36        They are compatible with C++11 range-based for loops. In the future we can use
     37       
     38        for (auto& element : elementChildren(this))
     39            ...
     40
     41        etc.
     42       
     43        The patch all uses the new iterators in a few places.
     44
     45        * WebCore.xcodeproj/project.pbxproj:
     46        * accessibility/AccessibilityNodeObject.cpp:
     47        (WebCore::AccessibilityNodeObject::canvasHasFallbackContent):
     48        (WebCore::siblingWithAriaRole):
     49        * accessibility/AccessibilityRenderObject.cpp:
     50        * accessibility/AccessibilityTable.cpp:
     51        (WebCore::AccessibilityTable::isDataTable):
     52        * dom/ChildIterator.h: Added.
     53        (WebCore::ChildIterator::operator*):
     54        (WebCore::ChildIterator::operator->):
     55        (WebCore::::ChildIterator):
     56        (WebCore::::operator):
     57        (WebCore::=):
     58        (WebCore::::ChildIteratorAdapter):
     59        (WebCore::::begin):
     60        (WebCore::::end):
     61        (WebCore::elementChildren):
     62        (WebCore::childrenOfType):
     63        * dom/DescendantIterator.h: Added.
     64        (WebCore::DescendantIterator::operator*):
     65        (WebCore::DescendantIterator::operator->):
     66        (WebCore::::DescendantIterator):
     67        (WebCore::::operator):
     68        (WebCore::=):
     69        (WebCore::::DescendantIteratorAdapter):
     70        (WebCore::::begin):
     71        (WebCore::::end):
     72        (WebCore::elementDescendants):
     73        (WebCore::descendantsOfType):
     74        * dom/Document.cpp:
     75        (WebCore::Document::buildAccessKeyMap):
     76        (WebCore::Document::childrenChanged):
     77        (WebCore::Document::attach):
     78        (WebCore::Document::detach):
     79        * editing/ApplyStyleCommand.cpp:
     80        (WebCore::ApplyStyleCommand::cleanupUnstyledAppleStyleSpans):
     81        * editing/markup.cpp:
     82        (WebCore::completeURLs):
     83        * html/HTMLMapElement.cpp:
     84        (WebCore::HTMLMapElement::mapMouseEvent):
     85        * html/HTMLMediaElement.cpp:
     86        (WebCore::HTMLMediaElement::selectMediaResource):
     87        (WebCore::HTMLMediaElement::textTrackModeChanged):
     88
    1892013-08-25  Andreas Kling  <akling@apple.com>
    290
  • trunk/Source/WebCore/GNUmakefile.list.am

    r154462 r154581  
    27722772        Source/WebCore/dom/CheckedRadioButtons.cpp \
    27732773        Source/WebCore/dom/CheckedRadioButtons.h \
     2774        Source/WebCore/dom/ChildIterator.h \
    27742775        Source/WebCore/dom/ChildListMutationScope.cpp \
    27752776        Source/WebCore/dom/ChildListMutationScope.h \
     
    28162817        Source/WebCore/dom/default/PlatformMessagePortChannel.cpp \
    28172818        Source/WebCore/dom/default/PlatformMessagePortChannel.h \
     2819        Source/WebCore/dom/DescendantIterator.h \
    28182820        Source/WebCore/dom/DeviceMotionClient.h \
    28192821        Source/WebCore/dom/DeviceMotionController.cpp \
  • trunk/Source/WebCore/Target.pri

    r154482 r154581  
    15761576    dom/CharacterData.h \
    15771577    dom/CheckedRadioButtons.h \
     1578    dom/ChildIterator.h \
    15781579    dom/ChildNodeList.h \
    15791580    dom/ClassNodeList.h \
     
    15891590    dom/CustomEvent.h \
    15901591    dom/default/PlatformMessagePortChannel.h \
     1592    dom/DescendantIterator.h \
    15911593    dom/DeviceMotionClient.h \
    15921594    dom/DeviceMotionController.h \
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj

    r154462 r154581  
    1 <?xml version="1.0" encoding="utf-8"?>
     1<?xml version="1.0" encoding="utf-8"?>
    22<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    33  <ItemGroup Label="ProjectConfigurations">
     
    2020420204    <ClInclude Include="..\dom\CharacterData.h" />
    2020520205    <ClInclude Include="..\dom\CheckedRadioButtons.h" />
     20206    <ClInclude Include="..\dom\ChildIterator.h" />
    2020620207    <ClInclude Include="..\dom\ChildListMutationScope.h" />
    2020720208    <ClInclude Include="..\dom\ChildNodeList.h" />
     
    2022320224    <ClInclude Include="..\dom\DataTransferItemList.h" />
    2022420225    <ClInclude Include="..\dom\DecodedDataDocumentParser.h" />
     20226    <ClInclude Include="..\dom\DescendantIterator.h" />
    2022520227    <ClInclude Include="..\dom\DeviceMotionClient.h" />
    2022620228    <ClInclude Include="..\dom\DeviceMotionController.h" />
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r154574 r154581  
    54885488                E45390460EAFD637003695C8 /* SharedTimerIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = E45390350EAFD637003695C8 /* SharedTimerIOS.mm */; };
    54895489                E462A4A1113E71BE004A4220 /* IntPointHash.h in Headers */ = {isa = PBXBuildFile; fileRef = E462A4A0113E71BE004A4220 /* IntPointHash.h */; settings = {ATTRIBUTES = (Private, ); }; };
     5490                E46A2B1C17CA65B9000DBCD8 /* DescendantIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = E46A2B1B17CA65B9000DBCD8 /* DescendantIterator.h */; };
     5491                E46A2B1E17CA76B1000DBCD8 /* ChildIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = E46A2B1D17CA76B1000DBCD8 /* ChildIterator.h */; };
    54905492                E47127CA163438A100ED6F5A /* StyleInvalidationAnalysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E47A97CE163059FC005DCD99 /* StyleInvalidationAnalysis.cpp */; };
    54915493                E47127CB163438AE00ED6F5A /* StyleInvalidationAnalysis.h in Headers */ = {isa = PBXBuildFile; fileRef = E47A97CF163059FC005DCD99 /* StyleInvalidationAnalysis.h */; };
     
    1225612258                E45390350EAFD637003695C8 /* SharedTimerIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SharedTimerIOS.mm; path = ios/SharedTimerIOS.mm; sourceTree = "<group>"; };
    1225712259                E462A4A0113E71BE004A4220 /* IntPointHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IntPointHash.h; sourceTree = "<group>"; };
     12260                E46A2B1B17CA65B9000DBCD8 /* DescendantIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DescendantIterator.h; sourceTree = "<group>"; };
     12261                E46A2B1D17CA76B1000DBCD8 /* ChildIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChildIterator.h; sourceTree = "<group>"; };
    1225812262                E4778B7D115A581A00B5D372 /* JSCustomEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomEvent.cpp; sourceTree = "<group>"; };
    1225912263                E4778B7E115A581A00B5D372 /* JSCustomEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCustomEvent.h; sourceTree = "<group>"; };
     
    2009720101                                93F925420F7EF5B8007E37C9 /* CheckedRadioButtons.cpp */,
    2009820102                                93F925410F7EF5B8007E37C9 /* CheckedRadioButtons.h */,
     20103                                E46A2B1D17CA76B1000DBCD8 /* ChildIterator.h */,
    2009920104                                D619A305144E00BE004BC302 /* ChildListMutationScope.cpp */,
    2010020105                                D619A306144E00BE004BC302 /* ChildListMutationScope.h */,
     
    2014420149                                A8C228A011D5722E00D5A7D3 /* DecodedDataDocumentParser.cpp */,
    2014520150                                A8C2289F11D5722E00D5A7D3 /* DecodedDataDocumentParser.h */,
     20151                                E46A2B1B17CA65B9000DBCD8 /* DescendantIterator.h */,
    2014620152                                31FB1A4F120A5D0600DC02A0 /* DeviceMotionClient.h */,
    2014720153                                31FB1A50120A5D0600DC02A0 /* DeviceMotionController.cpp */,
     
    2115821164                                E1ED8AC30CC49BE000BFC557 /* CSSPrimitiveValueMappings.h in Headers */,
    2115921165                                A80E6CFF0A1989CA007FB8C5 /* CSSProperty.h in Headers */,
     21166                                E46A2B1E17CA76B1000DBCD8 /* ChildIterator.h in Headers */,
    2116021167                                78D02BC6154A18DF00B62D05 /* CSSPropertyAnimation.h in Headers */,
    2116121168                                656580F409D12B20000E61D7 /* CSSPropertyNames.h in Headers */,
     
    2288222889                                A7197F24175689C4007B9442 /* PageThrottler.h in Headers */,
    2288322890                                E1284AE110447D4500EAEB52 /* PageTransitionEvent.h in Headers */,
     22891                                E46A2B1C17CA65B9000DBCD8 /* DescendantIterator.h in Headers */,
    2288422892                                51E1ECC30C91C90400DC255B /* PageURLRecord.h in Headers */,
    2288522893                                FFD5B97B135CC97800D5E92A /* PageVisibilityState.h in Headers */,
  • trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp

    r154525 r154581  
    3535#include "AccessibilitySpinButton.h"
    3636#include "AccessibilityTable.h"
    37 #include "ElementTraversal.h"
     37#include "ChildIterator.h"
    3838#include "EventNames.h"
    3939#include "FloatRect.h"
     
    418418    // content. If it has no children or its only children are not elements
    419419    // (e.g. just text nodes), it doesn't have fallback content.
    420     return !!ElementTraversal::firstChild(node);
     420    return elementChildren(node).begin() != elementChildren(node).end();
    421421}
    422422
     
    11221122    if (!parent)
    11231123        return 0;
    1124    
    1125     for (Element* sibling = ElementTraversal::firstChild(parent); sibling; sibling = ElementTraversal::nextSibling(sibling)) {
     1124
     1125    for (auto sibling = elementChildren(parent).begin(), end = elementChildren(parent).end(); sibling != end; ++sibling) {
    11261126        const AtomicString& siblingAriaRole = sibling->fastGetAttribute(roleAttr);
    11271127        if (equalIgnoringCase(siblingAriaRole, role))
    1128             return sibling;
     1128            return &*sibling;
    11291129    }
    11301130
  • trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp

    r154580 r154581  
    3838#include "CachedImage.h"
    3939#include "Chrome.h"
    40 #include "ElementTraversal.h"
     40#include "DescendantIterator.h"
    4141#include "EventNames.h"
    4242#include "FloatRect.h"
     
    27382738        return;
    27392739
    2740     for (HTMLAreaElement* current = Traversal<HTMLAreaElement>::firstWithin(map); current; current = Traversal<HTMLAreaElement>::next(current, map)) {
     2740    for (auto area = descendantsOfType<HTMLAreaElement>(map).begin(), end = descendantsOfType<HTMLAreaElement>(map).end() ; area != end; ++area) {
    27412741        // add an <area> element for this child if it has a link
    2742         if (current->isLink()) {
    2743             AccessibilityImageMapLink* areaObject = static_cast<AccessibilityImageMapLink*>(axObjectCache()->getOrCreate(ImageMapLinkRole));
    2744             areaObject->setHTMLAreaElement(toHTMLAreaElement(current));
    2745             areaObject->setHTMLMapElement(map);
    2746             areaObject->setParent(this);
    2747             if (!areaObject->accessibilityIsIgnored())
    2748                 m_children.append(areaObject);
    2749             else
    2750                 axObjectCache()->remove(areaObject->axObjectID());
    2751         }
     2742        if (!area->isLink())
     2743            continue;
     2744        AccessibilityImageMapLink* areaObject = static_cast<AccessibilityImageMapLink*>(axObjectCache()->getOrCreate(ImageMapLinkRole));
     2745        areaObject->setHTMLAreaElement(&*area);
     2746        areaObject->setHTMLMapElement(map);
     2747        areaObject->setParent(this);
     2748        if (!areaObject->accessibilityIsIgnored())
     2749            m_children.append(areaObject);
     2750        else
     2751            axObjectCache()->remove(areaObject->axObjectID());
    27522752    }
    27532753}
  • trunk/Source/WebCore/accessibility/AccessibilityTable.cpp

    r154580 r154581  
    3535#include "AccessibilityTableHeaderContainer.h"
    3636#include "AccessibilityTableRow.h"
    37 #include "ElementTraversal.h"
     37#include "ChildIterator.h"
    3838#include "HTMLNames.h"
    3939#include "HTMLTableCaptionElement.h"
     
    126126
    127127    // if there's a colgroup or col element, it's probably a data table.
    128     for (Element* child = ElementTraversal::firstChild(tableElement); child; child = ElementTraversal::nextSibling(child)) {
     128    for (auto child = elementChildren(tableElement).begin(), end = elementChildren(tableElement).end(); child != end; ++child) {
    129129        if (child->hasTagName(colTag) || child->hasTagName(colgroupTag))
    130130            return true;
  • trunk/Source/WebCore/dom/Document.cpp

    r154573 r154581  
    3838#include "CachedCSSStyleSheet.h"
    3939#include "CachedResourceLoader.h"
     40#include "ChildIterator.h"
    4041#include "Chrome.h"
    4142#include "ChromeClient.h"
     
    5051#include "DOMWindow.h"
    5152#include "DateComponents.h"
     53#include "DescendantIterator.h"
    5254#include "Dictionary.h"
    5355#include "DocumentEventQueue.h"
     
    6062#include "Editor.h"
    6163#include "Element.h"
    62 #include "ElementTraversal.h"
    6364#include "EntityReference.h"
    6465#include "Event.h"
     
    678679    ASSERT(scope);
    679680    ContainerNode* rootNode = scope->rootNode();
    680     for (Element* element = ElementTraversal::firstWithin(rootNode); element; element = ElementTraversal::next(element, rootNode)) {
     681    for (auto element = elementDescendants(rootNode).begin(), end = elementDescendants(rootNode).end(); element != end; ++element) {
    681682        const AtomicString& accessKey = element->fastGetAttribute(accesskeyAttr);
    682683        if (!accessKey.isEmpty())
    683             m_elementsByAccessKey.set(accessKey.impl(), element);
     684            m_elementsByAccessKey.set(accessKey.impl(), &*element);
    684685
    685686        if (ShadowRoot* root = element->shadowRoot())
     
    777778    ContainerNode::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
    778779   
    779     Element* newDocumentElement = ElementTraversal::firstWithin(this);
     780    Element* newDocumentElement = &*elementChildren(this).begin();
    780781    if (newDocumentElement == m_documentElement)
    781782        return;
     
    19771978    recalcStyle(Style::Force);
    19781979
    1979     for (Element* child = ElementTraversal::firstWithin(this); child; child = ElementTraversal::nextSibling(child))
    1980         Style::attachRenderTree(child);
     1980    for (auto child = elementDescendants(this).begin(), end = elementDescendants(this).end(); child != end; ++child)
     1981        Style::attachRenderTree(&*child);
    19811982
    19821983    setAttached(true);
     
    20772078    TemporaryChange<bool> change(m_renderTreeBeingDestroyed, true);
    20782079
    2079     for (Element* child = ElementTraversal::firstWithin(this); child; child = ElementTraversal::nextSibling(child))
    2080         Style::detachRenderTree(child);
     2080    for (auto child = elementDescendants(this).begin(), end = elementDescendants(this).end(); child != end; ++child)
     2081        Style::detachRenderTree(&*child);
    20812082
    20822083    clearChildNeedsStyleRecalc();
  • trunk/Source/WebCore/editing/ApplyStyleCommand.cpp

    r154439 r154581  
    3232#include "CSSValueKeywords.h"
    3333#include "CSSValuePool.h"
     34#include "ChildIterator.h"
    3435#include "Document.h"
    3536#include "EditingStyle.h"
    3637#include "Editor.h"
    37 #include "ElementTraversal.h"
    3838#include "Frame.h"
    3939#include "HTMLFontElement.h"
     
    443443    // cloned/split, the new node is always a sibling of it. Therefore, we scan
    444444    // all the children of the dummy's parent
    445     Element* next;
    446     for (Element* element = ElementTraversal::firstWithin(dummySpanAncestor); element; element = next) {
    447         next = ElementTraversal::nextSibling(element);
    448         if (isSpanWithoutAttributesOrUnstyledStyleSpan(element))
    449             removeNodePreservingChildren(element);
    450     }
     445
     446    Vector<Element*> toRemove;
     447    for (auto child = elementChildren(dummySpanAncestor).begin(), end = elementChildren(dummySpanAncestor).end(); child != end; ++child) {
     448        if (isSpanWithoutAttributesOrUnstyledStyleSpan(&*child))
     449            toRemove.append(&*child);
     450    }
     451    for (unsigned i = 0; i < toRemove.size(); ++i)
     452        removeNodePreservingChildren(toRemove[i]);
    451453}
    452454
  • trunk/Source/WebCore/editing/markup.cpp

    r154575 r154581  
    3737#include "ChildListMutationScope.h"
    3838#include "ContextFeatures.h"
     39#include "DescendantIterator.h"
    3940#include "DocumentFragment.h"
    4041#include "DocumentType.h"
    4142#include "Editor.h"
    42 #include "ElementTraversal.h"
    4343#include "ExceptionCode.h"
    4444#include "ExceptionCodePlaceholder.h"
     
    104104    KURL parsedBaseURL(ParsedURLString, baseURL);
    105105
    106     for (Element* element = ElementTraversal::firstWithin(fragment); element; element = ElementTraversal::next(element, fragment)) {
     106    for (auto element = elementDescendants(fragment).begin(), end = elementDescendants(fragment).end(); element != end; ++element) {
    107107        if (!element->hasAttributes())
    108108            continue;
     
    111111            const Attribute& attribute = element->attributeAt(i);
    112112            if (element->isURLAttribute(attribute) && !attribute.value().isEmpty())
    113                 changes.append(AttributeChange(element, attribute.name(), KURL(parsedBaseURL, attribute.value()).string()));
     113                changes.append(AttributeChange(&*element, attribute.name(), KURL(parsedBaseURL, attribute.value()).string()));
    114114        }
    115115    }
  • trunk/Source/WebCore/html/HTMLMapElement.cpp

    r154481 r154581  
    2424
    2525#include "Attribute.h"
     26#include "DescendantIterator.h"
    2627#include "Document.h"
    27 #include "ElementTraversal.h"
    2828#include "HTMLAreaElement.h"
    2929#include "HTMLCollection.h"
     
    6363{
    6464    HTMLAreaElement* defaultArea = 0;
    65     for (HTMLAreaElement* area = Traversal<HTMLAreaElement>::firstWithin(this); area; area = Traversal<HTMLAreaElement>::next(area, this)) {
     65
     66    for (auto area = descendantsOfType<HTMLAreaElement>(this).begin(), end = descendantsOfType<HTMLAreaElement>(this).end(); area != end; ++area) {
    6667        if (area->isDefault()) {
    6768            if (!defaultArea)
    68                 defaultArea = area;
     69                defaultArea = &*area;
    6970        } else if (area->mapMouseEvent(location, size, result))
    7071            return true;
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r154546 r154581  
    3131#include "ApplicationCacheResource.h"
    3232#include "Attribute.h"
     33#include "ChildIterator.h"
    3334#include "Chrome.h"
    3435#include "ChromeClient.h"
     
    4142#include "DiagnosticLoggingKeys.h"
    4243#include "DocumentLoader.h"
    43 #include "ElementTraversal.h"
    4444#include "Event.h"
    4545#include "EventNames.h"
     
    928928        // element child, then let mode be children and let candidate be the first such
    929929        // source element child in tree order.
    930         if (auto sourceElement = Traversal<HTMLSourceElement>::firstChild(this)) {
     930        auto source = childrenOfType<HTMLSourceElement>(this).begin();
     931        if (source != childrenOfType<HTMLSourceElement>(this).end()) {
    931932            mode = children;
    932             m_nextChildNodeToConsider = sourceElement;
     933            m_nextChildNodeToConsider = &*source;
    933934            m_currentSourceNode = 0;
    934935        } else {
     
    14181419    if (track->trackType() == TextTrack::TrackElement) {
    14191420        trackIsLoaded = false;
    1420         for (auto trackElement = Traversal<HTMLTrackElement>::firstChild(this); trackElement; trackElement = Traversal<HTMLTrackElement>::nextSibling(trackElement)) {
     1421        auto end = childrenOfType<HTMLTrackElement>(this).end();
     1422        for (auto trackElement = childrenOfType<HTMLTrackElement>(this).begin(); trackElement != end; ++trackElement) {
    14211423            if (trackElement->track() == track) {
    14221424                if (trackElement->readyState() == HTMLTrackElement::LOADING || trackElement->readyState() == HTMLTrackElement::LOADED)
Note: See TracChangeset for help on using the changeset viewer.