Index: third_party/WebKit/Source/core/css/SelectorChecker.cpp |
diff --git a/third_party/WebKit/Source/core/css/SelectorChecker.cpp b/third_party/WebKit/Source/core/css/SelectorChecker.cpp |
index b8c76c9a1b81511e35f06dd45457ac3abc1e5edd..b28a4861df01f7f1e8700ec634ff8e89d26fcd09 100644 |
--- a/third_party/WebKit/Source/core/css/SelectorChecker.cpp |
+++ b/third_party/WebKit/Source/core/css/SelectorChecker.cpp |
@@ -764,103 +764,97 @@ bool SelectorChecker::checkPseudoClass(const SelectorCheckingContext& context, |
return result; |
} |
case CSSSelector::PseudoFirstChild: |
- if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
- if (m_mode == ResolvingStyle) { |
+ if (m_mode == ResolvingStyle) { |
+ if (ContainerNode* parent = element.parentElementOrDocumentFragment()) |
parent->setChildrenAffectedByFirstChildRules(); |
- element.setAffectedByFirstChildRules(); |
- } |
- return isFirstChild(element); |
+ element.setAffectedByFirstChildRules(); |
} |
- break; |
+ return isFirstChild(element); |
case CSSSelector::PseudoFirstOfType: |
- if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
- if (m_mode == ResolvingStyle) |
+ if (m_mode == ResolvingStyle) { |
+ if (ContainerNode* parent = element.parentElementOrDocumentFragment()) |
parent->setChildrenAffectedByForwardPositionalRules(); |
- return isFirstOfType(element, element.tagQName()); |
} |
- break; |
- case CSSSelector::PseudoLastChild: |
- if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
- if (m_mode == ResolvingStyle) { |
+ return isFirstOfType(element, element.tagQName()); |
+ case CSSSelector::PseudoLastChild: { |
+ ContainerNode* parent = element.parentElementOrDocumentFragment(); |
+ if (m_mode == ResolvingStyle) { |
+ if (parent) |
parent->setChildrenAffectedByLastChildRules(); |
- element.setAffectedByLastChildRules(); |
- } |
- if (!m_isQuerySelector && !parent->isFinishedParsingChildren()) |
- return false; |
- return isLastChild(element); |
+ element.setAffectedByLastChildRules(); |
} |
- break; |
- case CSSSelector::PseudoLastOfType: |
- if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
- if (m_mode == ResolvingStyle) |
+ if (!m_isQuerySelector && parent && !parent->isFinishedParsingChildren()) |
+ return false; |
+ return isLastChild(element); |
+ } |
+ case CSSSelector::PseudoLastOfType: { |
+ ContainerNode* parent = element.parentElementOrDocumentFragment(); |
+ if (m_mode == ResolvingStyle) { |
+ if (parent) |
parent->setChildrenAffectedByBackwardPositionalRules(); |
- if (!m_isQuerySelector && !parent->isFinishedParsingChildren()) |
- return false; |
- return isLastOfType(element, element.tagQName()); |
} |
- break; |
- case CSSSelector::PseudoOnlyChild: |
- if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
- if (m_mode == ResolvingStyle) { |
+ if (!m_isQuerySelector && parent && !parent->isFinishedParsingChildren()) |
+ return false; |
+ return isLastOfType(element, element.tagQName()); |
+ } |
+ case CSSSelector::PseudoOnlyChild: { |
+ ContainerNode* parent = element.parentElementOrDocumentFragment(); |
+ if (m_mode == ResolvingStyle) { |
+ if (parent) { |
parent->setChildrenAffectedByFirstChildRules(); |
parent->setChildrenAffectedByLastChildRules(); |
- element.setAffectedByFirstChildRules(); |
- element.setAffectedByLastChildRules(); |
} |
- if (!m_isQuerySelector && !parent->isFinishedParsingChildren()) |
- return false; |
- return isFirstChild(element) && isLastChild(element); |
+ element.setAffectedByFirstChildRules(); |
+ element.setAffectedByLastChildRules(); |
} |
- break; |
- case CSSSelector::PseudoOnlyOfType: |
+ if (!m_isQuerySelector && parent && !parent->isFinishedParsingChildren()) |
+ return false; |
+ return isFirstChild(element) && isLastChild(element); |
+ } |
+ case CSSSelector::PseudoOnlyOfType: { |
// FIXME: This selector is very slow. |
- if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
- if (m_mode == ResolvingStyle) { |
- parent->setChildrenAffectedByForwardPositionalRules(); |
- parent->setChildrenAffectedByBackwardPositionalRules(); |
- } |
- if (!m_isQuerySelector && !parent->isFinishedParsingChildren()) |
- return false; |
- return isFirstOfType(element, element.tagQName()) && |
- isLastOfType(element, element.tagQName()); |
+ ContainerNode* parent = element.parentElementOrDocumentFragment(); |
+ if (m_mode == ResolvingStyle && parent) { |
+ parent->setChildrenAffectedByForwardPositionalRules(); |
+ parent->setChildrenAffectedByBackwardPositionalRules(); |
} |
- break; |
+ if (!m_isQuerySelector && parent && !parent->isFinishedParsingChildren()) |
+ return false; |
+ return isFirstOfType(element, element.tagQName()) && |
+ isLastOfType(element, element.tagQName()); |
+ } |
case CSSSelector::PseudoPlaceholderShown: |
if (isTextControlElement(element)) |
return toTextControlElement(element).isPlaceholderVisible(); |
break; |
case CSSSelector::PseudoNthChild: |
- if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
- if (m_mode == ResolvingStyle) |
+ if (m_mode == ResolvingStyle) { |
+ if (ContainerNode* parent = element.parentElementOrDocumentFragment()) |
parent->setChildrenAffectedByForwardPositionalRules(); |
- return selector.matchNth(NthIndexCache::nthChildIndex(element)); |
} |
- break; |
+ return selector.matchNth(NthIndexCache::nthChildIndex(element)); |
case CSSSelector::PseudoNthOfType: |
- if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
- if (m_mode == ResolvingStyle) |
+ if (m_mode == ResolvingStyle) { |
+ if (ContainerNode* parent = element.parentElementOrDocumentFragment()) |
parent->setChildrenAffectedByForwardPositionalRules(); |
- return selector.matchNth(NthIndexCache::nthOfTypeIndex(element)); |
- } |
- break; |
- case CSSSelector::PseudoNthLastChild: |
- if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
- if (m_mode == ResolvingStyle) |
- parent->setChildrenAffectedByBackwardPositionalRules(); |
- if (!m_isQuerySelector && !parent->isFinishedParsingChildren()) |
- return false; |
- return selector.matchNth(NthIndexCache::nthLastChildIndex(element)); |
- } |
- break; |
- case CSSSelector::PseudoNthLastOfType: |
- if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
- if (m_mode == ResolvingStyle) |
- parent->setChildrenAffectedByBackwardPositionalRules(); |
- if (!m_isQuerySelector && !parent->isFinishedParsingChildren()) |
- return false; |
- return selector.matchNth(NthIndexCache::nthLastOfTypeIndex(element)); |
} |
- break; |
+ return selector.matchNth(NthIndexCache::nthOfTypeIndex(element)); |
+ case CSSSelector::PseudoNthLastChild: { |
+ ContainerNode* parent = element.parentElementOrDocumentFragment(); |
+ if (m_mode == ResolvingStyle && parent) |
+ parent->setChildrenAffectedByBackwardPositionalRules(); |
+ if (!m_isQuerySelector && parent && !parent->isFinishedParsingChildren()) |
+ return false; |
+ return selector.matchNth(NthIndexCache::nthLastChildIndex(element)); |
+ } |
+ case CSSSelector::PseudoNthLastOfType: { |
+ ContainerNode* parent = element.parentElementOrDocumentFragment(); |
+ if (m_mode == ResolvingStyle && parent) |
+ parent->setChildrenAffectedByBackwardPositionalRules(); |
+ if (!m_isQuerySelector && parent && !parent->isFinishedParsingChildren()) |
+ return false; |
+ return selector.matchNth(NthIndexCache::nthLastOfTypeIndex(element)); |
+ } |
case CSSSelector::PseudoTarget: |
return element == element.document().cssTarget(); |
case CSSSelector::PseudoAny: { |