| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) |
| 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) | 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) |
| 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. |
| 6 * All rights reserved. | 6 * All rights reserved. |
| 7 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 7 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
| 8 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 8 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
| 9 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. | 9 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
| 10 * (http://www.torchmobile.com/) | 10 * (http://www.torchmobile.com/) |
| (...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 738 parent->setChildrenAffectedByForwardPositionalRules(); | 738 parent->setChildrenAffectedByForwardPositionalRules(); |
| 739 return isFirstOfType(element, element.tagQName()); | 739 return isFirstOfType(element, element.tagQName()); |
| 740 } | 740 } |
| 741 break; | 741 break; |
| 742 case CSSSelector::PseudoLastChild: | 742 case CSSSelector::PseudoLastChild: |
| 743 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { | 743 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
| 744 if (m_mode == ResolvingStyle) { | 744 if (m_mode == ResolvingStyle) { |
| 745 parent->setChildrenAffectedByLastChildRules(); | 745 parent->setChildrenAffectedByLastChildRules(); |
| 746 element.setAffectedByLastChildRules(); | 746 element.setAffectedByLastChildRules(); |
| 747 } | 747 } |
| 748 if (!parent->isFinishedParsingChildren()) | 748 if (!m_isQuerySelector && !parent->isFinishedParsingChildren()) |
| 749 return false; | 749 return false; |
| 750 return isLastChild(element); | 750 return isLastChild(element); |
| 751 } | 751 } |
| 752 break; | 752 break; |
| 753 case CSSSelector::PseudoLastOfType: | 753 case CSSSelector::PseudoLastOfType: |
| 754 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { | 754 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
| 755 if (m_mode == ResolvingStyle) | 755 if (m_mode == ResolvingStyle) |
| 756 parent->setChildrenAffectedByBackwardPositionalRules(); | 756 parent->setChildrenAffectedByBackwardPositionalRules(); |
| 757 if (!parent->isFinishedParsingChildren()) | 757 if (!m_isQuerySelector && !parent->isFinishedParsingChildren()) |
| 758 return false; | 758 return false; |
| 759 return isLastOfType(element, element.tagQName()); | 759 return isLastOfType(element, element.tagQName()); |
| 760 } | 760 } |
| 761 break; | 761 break; |
| 762 case CSSSelector::PseudoOnlyChild: | 762 case CSSSelector::PseudoOnlyChild: |
| 763 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { | 763 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
| 764 if (m_mode == ResolvingStyle) { | 764 if (m_mode == ResolvingStyle) { |
| 765 parent->setChildrenAffectedByFirstChildRules(); | 765 parent->setChildrenAffectedByFirstChildRules(); |
| 766 parent->setChildrenAffectedByLastChildRules(); | 766 parent->setChildrenAffectedByLastChildRules(); |
| 767 element.setAffectedByFirstChildRules(); | 767 element.setAffectedByFirstChildRules(); |
| 768 element.setAffectedByLastChildRules(); | 768 element.setAffectedByLastChildRules(); |
| 769 } | 769 } |
| 770 if (!parent->isFinishedParsingChildren()) | 770 if (!m_isQuerySelector && !parent->isFinishedParsingChildren()) |
| 771 return false; | 771 return false; |
| 772 return isFirstChild(element) && isLastChild(element); | 772 return isFirstChild(element) && isLastChild(element); |
| 773 } | 773 } |
| 774 break; | 774 break; |
| 775 case CSSSelector::PseudoOnlyOfType: | 775 case CSSSelector::PseudoOnlyOfType: |
| 776 // FIXME: This selector is very slow. | 776 // FIXME: This selector is very slow. |
| 777 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { | 777 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
| 778 if (m_mode == ResolvingStyle) { | 778 if (m_mode == ResolvingStyle) { |
| 779 parent->setChildrenAffectedByForwardPositionalRules(); | 779 parent->setChildrenAffectedByForwardPositionalRules(); |
| 780 parent->setChildrenAffectedByBackwardPositionalRules(); | 780 parent->setChildrenAffectedByBackwardPositionalRules(); |
| 781 } | 781 } |
| 782 if (!parent->isFinishedParsingChildren()) | 782 if (!m_isQuerySelector && !parent->isFinishedParsingChildren()) |
| 783 return false; | 783 return false; |
| 784 return isFirstOfType(element, element.tagQName()) && | 784 return isFirstOfType(element, element.tagQName()) && |
| 785 isLastOfType(element, element.tagQName()); | 785 isLastOfType(element, element.tagQName()); |
| 786 } | 786 } |
| 787 break; | 787 break; |
| 788 case CSSSelector::PseudoPlaceholderShown: | 788 case CSSSelector::PseudoPlaceholderShown: |
| 789 if (isHTMLTextFormControlElement(element)) | 789 if (isHTMLTextFormControlElement(element)) |
| 790 return toHTMLTextFormControlElement(element).isPlaceholderVisible(); | 790 return toHTMLTextFormControlElement(element).isPlaceholderVisible(); |
| 791 break; | 791 break; |
| 792 case CSSSelector::PseudoNthChild: | 792 case CSSSelector::PseudoNthChild: |
| 793 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { | 793 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
| 794 if (m_mode == ResolvingStyle) | 794 if (m_mode == ResolvingStyle) |
| 795 parent->setChildrenAffectedByForwardPositionalRules(); | 795 parent->setChildrenAffectedByForwardPositionalRules(); |
| 796 return selector.matchNth(NthIndexCache::nthChildIndex(element)); | 796 return selector.matchNth(NthIndexCache::nthChildIndex(element)); |
| 797 } | 797 } |
| 798 break; | 798 break; |
| 799 case CSSSelector::PseudoNthOfType: | 799 case CSSSelector::PseudoNthOfType: |
| 800 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { | 800 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
| 801 if (m_mode == ResolvingStyle) | 801 if (m_mode == ResolvingStyle) |
| 802 parent->setChildrenAffectedByForwardPositionalRules(); | 802 parent->setChildrenAffectedByForwardPositionalRules(); |
| 803 return selector.matchNth(NthIndexCache::nthOfTypeIndex(element)); | 803 return selector.matchNth(NthIndexCache::nthOfTypeIndex(element)); |
| 804 } | 804 } |
| 805 break; | 805 break; |
| 806 case CSSSelector::PseudoNthLastChild: | 806 case CSSSelector::PseudoNthLastChild: |
| 807 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { | 807 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
| 808 if (m_mode == ResolvingStyle) | 808 if (m_mode == ResolvingStyle) |
| 809 parent->setChildrenAffectedByBackwardPositionalRules(); | 809 parent->setChildrenAffectedByBackwardPositionalRules(); |
| 810 if (!parent->isFinishedParsingChildren()) | 810 if (!m_isQuerySelector && !parent->isFinishedParsingChildren()) |
| 811 return false; | 811 return false; |
| 812 return selector.matchNth(NthIndexCache::nthLastChildIndex(element)); | 812 return selector.matchNth(NthIndexCache::nthLastChildIndex(element)); |
| 813 } | 813 } |
| 814 break; | 814 break; |
| 815 case CSSSelector::PseudoNthLastOfType: | 815 case CSSSelector::PseudoNthLastOfType: |
| 816 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { | 816 if (ContainerNode* parent = element.parentElementOrDocumentFragment()) { |
| 817 if (m_mode == ResolvingStyle) | 817 if (m_mode == ResolvingStyle) |
| 818 parent->setChildrenAffectedByBackwardPositionalRules(); | 818 parent->setChildrenAffectedByBackwardPositionalRules(); |
| 819 if (!parent->isFinishedParsingChildren()) | 819 if (!m_isQuerySelector && !parent->isFinishedParsingChildren()) |
| 820 return false; | 820 return false; |
| 821 return selector.matchNth(NthIndexCache::nthLastOfTypeIndex(element)); | 821 return selector.matchNth(NthIndexCache::nthLastOfTypeIndex(element)); |
| 822 } | 822 } |
| 823 break; | 823 break; |
| 824 case CSSSelector::PseudoTarget: | 824 case CSSSelector::PseudoTarget: |
| 825 return element == element.document().cssTarget(); | 825 return element == element.document().cssTarget(); |
| 826 case CSSSelector::PseudoAny: { | 826 case CSSSelector::PseudoAny: { |
| 827 SelectorCheckingContext subContext(context); | 827 SelectorCheckingContext subContext(context); |
| 828 subContext.isSubSelector = true; | 828 subContext.isSubSelector = true; |
| 829 DCHECK(selector.selectorList()); | 829 DCHECK(selector.selectorList()); |
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1268 } | 1268 } |
| 1269 | 1269 |
| 1270 bool SelectorChecker::matchesFocusPseudoClass(const Element& element) { | 1270 bool SelectorChecker::matchesFocusPseudoClass(const Element& element) { |
| 1271 if (InspectorInstrumentation::forcePseudoState(const_cast<Element*>(&element), | 1271 if (InspectorInstrumentation::forcePseudoState(const_cast<Element*>(&element), |
| 1272 CSSSelector::PseudoFocus)) | 1272 CSSSelector::PseudoFocus)) |
| 1273 return true; | 1273 return true; |
| 1274 return element.isFocused() && isFrameFocused(element); | 1274 return element.isFocused() && isFrameFocused(element); |
| 1275 } | 1275 } |
| 1276 | 1276 |
| 1277 } // namespace blink | 1277 } // namespace blink |
| OLD | NEW |