HTMLCollection::updateNamedElementCach iterates over items twice
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 9 Apr 2014 19:32:41 +0000 (19:32 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 9 Apr 2014 19:32:41 +0000 (19:32 +0000)
https://bugs.webkit.org/show_bug.cgi?id=131448

Reviewed by Andreas Kling.

Compute the length first and go through the cache interface to traverse through items.

* html/HTMLCollection.cpp:
(WebCore::HTMLCollection::updateNamedElementCache):

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

Source/WebCore/ChangeLog
Source/WebCore/html/HTMLCollection.cpp

index 39cf345f91dbdd8fc30b7c7991706017027888a0..b62dae43b71ab03c972c8f574e7427f8de3ea8e7 100644 (file)
@@ -1,3 +1,15 @@
+2014-04-09  Ryosuke Niwa  <rniwa@webkit.org>
+
+        HTMLCollection::updateNamedElementCach iterates over items twice
+        https://bugs.webkit.org/show_bug.cgi?id=131448
+
+        Reviewed by Andreas Kling.
+
+        Compute the length first and go through the cache interface to traverse through items.
+
+        * html/HTMLCollection.cpp:
+        (WebCore::HTMLCollection::updateNamedElementCache):
+
 2014-04-09  Brendan Long  <b.long@cablelabs.com>
 
         [GStreamer] Expose MPEG-TS metadata
index b90182267aa108120602b9d5f3b517fbe6d61d10..cca076e761ae263aaefa3178b0b43013b9875467 100644 (file)
@@ -433,11 +433,13 @@ void HTMLCollection::updateNamedElementCache() const
     if (hasNamedElementCache())
         return;
 
-    ContainerNode& root = rootNode();
+
     CollectionNamedElementCache& cache = createNameItemCache();
 
-    unsigned count;
-    for (Element* element = firstElement(root); element; element = traverseForward(*element, 1, count, root)) {
+    unsigned size = m_indexCache.nodeCount(*this);
+    for (unsigned i = 0; i < size; i++) {
+        Element* element = m_indexCache.nodeAt(*this, i);
+        ASSERT(element);
         const AtomicString& idAttrVal = element->getIdAttribute();
         if (!idAttrVal.isEmpty())
             cache.appendIdCache(idAttrVal, element);
@@ -448,8 +450,6 @@ void HTMLCollection::updateNamedElementCache() const
             cache.appendNameCache(nameAttrVal, element);
     }
 
-    m_indexCache.nodeCount(*this);
-
     cache.didPopulate();
 }