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()); |