HTMLTableRowsCollection is always rooted at a HTMLTableElement.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 4 Nov 2013 08:53:47 +0000 (08:53 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 4 Nov 2013 08:53:47 +0000 (08:53 +0000)
<https://webkit.org/b/123721>

Tighten up HTMLTableRowsCollection by making the create() helper
take a HTMLTableElement& and adding a HTMLSelectElement& getter.

Reviewed by Antti Koivisto.

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

Source/WebCore/ChangeLog
Source/WebCore/dom/Element.cpp
Source/WebCore/html/HTMLTableRowsCollection.cpp
Source/WebCore/html/HTMLTableRowsCollection.h

index 19498a3..5c246ff 100644 (file)
@@ -1,5 +1,15 @@
 2013-11-04  Andreas Kling  <akling@apple.com>
 
+        HTMLTableRowsCollection is always rooted at a HTMLTableElement.
+        <https://webkit.org/b/123721>
+
+        Tighten up HTMLTableRowsCollection by making the create() helper
+        take a HTMLTableElement& and adding a HTMLSelectElement& getter.
+
+        Reviewed by Antti Koivisto.
+
+2013-11-04  Andreas Kling  <akling@apple.com>
+
         HTMLNameCollection and friends are always rooted at a Document.
         <https://webkit.org/b/123722>
 
index 240b5b7..e93b596 100644 (file)
@@ -2966,8 +2966,7 @@ PassRefPtr<HTMLCollection> Element::ensureCachedHTMLCollection(CollectionType ty
 
     RefPtr<HTMLCollection> collection;
     if (type == TableRows) {
-        ASSERT(hasTagName(tableTag));
-        return ensureRareData().ensureNodeLists().addCacheWithAtomicName<HTMLTableRowsCollection>(*this, type);
+        return ensureRareData().ensureNodeLists().addCacheWithAtomicName<HTMLTableRowsCollection>(toHTMLTableElement(*this), type);
     } else if (type == SelectOptions) {
         return ensureRareData().ensureNodeLists().addCacheWithAtomicName<HTMLOptionsCollection>(toHTMLSelectElement(*this), type);
     } else if (type == FormControls) {
index 844494e..52c3093 100644 (file)
@@ -152,16 +152,16 @@ HTMLTableRowsCollection::HTMLTableRowsCollection(HTMLTableElement& table)
 {
 }
 
-PassRefPtr<HTMLTableRowsCollection> HTMLTableRowsCollection::create(Node& table, CollectionType type)
+PassRef<HTMLTableRowsCollection> HTMLTableRowsCollection::create(HTMLTableElement& table, CollectionType type)
 {
     ASSERT_UNUSED(type, type == TableRows);
-    return adoptRef(new HTMLTableRowsCollection(toHTMLTableElement(table)));
+    return adoptRef(*new HTMLTableRowsCollection(table));
 }
 
 Element* HTMLTableRowsCollection::virtualItemAfter(unsigned& offsetInArray, Element* previous) const
 {
     ASSERT_UNUSED(offsetInArray, !offsetInArray);
-    return rowAfter(&toHTMLTableElement(ownerNode()), toHTMLTableRowElement(previous));
+    return rowAfter(const_cast<HTMLTableElement*>(&tableElement()), toHTMLTableRowElement(previous));
 }
 
 }
index 91fe435..c445df2 100644 (file)
 #define HTMLTableRowsCollection_h
 
 #include "HTMLCollection.h"
+#include "HTMLTableElement.h"
 
 namespace WebCore {
 
-class HTMLTableElement;
 class HTMLTableRowElement;
 
 class HTMLTableRowsCollection FINAL : public HTMLCollection {
 public:
-    static PassRefPtr<HTMLTableRowsCollection> create(Node&, CollectionType);
+    static PassRef<HTMLTableRowsCollection> create(HTMLTableElement&, CollectionType);
+
+    HTMLTableElement& tableElement() { return toHTMLTableElement(ownerNode()); }
+    const HTMLTableElement& tableElement() const { return toHTMLTableElement(ownerNode()); }
 
     static HTMLTableRowElement* rowAfter(HTMLTableElement*, HTMLTableRowElement*);
     static HTMLTableRowElement* lastRow(HTMLTableElement*);