Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: trunk/Source/core/css/resolver/StyleResolver.cpp

Issue 948053002: Revert 190605 "Make RenderObject::style() return a const object" (Closed) Base URL: svn://svn.chromium.org/blink/
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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. All rights reserved. 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 adjuster.adjustLayoutStyle(state.mutableStyleRef(), *state.parentStyle(), el ement, authorStyleInfo(state)); 520 adjuster.adjustLayoutStyle(state.mutableStyleRef(), *state.parentStyle(), el ement, authorStyleInfo(state));
521 } 521 }
522 522
523 // Start loading resources referenced by this style. 523 // Start loading resources referenced by this style.
524 void StyleResolver::loadPendingResources(StyleResolverState& state) 524 void StyleResolver::loadPendingResources(StyleResolverState& state)
525 { 525 {
526 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle Resources()); 526 m_styleResourceLoader.loadPendingResources(state.style(), state.elementStyle Resources());
527 document().styleEngine()->fontSelector()->fontLoader()->loadPendingFonts(); 527 document().styleEngine()->fontSelector()->fontLoader()->loadPendingFonts();
528 } 528 }
529 529
530 PassRefPtr<LayoutStyle> StyleResolver::styleForElement(Element* element, const L ayoutStyle* defaultParent, StyleSharingBehavior sharingBehavior, 530 PassRefPtr<LayoutStyle> StyleResolver::styleForElement(Element* element, LayoutS tyle* defaultParent, StyleSharingBehavior sharingBehavior,
531 RuleMatchingBehavior matchingBehavior) 531 RuleMatchingBehavior matchingBehavior)
532 { 532 {
533 ASSERT(document().frame()); 533 ASSERT(document().frame());
534 ASSERT(document().settings()); 534 ASSERT(document().settings());
535 ASSERT(!hasPendingAuthorStyleSheets()); 535 ASSERT(!hasPendingAuthorStyleSheets());
536 ASSERT(!m_needCollectFeatures); 536 ASSERT(!m_needCollectFeatures);
537 537
538 // Once an element has a renderer, we don't try to destroy it, since otherwi se the renderer 538 // Once an element has a renderer, we don't try to destroy it, since otherwi se the renderer
539 // will vanish if a style recalc happens during loading. 539 // will vanish if a style recalc happens during loading.
540 if (sharingBehavior == AllowStyleSharing && !document().isRenderingReady() & & !element->renderer()) { 540 if (sharingBehavior == AllowStyleSharing && !document().isRenderingReady() & & !element->renderer()) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 } else { 577 } else {
578 state.setStyle(defaultStyleForElement()); 578 state.setStyle(defaultStyleForElement());
579 state.setParentStyle(LayoutStyle::clone(*state.style())); 579 state.setParentStyle(LayoutStyle::clone(*state.style()));
580 } 580 }
581 } 581 }
582 582
583 // contenteditable attribute (implemented by -webkit-user-modify) should 583 // contenteditable attribute (implemented by -webkit-user-modify) should
584 // be propagated from shadow host to distributed node. 584 // be propagated from shadow host to distributed node.
585 if (state.distributedToInsertionPoint()) { 585 if (state.distributedToInsertionPoint()) {
586 if (Element* parent = element->parentElement()) { 586 if (Element* parent = element->parentElement()) {
587 if (LayoutStyle* styleOfShadowHost = parent->mutableLayoutStyle()) 587 if (LayoutStyle* styleOfShadowHost = parent->layoutStyle())
588 state.style()->setUserModify(styleOfShadowHost->userModify()); 588 state.style()->setUserModify(styleOfShadowHost->userModify());
589 } 589 }
590 } 590 }
591 591
592 if (element->isLink()) { 592 if (element->isLink()) {
593 state.style()->setIsLink(true); 593 state.style()->setIsLink(true);
594 EInsideLink linkState = state.elementLinkState(); 594 EInsideLink linkState = state.elementLinkState();
595 if (linkState != NotInsideLink) { 595 if (linkState != NotInsideLink) {
596 bool forceVisited = InspectorInstrumentation::forcePseudoState(eleme nt, CSSSelector::PseudoVisited); 596 bool forceVisited = InspectorInstrumentation::forcePseudoState(eleme nt, CSSSelector::PseudoVisited);
597 if (forceVisited) 597 if (forceVisited)
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 641
642 setAnimationUpdateIfNeeded(state, *element); 642 setAnimationUpdateIfNeeded(state, *element);
643 643
644 if (state.style()->hasViewportUnits()) 644 if (state.style()->hasViewportUnits())
645 document().setHasViewportUnits(); 645 document().setHasViewportUnits();
646 646
647 // Now return the style. 647 // Now return the style.
648 return state.takeStyle(); 648 return state.takeStyle();
649 } 649 }
650 650
651 PassRefPtr<LayoutStyle> StyleResolver::styleForKeyframe(Element& element, const LayoutStyle& elementStyle, const LayoutStyle* parentStyle, const StyleRuleKeyfra me* keyframe, const AtomicString& animationName) 651 PassRefPtr<LayoutStyle> StyleResolver::styleForKeyframe(Element& element, const LayoutStyle& elementStyle, LayoutStyle* parentStyle, const StyleRuleKeyframe* ke yframe, const AtomicString& animationName)
652 { 652 {
653 ASSERT(document().frame()); 653 ASSERT(document().frame());
654 ASSERT(document().settings()); 654 ASSERT(document().settings());
655 ASSERT(!hasPendingAuthorStyleSheets()); 655 ASSERT(!hasPendingAuthorStyleSheets());
656 656
657 StyleResolverState state(document(), &element, parentStyle); 657 StyleResolverState state(document(), &element, parentStyle);
658 658
659 MatchResult result; 659 MatchResult result;
660 result.addMatchedProperties(&keyframe->properties()); 660 result.addMatchedProperties(&keyframe->properties());
661 661
(...skipping 21 matching lines...) Expand all
683 didAccess(); 683 didAccess();
684 684
685 return state.takeStyle(); 685 return state.takeStyle();
686 } 686 }
687 687
688 // This function is used by the WebAnimations JavaScript API method animate(). 688 // This function is used by the WebAnimations JavaScript API method animate().
689 // FIXME: Remove this when animate() switches away from resolution-dependent par sing. 689 // FIXME: Remove this when animate() switches away from resolution-dependent par sing.
690 PassRefPtrWillBeRawPtr<AnimatableValue> StyleResolver::createAnimatableValueSnap shot(Element& element, CSSPropertyID property, CSSValue& value) 690 PassRefPtrWillBeRawPtr<AnimatableValue> StyleResolver::createAnimatableValueSnap shot(Element& element, CSSPropertyID property, CSSValue& value)
691 { 691 {
692 RefPtr<LayoutStyle> style; 692 RefPtr<LayoutStyle> style;
693 if (const LayoutStyle* elementStyle = element.layoutStyle()) 693 if (LayoutStyle* elementStyle = element.layoutStyle())
694 style = LayoutStyle::clone(*elementStyle); 694 style = LayoutStyle::clone(*elementStyle);
695 else 695 else
696 style = LayoutStyle::create(); 696 style = LayoutStyle::create();
697 StyleResolverState state(element.document(), &element); 697 StyleResolverState state(element.document(), &element);
698 state.setStyle(style); 698 state.setStyle(style);
699 return createAnimatableValueSnapshot(state, property, value); 699 return createAnimatableValueSnapshot(state, property, value);
700 } 700 }
701 701
702 PassRefPtrWillBeRawPtr<AnimatableValue> StyleResolver::createAnimatableValueSnap shot(StyleResolverState& state, CSSPropertyID property, CSSValue& value) 702 PassRefPtrWillBeRawPtr<AnimatableValue> StyleResolver::createAnimatableValueSnap shot(StyleResolverState& state, CSSPropertyID property, CSSValue& value)
703 { 703 {
(...skipping 22 matching lines...) Expand all
726 726
727 if (pseudoId == BACKDROP && !parent.isInTopLayer()) 727 if (pseudoId == BACKDROP && !parent.isInTopLayer())
728 return nullptr; 728 return nullptr;
729 729
730 if (pseudoId == FIRST_LETTER && (parent.isSVGElement() || !FirstLetterPseudo Element::firstLetterTextRenderer(parent))) 730 if (pseudoId == FIRST_LETTER && (parent.isSVGElement() || !FirstLetterPseudo Element::firstLetterTextRenderer(parent)))
731 return nullptr; 731 return nullptr;
732 732
733 if (!parentRenderer->canHaveGeneratedChildren()) 733 if (!parentRenderer->canHaveGeneratedChildren())
734 return nullptr; 734 return nullptr;
735 735
736 LayoutStyle* parentStyle = parentRenderer->mutableStyle(); 736 LayoutStyle* parentStyle = parentRenderer->style();
737 if (const LayoutStyle* cachedStyle = parentStyle->getCachedPseudoStyle(pseud oId)) { 737 if (LayoutStyle* cachedStyle = parentStyle->getCachedPseudoStyle(pseudoId)) {
738 if (!pseudoElementRendererIsNeeded(cachedStyle)) 738 if (!pseudoElementRendererIsNeeded(cachedStyle))
739 return nullptr; 739 return nullptr;
740 return createPseudoElement(&parent, pseudoId); 740 return createPseudoElement(&parent, pseudoId);
741 } 741 }
742 742
743 StyleResolverState state(document(), &parent, parentStyle); 743 StyleResolverState state(document(), &parent, parentStyle);
744 if (!pseudoStyleForElementInternal(parent, pseudoId, parentStyle, state)) 744 if (!pseudoStyleForElementInternal(parent, pseudoId, parentStyle, state))
745 return nullptr; 745 return nullptr;
746 RefPtr<LayoutStyle> style = state.takeStyle(); 746 RefPtr<LayoutStyle> style = state.takeStyle();
747 ASSERT(style); 747 ASSERT(style);
748 parentStyle->addCachedPseudoStyle(style); 748 parentStyle->addCachedPseudoStyle(style);
749 749
750 if (!pseudoElementRendererIsNeeded(style.get())) 750 if (!pseudoElementRendererIsNeeded(style.get()))
751 return nullptr; 751 return nullptr;
752 752
753 RefPtrWillBeRawPtr<PseudoElement> pseudo = createPseudoElement(&parent, pseu doId); 753 RefPtrWillBeRawPtr<PseudoElement> pseudo = createPseudoElement(&parent, pseu doId);
754 754
755 setAnimationUpdateIfNeeded(state, *pseudo); 755 setAnimationUpdateIfNeeded(state, *pseudo);
756 if (ActiveAnimations* activeAnimations = pseudo->activeAnimations()) 756 if (ActiveAnimations* activeAnimations = pseudo->activeAnimations())
757 activeAnimations->cssAnimations().maybeApplyPendingUpdate(pseudo.get()); 757 activeAnimations->cssAnimations().maybeApplyPendingUpdate(pseudo.get());
758 return pseudo.release(); 758 return pseudo.release();
759 } 759 }
760 760
761 bool StyleResolver::pseudoStyleForElementInternal(Element& element, const Pseudo StyleRequest& pseudoStyleRequest, const LayoutStyle* parentStyle, StyleResolverS tate& state) 761 bool StyleResolver::pseudoStyleForElementInternal(Element& element, const Pseudo StyleRequest& pseudoStyleRequest, LayoutStyle* parentStyle, StyleResolverState& state)
762 { 762 {
763 ASSERT(document().frame()); 763 ASSERT(document().frame());
764 ASSERT(document().settings()); 764 ASSERT(document().settings());
765 ASSERT(pseudoStyleRequest.pseudoId != FIRST_LINE_INHERITED); 765 ASSERT(pseudoStyleRequest.pseudoId != FIRST_LINE_INHERITED);
766 ASSERT(state.parentStyle()); 766 ASSERT(state.parentStyle());
767 767
768 StyleResolverParentScope::ensureParentStackIsPushed(); 768 StyleResolverParentScope::ensureParentStackIsPushed();
769 769
770 Element* pseudoElement = element.pseudoElement(pseudoStyleRequest.pseudoId); 770 Element* pseudoElement = element.pseudoElement(pseudoStyleRequest.pseudoId);
771 771
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 adjustLayoutStyle(state, 0); 820 adjustLayoutStyle(state, 0);
821 821
822 didAccess(); 822 didAccess();
823 823
824 if (state.style()->hasViewportUnits()) 824 if (state.style()->hasViewportUnits())
825 document().setHasViewportUnits(); 825 document().setHasViewportUnits();
826 826
827 return true; 827 return true;
828 } 828 }
829 829
830 PassRefPtr<LayoutStyle> StyleResolver::pseudoStyleForElement(Element* element, c onst PseudoStyleRequest& pseudoStyleRequest, const LayoutStyle* parentStyle) 830 PassRefPtr<LayoutStyle> StyleResolver::pseudoStyleForElement(Element* element, c onst PseudoStyleRequest& pseudoStyleRequest, LayoutStyle* parentStyle)
831 { 831 {
832 ASSERT(parentStyle); 832 ASSERT(parentStyle);
833 if (!element) 833 if (!element)
834 return nullptr; 834 return nullptr;
835 835
836 StyleResolverState state(document(), element, parentStyle); 836 StyleResolverState state(document(), element, parentStyle);
837 if (!pseudoStyleForElementInternal(*element, pseudoStyleRequest, parentStyle , state)) { 837 if (!pseudoStyleForElementInternal(*element, pseudoStyleRequest, parentStyle , state)) {
838 if (pseudoStyleRequest.type == PseudoStyleRequest::ForRenderer) 838 if (pseudoStyleRequest.type == PseudoStyleRequest::ForRenderer)
839 return nullptr; 839 return nullptr;
840 return state.takeStyle(); 840 return state.takeStyle();
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 return style.release(); 909 return style.release();
910 } 910 }
911 911
912 PassRefPtr<LayoutStyle> StyleResolver::styleForText(Text* textNode) 912 PassRefPtr<LayoutStyle> StyleResolver::styleForText(Text* textNode)
913 { 913 {
914 ASSERT(textNode); 914 ASSERT(textNode);
915 915
916 Node* parentNode = NodeRenderingTraversal::parent(*textNode); 916 Node* parentNode = NodeRenderingTraversal::parent(*textNode);
917 if (!parentNode || !parentNode->layoutStyle()) 917 if (!parentNode || !parentNode->layoutStyle())
918 return defaultStyleForElement(); 918 return defaultStyleForElement();
919 return parentNode->mutableLayoutStyle(); 919 return parentNode->layoutStyle();
920 } 920 }
921 921
922 void StyleResolver::updateFont(StyleResolverState& state) 922 void StyleResolver::updateFont(StyleResolverState& state)
923 { 923 {
924 state.fontBuilder().createFont(document().styleEngine()->fontSelector(), sta te.mutableStyleRef()); 924 state.fontBuilder().createFont(document().styleEngine()->fontSelector(), sta te.mutableStyleRef());
925 state.setConversionFontSizes(CSSToLengthConversionData::FontSizes(state.styl e(), state.rootElementStyle())); 925 state.setConversionFontSizes(CSSToLengthConversionData::FontSizes(state.styl e(), state.rootElementStyle()));
926 state.setConversionZoom(state.style()->effectiveZoom()); 926 state.setConversionZoom(state.style()->effectiveZoom());
927 } 927 }
928 928
929 PassRefPtrWillBeRawPtr<StyleRuleList> StyleResolver::styleRulesForElement(Elemen t* element, unsigned rulesToInclude) 929 PassRefPtrWillBeRawPtr<StyleRuleList> StyleResolver::styleRulesForElement(Elemen t* element, unsigned rulesToInclude)
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after
1513 visitor->trace(m_uncommonAttributeRuleSet); 1513 visitor->trace(m_uncommonAttributeRuleSet);
1514 visitor->trace(m_watchedSelectorsRules); 1514 visitor->trace(m_watchedSelectorsRules);
1515 visitor->trace(m_treeBoundaryCrossingRules); 1515 visitor->trace(m_treeBoundaryCrossingRules);
1516 visitor->trace(m_styleSharingLists); 1516 visitor->trace(m_styleSharingLists);
1517 visitor->trace(m_pendingStyleSheets); 1517 visitor->trace(m_pendingStyleSheets);
1518 visitor->trace(m_document); 1518 visitor->trace(m_document);
1519 #endif 1519 #endif
1520 } 1520 }
1521 1521
1522 } // namespace blink 1522 } // namespace blink
OLDNEW
« no previous file with comments | « trunk/Source/core/css/resolver/StyleResolver.h ('k') | trunk/Source/core/css/resolver/StyleResolverState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698