| Index: Source/core/dom/LiveNodeList.h | 
| diff --git a/Source/core/dom/LiveNodeList.h b/Source/core/dom/LiveNodeList.h | 
| index bdc6e64e650328080aa1907ba2df083bc873f23a..c819db15357c6957c22186643753ead2a5cd6fce 100644 | 
| --- a/Source/core/dom/LiveNodeList.h | 
| +++ b/Source/core/dom/LiveNodeList.h | 
| @@ -45,7 +45,9 @@ public: | 
| virtual Node* item(unsigned offset) const OVERRIDE FINAL { return m_collectionIndexCache.nodeAt(*this, offset); } | 
| virtual bool elementMatches(const Element&) const = 0; | 
|  | 
| -    virtual void invalidateCache(Document* oldDocument) const OVERRIDE FINAL; | 
| +    virtual void invalidateCache(Document* oldDocument = 0) const OVERRIDE FINAL; | 
| +    void invalidateCacheForAttribute(const QualifiedName*) const; | 
| + | 
| bool shouldOnlyIncludeDirectChildren() const { return false; } | 
|  | 
| // Collection IndexCache API. | 
| @@ -61,6 +63,14 @@ private: | 
| mutable CollectionIndexCache<LiveNodeList, Element> m_collectionIndexCache; | 
| }; | 
|  | 
| +DEFINE_TYPE_CASTS(LiveNodeList, LiveNodeListBase, list, isLiveNodeListType(list->type()), isLiveNodeListType(list.type())); | 
| + | 
| +inline void LiveNodeList::invalidateCacheForAttribute(const QualifiedName* attrName) const | 
| +{ | 
| +    if (!attrName || shouldInvalidateTypeOnAttributeChange(invalidationType(), *attrName)) | 
| +        invalidateCache(); | 
| +} | 
| + | 
| } // namespace WebCore | 
|  | 
| #endif // LiveNodeList_h | 
|  |