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 |