Chromium Code Reviews| Index: third_party/WebKit/Source/core/dom/NthIndexCache.cpp |
| diff --git a/third_party/WebKit/Source/core/dom/NthIndexCache.cpp b/third_party/WebKit/Source/core/dom/NthIndexCache.cpp |
| index 723f0c477dfe0716f5df084de45ad6efb692c7ad..570c92ca802105c42cc385b5839f8f4d7211a26f 100644 |
| --- a/third_party/WebKit/Source/core/dom/NthIndexCache.cpp |
| +++ b/third_party/WebKit/Source/core/dom/NthIndexCache.cpp |
| @@ -81,15 +81,14 @@ unsigned uncachedNthLastOfTypeIndex(Element& element, unsigned& siblingCount) { |
| unsigned NthIndexCache::nthChildIndex(Element& element) { |
| if (element.isPseudoElement()) |
| return 1; |
| - DCHECK(element.parentNode()); |
| NthIndexCache* nthIndexCache = element.document().nthIndexCache(); |
| NthIndexData* nthIndexData = nullptr; |
| - if (nthIndexCache && nthIndexCache->m_parentMap) |
| + if (element.parentNode() && nthIndexCache && nthIndexCache->m_parentMap) |
|
rune
2016/12/20 09:18:47
If you don't have a parent node, won't N always be
|
| nthIndexData = nthIndexCache->m_parentMap->get(element.parentNode()); |
| if (nthIndexData) |
| return nthIndexData->nthIndex(element); |
| unsigned index = uncachedNthChildIndex(element); |
| - if (nthIndexCache && index > kCachedSiblingCountLimit) |
| + if (element.parentNode() && nthIndexCache && index > kCachedSiblingCountLimit) |
| nthIndexCache->cacheNthIndexDataForParent(element); |
| return index; |
| } |
| @@ -97,22 +96,20 @@ unsigned NthIndexCache::nthChildIndex(Element& element) { |
| unsigned NthIndexCache::nthLastChildIndex(Element& element) { |
| if (element.isPseudoElement()) |
| return 1; |
| - DCHECK(element.parentNode()); |
| NthIndexCache* nthIndexCache = element.document().nthIndexCache(); |
| NthIndexData* nthIndexData = nullptr; |
| - if (nthIndexCache && nthIndexCache->m_parentMap) |
| + if (element.parentNode() && nthIndexCache && nthIndexCache->m_parentMap) |
| nthIndexData = nthIndexCache->m_parentMap->get(element.parentNode()); |
| if (nthIndexData) |
| return nthIndexData->nthLastIndex(element); |
| unsigned index = uncachedNthLastChildIndex(element); |
| - if (nthIndexCache && index > kCachedSiblingCountLimit) |
| + if (element.parentNode() && nthIndexCache && index > kCachedSiblingCountLimit) |
| nthIndexCache->cacheNthIndexDataForParent(element); |
| return index; |
| } |
| NthIndexData* NthIndexCache::nthTypeIndexDataForParent(Element& element) const { |
| - DCHECK(element.parentNode()); |
| - if (!m_parentMapForType) |
| + if (!m_parentMapForType || !element.parentNode()) |
| return nullptr; |
| if (const IndexByType* map = m_parentMapForType->get(element.parentNode())) |
| return map->get(element.tagName()); |