OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/css/RuleFeature.h" | 5 #include "core/css/RuleFeature.h" |
6 | 6 |
7 #include "core/css/CSSSelectorList.h" | 7 #include "core/css/CSSSelectorList.h" |
8 #include "core/css/RuleSet.h" | 8 #include "core/css/RuleSet.h" |
9 #include "core/css/StylePropertySet.h" | 9 #include "core/css/StylePropertySet.h" |
10 #include "core/css/StyleRule.h" | 10 #include "core/css/StyleRule.h" |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 Element* element = Traversal<HTMLElement>::firstChild(*Traversal<HTMLEle
ment>::firstChild(*m_document->body())); | 102 Element* element = Traversal<HTMLElement>::firstChild(*Traversal<HTMLEle
ment>::firstChild(*m_document->body())); |
103 m_ruleFeatureSet->collectInvalidationSetsForAttribute(invalidationLists,
*element, attributeName); | 103 m_ruleFeatureSet->collectInvalidationSetsForAttribute(invalidationLists,
*element, attributeName); |
104 } | 104 } |
105 | 105 |
106 void collectInvalidationSetsForPseudoClass(InvalidationLists& invalidationLi
sts, CSSSelector::PseudoType pseudo) const | 106 void collectInvalidationSetsForPseudoClass(InvalidationLists& invalidationLi
sts, CSSSelector::PseudoType pseudo) const |
107 { | 107 { |
108 Element* element = Traversal<HTMLElement>::firstChild(*Traversal<HTMLEle
ment>::firstChild(*m_document->body())); | 108 Element* element = Traversal<HTMLElement>::firstChild(*Traversal<HTMLEle
ment>::firstChild(*m_document->body())); |
109 m_ruleFeatureSet->collectInvalidationSetsForPseudoClass(invalidationList
s, *element, pseudo); | 109 m_ruleFeatureSet->collectInvalidationSetsForPseudoClass(invalidationList
s, *element, pseudo); |
110 } | 110 } |
111 | 111 |
| 112 void collectUniversalSiblingInvalidationSet(InvalidationLists& invalidationL
ists) |
| 113 { |
| 114 m_ruleFeatureSet->collectUniversalSiblingInvalidationSet(invalidationLis
ts); |
| 115 } |
| 116 |
112 const HashSet<AtomicString>& classSet(const InvalidationSet& invalidationSet
) | 117 const HashSet<AtomicString>& classSet(const InvalidationSet& invalidationSet
) |
113 { | 118 { |
114 return invalidationSet.classSetForTesting(); | 119 return invalidationSet.classSetForTesting(); |
115 } | 120 } |
116 | 121 |
117 const HashSet<AtomicString>& idSet(const InvalidationSet& invalidationSet) | 122 const HashSet<AtomicString>& idSet(const InvalidationSet& invalidationSet) |
118 { | 123 { |
119 return invalidationSet.idSetForTesting(); | 124 return invalidationSet.idSetForTesting(); |
120 } | 125 } |
121 | 126 |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host-context(*
) [attr]")); | 566 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host-context(*
) [attr]")); |
562 expectUncommonAttributeRuleCount(1); | 567 expectUncommonAttributeRuleCount(1); |
563 } | 568 } |
564 | 569 |
565 TEST_F(RuleFeatureSetTest, uncommonAttributeRulesAfterHostContextBeforePseudo) | 570 TEST_F(RuleFeatureSetTest, uncommonAttributeRulesAfterHostContextBeforePseudo) |
566 { | 571 { |
567 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host-context([
attr])::before")); | 572 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host-context([
attr])::before")); |
568 expectUncommonAttributeRuleCount(1); | 573 expectUncommonAttributeRuleCount(1); |
569 } | 574 } |
570 | 575 |
| 576 TEST_F(RuleFeatureSetTest, universalSiblingInvalidationDirectAdjacent) |
| 577 { |
| 578 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* + .a")); |
| 579 |
| 580 InvalidationLists invalidationLists; |
| 581 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 582 |
| 583 expectSiblingInvalidation(1, "a", invalidationLists.siblings); |
| 584 expectSelfInvalidation(invalidationLists.siblings); |
| 585 } |
| 586 |
| 587 TEST_F(RuleFeatureSetTest, universalSiblingInvalidationMultipleDirectAdjacent) |
| 588 { |
| 589 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* + .a + .b")); |
| 590 |
| 591 InvalidationLists invalidationLists; |
| 592 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 593 |
| 594 expectSiblingInvalidation(2, "b", invalidationLists.siblings); |
| 595 expectSelfInvalidation(invalidationLists.siblings); |
| 596 } |
| 597 |
| 598 TEST_F(RuleFeatureSetTest, universalSiblingInvalidationDirectAdjacentDescendant) |
| 599 { |
| 600 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* + .a .b")); |
| 601 |
| 602 InvalidationLists invalidationLists; |
| 603 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 604 |
| 605 expectSiblingDescendantInvalidation(1, "a", "b", invalidationLists.siblings)
; |
| 606 expectNoSelfInvalidation(invalidationLists.siblings); |
| 607 } |
| 608 |
| 609 TEST_F(RuleFeatureSetTest, universalSiblingInvalidationIndirectAdjacent) |
| 610 { |
| 611 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* ~ .a")); |
| 612 |
| 613 InvalidationLists invalidationLists; |
| 614 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 615 |
| 616 expectSiblingInvalidation(UINT_MAX, "a", invalidationLists.siblings); |
| 617 expectSelfInvalidation(invalidationLists.siblings); |
| 618 } |
| 619 |
| 620 TEST_F(RuleFeatureSetTest, universalSiblingInvalidationMultipleIndirectAdjacent) |
| 621 { |
| 622 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* ~ .a ~ .b")); |
| 623 |
| 624 InvalidationLists invalidationLists; |
| 625 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 626 |
| 627 expectSiblingInvalidation(UINT_MAX, "b", invalidationLists.siblings); |
| 628 expectSelfInvalidation(invalidationLists.siblings); |
| 629 } |
| 630 |
| 631 TEST_F(RuleFeatureSetTest, universalSiblingInvalidationIndirectAdjacentDescendan
t) |
| 632 { |
| 633 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* ~ .a .b")); |
| 634 |
| 635 InvalidationLists invalidationLists; |
| 636 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 637 |
| 638 expectSiblingDescendantInvalidation(UINT_MAX, "a", "b", invalidationLists.si
blings); |
| 639 expectNoSelfInvalidation(invalidationLists.siblings); |
| 640 } |
| 641 |
| 642 TEST_F(RuleFeatureSetTest, universalSiblingInvalidationNot) |
| 643 { |
| 644 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":not(.a) + .b")
); |
| 645 |
| 646 InvalidationLists invalidationLists; |
| 647 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 648 |
| 649 expectSiblingInvalidation(1, "b", invalidationLists.siblings); |
| 650 expectSelfInvalidation(invalidationLists.siblings); |
| 651 } |
| 652 |
| 653 TEST_F(RuleFeatureSetTest, nonUniversalSiblingInvalidationNot) |
| 654 { |
| 655 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("#x:not(.a) + .b
")); |
| 656 |
| 657 InvalidationLists invalidationLists; |
| 658 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 659 |
| 660 expectNoInvalidation(invalidationLists.siblings); |
| 661 } |
| 662 |
| 663 TEST_F(RuleFeatureSetTest, universalSiblingInvalidationAny) |
| 664 { |
| 665 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":-webkit-any(.a
) + .b")); |
| 666 |
| 667 InvalidationLists invalidationLists; |
| 668 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 669 |
| 670 expectSiblingInvalidation(1, "b", invalidationLists.siblings); |
| 671 expectSelfInvalidation(invalidationLists.siblings); |
| 672 } |
| 673 |
| 674 TEST_F(RuleFeatureSetTest, nonUniversalSiblingInvalidationAny) |
| 675 { |
| 676 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("#x:-webkit-any(
.a) + .b")); |
| 677 |
| 678 InvalidationLists invalidationLists; |
| 679 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 680 |
| 681 expectNoInvalidation(invalidationLists.siblings); |
| 682 } |
| 683 |
| 684 TEST_F(RuleFeatureSetTest, universalSiblingInvalidationType) |
| 685 { |
| 686 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("div + .a")); |
| 687 |
| 688 InvalidationLists invalidationLists; |
| 689 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 690 |
| 691 expectSiblingInvalidation(1, "a", invalidationLists.siblings); |
| 692 expectSelfInvalidation(invalidationLists.siblings); |
| 693 } |
| 694 |
| 695 TEST_F(RuleFeatureSetTest, nonUniversalSiblingInvalidationType) |
| 696 { |
| 697 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("div#x + .a")); |
| 698 |
| 699 InvalidationLists invalidationLists; |
| 700 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 701 |
| 702 expectNoInvalidation(invalidationLists.siblings); |
| 703 } |
| 704 |
| 705 TEST_F(RuleFeatureSetTest, universalSiblingInvalidationLink) |
| 706 { |
| 707 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":link + .a")); |
| 708 |
| 709 InvalidationLists invalidationLists; |
| 710 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 711 |
| 712 expectSiblingInvalidation(1, "a", invalidationLists.siblings); |
| 713 expectSelfInvalidation(invalidationLists.siblings); |
| 714 } |
| 715 |
| 716 TEST_F(RuleFeatureSetTest, nonUniversalSiblingInvalidationLink) |
| 717 { |
| 718 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("#x:link + .a"))
; |
| 719 |
| 720 InvalidationLists invalidationLists; |
| 721 collectUniversalSiblingInvalidationSet(invalidationLists); |
| 722 |
| 723 expectNoInvalidation(invalidationLists.siblings); |
| 724 } |
| 725 |
571 } // namespace blink | 726 } // namespace blink |
OLD | NEW |