Changeset 190006 in webkit
- Timestamp:
- Sep 18, 2015 7:31:01 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r189998 r190006 1 2015-09-18 Antti Koivisto <antti@apple.com> 2 3 Don't create renderers for children of shadow host 4 https://bugs.webkit.org/show_bug.cgi?id=149363 5 6 Reviewed by Ryosuke Niwa. 7 8 * fast/shadow-dom/css-scoping-shadow-root-hides-children-expected.html: Added. 9 * fast/shadow-dom/css-scoping-shadow-root-hides-children.html: Added. 10 1 11 2015-09-18 Jake Nielsen <jacob_nielsen@apple.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r190003 r190006 1 2015-09-18 Antti Koivisto <antti@apple.com> 2 3 Don't create renderers for children of shadow host 4 https://bugs.webkit.org/show_bug.cgi?id=149363 5 6 Reviewed by Ryosuke Niwa. 7 8 Test: fast/shadow-dom/css-scoping-shadow-root-hides-children.html 9 10 * dom/ShadowRoot.h: 11 * style/StyleResolveTree.cpp: 12 (WebCore::Style::attachRenderTree): 13 (WebCore::Style::resolveShadowTree): 14 (WebCore::Style::resolveChildren): 15 (WebCore::Style::resolveTree): 16 1 17 2015-09-08 Darin Adler <darin@apple.com> 2 18 -
trunk/Source/WebCore/dom/ShadowRoot.h
r189987 r190006 99 99 virtual Ref<Node> cloneNodeInternal(Document&, CloningOperation) override; 100 100 101 bool m_resetStyleInheritance : 1;101 bool m_resetStyleInheritance; 102 102 Type m_type; 103 103 -
trunk/Source/WebCore/style/StyleResolveTree.cpp
r189987 r190006 492 492 attachBeforeOrAfterPseudoElementIfNeeded(current, BEFORE, childRenderTreePosition); 493 493 494 if (ShadowRoot* shadowRoot = current.shadowRoot()) { 494 auto* shadowRoot = current.shadowRoot(); 495 if (shadowRoot) { 495 496 parentPusher.push(); 496 497 attachShadowRoot(*shadowRoot); … … 498 499 parentPusher.push(); 499 500 500 attachChildren(current, renderer->style(), childRenderTreePosition); 501 bool skipChildren = shadowRoot && shadowRoot->type() != ShadowRoot::Type::UserAgent; 502 if (!skipChildren) 503 attachChildren(current, renderer->style(), childRenderTreePosition); 501 504 502 505 if (AXObjectCache* cache = current.document().axObjectCache()) … … 677 680 static void resolveShadowTree(ShadowRoot& shadowRoot, Element& host, Style::Change change) 678 681 { 682 StyleResolverParentPusher parentPusher(&host); 683 679 684 ASSERT(shadowRoot.host() == &host); 680 685 ASSERT(host.renderer()); … … 687 692 continue; 688 693 } 689 if (is<Element>(*child)) 694 if (is<Element>(*child)) { 695 parentPusher.push(); 690 696 resolveTree(downcast<Element>(*child), host.renderer()->style(), renderTreePosition, change); 697 } 691 698 } 692 699 … … 763 770 #endif // PLATFORM(IOS) 764 771 772 static void resolveChildren(Element& current, RenderStyle& inheritedStyle, Change change, RenderTreePosition& childRenderTreePosition) 773 { 774 StyleResolverParentPusher parentPusher(¤t); 775 776 bool elementNeedingStyleRecalcAffectsNextSiblingElementStyle = false; 777 for (Node* child = current.firstChild(); child; child = child->nextSibling()) { 778 if (RenderObject* childRenderer = child->renderer()) 779 childRenderTreePosition.invalidateNextSibling(*childRenderer); 780 if (is<Text>(*child) && child->needsStyleRecalc()) { 781 resolveTextNode(downcast<Text>(*child), childRenderTreePosition); 782 continue; 783 } 784 if (!is<Element>(*child)) 785 continue; 786 787 Element& childElement = downcast<Element>(*child); 788 if (elementNeedingStyleRecalcAffectsNextSiblingElementStyle) { 789 if (childElement.styleIsAffectedByPreviousSibling()) 790 childElement.setNeedsStyleRecalc(); 791 elementNeedingStyleRecalcAffectsNextSiblingElementStyle = childElement.affectsNextSiblingElementStyle(); 792 } else if (childElement.needsStyleRecalc()) 793 elementNeedingStyleRecalcAffectsNextSiblingElementStyle = childElement.affectsNextSiblingElementStyle(); 794 if (change >= Inherit || childElement.childNeedsStyleRecalc() || childElement.needsStyleRecalc()) { 795 parentPusher.push(); 796 resolveTree(childElement, inheritedStyle, childRenderTreePosition, change); 797 } 798 } 799 } 800 765 801 void resolveTree(Element& current, RenderStyle& inheritedStyle, RenderTreePosition& renderTreePosition, Change change) 766 802 { … … 791 827 792 828 if (change != Detach && renderer) { 793 StyleResolverParentPusher parentPusher(¤t); 794 795 if (ShadowRoot* shadowRoot = current.shadowRoot()) { 796 if (change >= Inherit || shadowRoot->childNeedsStyleRecalc() || shadowRoot->needsStyleRecalc()) { 797 parentPusher.push(); 798 resolveShadowTree(*shadowRoot, current, change); 799 } 800 } 829 auto* shadowRoot = current.shadowRoot(); 830 if (shadowRoot && (change >= Inherit || shadowRoot->childNeedsStyleRecalc() || shadowRoot->needsStyleRecalc())) 831 resolveShadowTree(*shadowRoot, current, change); 801 832 802 833 RenderTreePosition childRenderTreePosition(*renderer); 803 834 updateBeforeOrAfterPseudoElement(current, change, BEFORE, childRenderTreePosition); 804 835 805 bool elementNeedingStyleRecalcAffectsNextSiblingElementStyle = false; 806 for (Node* child = current.firstChild(); child; child = child->nextSibling()) { 807 if (RenderObject* childRenderer = child->renderer()) 808 childRenderTreePosition.invalidateNextSibling(*childRenderer); 809 if (is<Text>(*child) && child->needsStyleRecalc()) { 810 resolveTextNode(downcast<Text>(*child), childRenderTreePosition); 811 continue; 812 } 813 if (!is<Element>(*child)) 814 continue; 815 816 Element& childElement = downcast<Element>(*child); 817 if (elementNeedingStyleRecalcAffectsNextSiblingElementStyle) { 818 if (childElement.styleIsAffectedByPreviousSibling()) 819 childElement.setNeedsStyleRecalc(); 820 elementNeedingStyleRecalcAffectsNextSiblingElementStyle = childElement.affectsNextSiblingElementStyle(); 821 } else if (childElement.needsStyleRecalc()) 822 elementNeedingStyleRecalcAffectsNextSiblingElementStyle = childElement.affectsNextSiblingElementStyle(); 823 if (change >= Inherit || childElement.childNeedsStyleRecalc() || childElement.needsStyleRecalc()) { 824 parentPusher.push(); 825 resolveTree(childElement, renderer->style(), childRenderTreePosition, change); 826 } 827 } 836 bool skipChildren = shadowRoot && shadowRoot->type() != ShadowRoot::Type::UserAgent; 837 if (!skipChildren) 838 resolveChildren(current, renderer->style(), change, childRenderTreePosition); 828 839 829 840 updateBeforeOrAfterPseudoElement(current, change, AFTER, childRenderTreePosition);
Note: See TracChangeset
for help on using the changeset viewer.