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..b7896519ab04793e6421f367d2e378304a31ed00 100644 |
| --- a/third_party/WebKit/Source/core/dom/NthIndexCache.cpp |
| +++ b/third_party/WebKit/Source/core/dom/NthIndexCache.cpp |
| @@ -79,9 +79,8 @@ unsigned uncachedNthLastOfTypeIndex(Element& element, unsigned& siblingCount) { |
| } // namespace |
| unsigned NthIndexCache::nthChildIndex(Element& element) { |
| - if (element.isPseudoElement()) |
| + if (element.isPseudoElement() || !element.parentNode()) |
| return 1; |
| - DCHECK(element.parentNode()); |
| NthIndexCache* nthIndexCache = element.document().nthIndexCache(); |
| NthIndexData* nthIndexData = nullptr; |
| if (nthIndexCache && nthIndexCache->m_parentMap) |
| @@ -89,7 +88,7 @@ unsigned NthIndexCache::nthChildIndex(Element& element) { |
| if (nthIndexData) |
| return nthIndexData->nthIndex(element); |
| unsigned index = uncachedNthChildIndex(element); |
| - if (nthIndexCache && index > kCachedSiblingCountLimit) |
| + if (element.parentNode() && nthIndexCache && index > kCachedSiblingCountLimit) |
|
rune
2017/01/18 21:33:19
parentNode() is always non-null here.
emilio
2017/01/18 23:33:07
Good catches, sorry, should've paged in better all
|
| 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) |
|
rune
2017/01/18 21:33:19
Check !parentNode and return 1 as for nthChildInde
|
| 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) |
|
rune
2017/01/18 21:33:19
No need to add the parentNode() check if you early
|
| nthIndexCache->cacheNthIndexDataForParent(element); |
| return index; |
| } |
| NthIndexData* NthIndexCache::nthTypeIndexDataForParent(Element& element) const { |
| - DCHECK(element.parentNode()); |
| - if (!m_parentMapForType) |
| + if (!m_parentMapForType || !element.parentNode()) |
|
rune
2017/01/18 21:33:19
Early return in nthOfTypeIndex and nthLastOfTypeIn
|
| return nullptr; |
| if (const IndexByType* map = m_parentMapForType->get(element.parentNode())) |
| return map->get(element.tagName()); |