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

Side by Side Diff: Source/core/dom/Element.cpp

Issue 547823002: Track reasons for |Node::SetNeedsStyleRecalc| (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 3 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Peter Kelly (pmk@post.com) 4 * (C) 2001 Peter Kelly (pmk@post.com)
5 * (C) 2001 Dirk Mueller (mueller@kde.org) 5 * (C) 2001 Dirk Mueller (mueller@kde.org)
6 * (C) 2007 David Smith (catfish.man@gmail.com) 6 * (C) 2007 David Smith (catfish.man@gmail.com)
7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved. 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved.
8 * (C) 2007 Eric Seidel (eric@webkit.org) 8 * (C) 2007 Eric Seidel (eric@webkit.org)
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 940 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 951
952 document().incDOMTreeVersion(); 952 document().incDOMTreeVersion();
953 953
954 StyleResolver* styleResolver = document().styleResolver(); 954 StyleResolver* styleResolver = document().styleResolver();
955 bool testShouldInvalidateStyle = inActiveDocument() && styleResolver && styl eChangeType() < SubtreeStyleChange; 955 bool testShouldInvalidateStyle = inActiveDocument() && styleResolver && styl eChangeType() < SubtreeStyleChange;
956 956
957 if (isStyledElement() && name == styleAttr) { 957 if (isStyledElement() && name == styleAttr) {
958 styleAttributeChanged(newValue, reason); 958 styleAttributeChanged(newValue, reason);
959 } else if (isStyledElement() && isPresentationAttribute(name)) { 959 } else if (isStyledElement() && isPresentationAttribute(name)) {
960 elementData()->m_presentationAttributeStyleIsDirty = true; 960 elementData()->m_presentationAttributeStyleIsDirty = true;
961 setNeedsStyleRecalc(LocalStyleChange); 961 setNeedsStyleRecalc(StyleRecalcDueToAttribute, LocalStyleChange);
962 } 962 }
963 963
964 if (isIdAttributeName(name)) { 964 if (isIdAttributeName(name)) {
965 AtomicString oldId = elementData()->idForStyleResolution(); 965 AtomicString oldId = elementData()->idForStyleResolution();
966 AtomicString newId = makeIdForStyleResolution(newValue, document().inQui rksMode()); 966 AtomicString newId = makeIdForStyleResolution(newValue, document().inQui rksMode());
967 if (newId != oldId) { 967 if (newId != oldId) {
968 elementData()->setIdForStyleResolution(newId); 968 elementData()->setIdForStyleResolution(newId);
969 if (testShouldInvalidateStyle) 969 if (testShouldInvalidateStyle)
970 styleResolver->ensureUpdatedRuleFeatureSet().scheduleStyleInvali dationForIdChange(oldId, newId, *this); 970 styleResolver->ensureUpdatedRuleFeatureSet().scheduleStyleInvali dationForIdChange(oldId, newId, *this);
971 } 971 }
972 } else if (name == classAttr) { 972 } else if (name == classAttr) {
973 classAttributeChanged(newValue); 973 classAttributeChanged(newValue);
974 } else if (name == HTMLNames::nameAttr) { 974 } else if (name == HTMLNames::nameAttr) {
975 setHasName(!newValue.isNull()); 975 setHasName(!newValue.isNull());
976 } 976 }
977 977
978 invalidateNodeListCachesInAncestors(&name, this); 978 invalidateNodeListCachesInAncestors(&name, this);
979 979
980 // If there is currently no StyleResolver, we can't be sure that this attrib ute change won't affect style. 980 // If there is currently no StyleResolver, we can't be sure that this attrib ute change won't affect style.
981 if (!styleResolver) 981 if (!styleResolver)
982 setNeedsStyleRecalc(SubtreeStyleChange); 982 setNeedsStyleRecalc(StyleRecalcDueToAttribute, SubtreeStyleChange);
983 983
984 if (AXObjectCache* cache = document().existingAXObjectCache()) 984 if (AXObjectCache* cache = document().existingAXObjectCache())
985 cache->handleAttributeChanged(name, this); 985 cache->handleAttributeChanged(name, this);
986 } 986 }
987 987
988 bool Element::hasLegalLinkAttribute(const QualifiedName&) const 988 bool Element::hasLegalLinkAttribute(const QualifiedName&) const
989 { 989 {
990 return false; 990 return false;
991 } 991 }
992 992
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after
1631 return hasRareData() ? elementRareData()->shadow() : 0; 1631 return hasRareData() ? elementRareData()->shadow() : 0;
1632 } 1632 }
1633 1633
1634 ElementShadow& Element::ensureShadow() 1634 ElementShadow& Element::ensureShadow()
1635 { 1635 {
1636 return ensureElementRareData().ensureShadow(); 1636 return ensureElementRareData().ensureShadow();
1637 } 1637 }
1638 1638
1639 void Element::didAffectSelector(AffectedSelectorMask mask) 1639 void Element::didAffectSelector(AffectedSelectorMask mask)
1640 { 1640 {
1641 setNeedsStyleRecalc(SubtreeStyleChange); 1641 setNeedsStyleRecalc(StyleRecalcDueToSelector, SubtreeStyleChange);
1642 if (ElementShadow* elementShadow = shadowWhereNodeCanBeDistributed(*this)) 1642 if (ElementShadow* elementShadow = shadowWhereNodeCanBeDistributed(*this))
1643 elementShadow->didAffectSelector(mask); 1643 elementShadow->didAffectSelector(mask);
1644 } 1644 }
1645 1645
1646 void Element::setAnimationStyleChange(bool animationStyleChange) 1646 void Element::setAnimationStyleChange(bool animationStyleChange)
1647 { 1647 {
1648 if (animationStyleChange && document().inStyleRecalc()) 1648 if (animationStyleChange && document().inStyleRecalc())
1649 return; 1649 return;
1650 if (ActiveAnimations* activeAnimations = elementRareData()->activeAnimations ()) 1650 if (ActiveAnimations* activeAnimations = elementRareData()->activeAnimations ())
1651 activeAnimations->setAnimationStyleChange(animationStyleChange); 1651 activeAnimations->setAnimationStyleChange(animationStyleChange);
1652 } 1652 }
1653 1653
1654 void Element::setNeedsAnimationStyleRecalc() 1654 void Element::setNeedsAnimationStyleRecalc()
1655 { 1655 {
1656 if (styleChangeType() != NoStyleChange) 1656 if (styleChangeType() != NoStyleChange)
1657 return; 1657 return;
1658 1658
1659 setNeedsStyleRecalc(LocalStyleChange); 1659 setNeedsStyleRecalc(StyleRecalcDueToAnimation, LocalStyleChange);
1660 setAnimationStyleChange(true); 1660 setAnimationStyleChange(true);
1661 } 1661 }
1662 1662
1663 void Element::setNeedsCompositingUpdate() 1663 void Element::setNeedsCompositingUpdate()
1664 { 1664 {
1665 if (!document().isActive()) 1665 if (!document().isActive())
1666 return; 1666 return;
1667 RenderBoxModelObject* renderer = renderBoxModelObject(); 1667 RenderBoxModelObject* renderer = renderBoxModelObject();
1668 if (!renderer) 1668 if (!renderer)
1669 return; 1669 return;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1751 } 1751 }
1752 1752
1753 void Element::checkForEmptyStyleChange() 1753 void Element::checkForEmptyStyleChange()
1754 { 1754 {
1755 RenderStyle* style = renderStyle(); 1755 RenderStyle* style = renderStyle();
1756 1756
1757 if (!style && !styleAffectedByEmpty()) 1757 if (!style && !styleAffectedByEmpty())
1758 return; 1758 return;
1759 1759
1760 if (!style || (styleAffectedByEmpty() && (!style->emptyState() || hasChildre n()))) 1760 if (!style || (styleAffectedByEmpty() && (!style->emptyState() || hasChildre n())))
1761 setNeedsStyleRecalc(SubtreeStyleChange); 1761 setNeedsStyleRecalc(StyleRecalcDueToEmptyPseudoClass, SubtreeStyleChange );
1762 } 1762 }
1763 1763
1764 void Element::childrenChanged(const ChildrenChange& change) 1764 void Element::childrenChanged(const ChildrenChange& change)
1765 { 1765 {
1766 ContainerNode::childrenChanged(change); 1766 ContainerNode::childrenChanged(change);
1767 1767
1768 checkForEmptyStyleChange(); 1768 checkForEmptyStyleChange();
1769 if (!change.byParser && change.isChildElementChange()) 1769 if (!change.byParser && change.isChildElementChange())
1770 checkForSiblingStyleChanges(change.type == ElementRemoved ? SiblingEleme ntRemoved : SiblingElementInserted, change.siblingBeforeChange, change.siblingAf terChange); 1770 checkForSiblingStyleChanges(change.type == ElementRemoved ? SiblingEleme ntRemoved : SiblingElementInserted, change.siblingBeforeChange, change.siblingAf terChange);
1771 1771
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after
2669 } 2669 }
2670 2670
2671 void Element::setFloatingPointAttribute(const QualifiedName& attributeName, doub le value) 2671 void Element::setFloatingPointAttribute(const QualifiedName& attributeName, doub le value)
2672 { 2672 {
2673 setAttribute(attributeName, AtomicString::number(value)); 2673 setAttribute(attributeName, AtomicString::number(value));
2674 } 2674 }
2675 2675
2676 void Element::setContainsFullScreenElement(bool flag) 2676 void Element::setContainsFullScreenElement(bool flag)
2677 { 2677 {
2678 setElementFlag(ContainsFullScreenElement, flag); 2678 setElementFlag(ContainsFullScreenElement, flag);
2679 setNeedsStyleRecalc(SubtreeStyleChange); 2679 setNeedsStyleRecalc(StyleRecalcDueToFullScreen, SubtreeStyleChange);
2680 } 2680 }
2681 2681
2682 static Element* parentCrossingFrameBoundaries(Element* element) 2682 static Element* parentCrossingFrameBoundaries(Element* element)
2683 { 2683 {
2684 ASSERT(element); 2684 ASSERT(element);
2685 return element->parentElement() ? element->parentElement() : element->docume nt().ownerElement(); 2685 return element->parentElement() ? element->parentElement() : element->docume nt().ownerElement();
2686 } 2686 }
2687 2687
2688 void Element::setContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(boo l flag) 2688 void Element::setContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(boo l flag)
2689 { 2689 {
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
3134 startLineNumber = document().scriptableDocumentParser()->lineNumber(); 3134 startLineNumber = document().scriptableDocumentParser()->lineNumber();
3135 3135
3136 if (newStyleString.isNull()) { 3136 if (newStyleString.isNull()) {
3137 ensureUniqueElementData().m_inlineStyle.clear(); 3137 ensureUniqueElementData().m_inlineStyle.clear();
3138 } else if (modificationReason == ModifiedByCloning || document().contentSecu rityPolicy()->allowInlineStyle(document().url(), startLineNumber)) { 3138 } else if (modificationReason == ModifiedByCloning || document().contentSecu rityPolicy()->allowInlineStyle(document().url(), startLineNumber)) {
3139 setInlineStyleFromString(newStyleString); 3139 setInlineStyleFromString(newStyleString);
3140 } 3140 }
3141 3141
3142 elementData()->m_styleAttributeIsDirty = false; 3142 elementData()->m_styleAttributeIsDirty = false;
3143 3143
3144 setNeedsStyleRecalc(LocalStyleChange); 3144 setNeedsStyleRecalc(StyleRecalcDueToStyleSheetChange, LocalStyleChange);
3145 InspectorInstrumentation::didInvalidateStyleAttr(this); 3145 InspectorInstrumentation::didInvalidateStyleAttr(this);
3146 } 3146 }
3147 3147
3148 void Element::inlineStyleChanged() 3148 void Element::inlineStyleChanged()
3149 { 3149 {
3150 ASSERT(isStyledElement()); 3150 ASSERT(isStyledElement());
3151 setNeedsStyleRecalc(LocalStyleChange); 3151 setNeedsStyleRecalc(StyleRecalcDueToInline, LocalStyleChange);
3152 ASSERT(elementData()); 3152 ASSERT(elementData());
3153 elementData()->m_styleAttributeIsDirty = true; 3153 elementData()->m_styleAttributeIsDirty = true;
3154 InspectorInstrumentation::didInvalidateStyleAttr(this); 3154 InspectorInstrumentation::didInvalidateStyleAttr(this);
3155 } 3155 }
3156 3156
3157 bool Element::setInlineStyleProperty(CSSPropertyID propertyID, CSSValueID identi fier, bool important) 3157 bool Element::setInlineStyleProperty(CSSPropertyID propertyID, CSSValueID identi fier, bool important)
3158 { 3158 {
3159 ASSERT(isStyledElement()); 3159 ASSERT(isStyledElement());
3160 ensureMutableInlineStyle().setProperty(propertyID, cssValuePool().createIden tifierValue(identifier), important); 3160 ensureMutableInlineStyle().setProperty(propertyID, cssValuePool().createIden tifierValue(identifier), important);
3161 inlineStyleChanged(); 3161 inlineStyleChanged();
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
3299 return v8::Handle<v8::Object>(); 3299 return v8::Handle<v8::Object>();
3300 3300
3301 wrapper->SetPrototype(binding->prototype()); 3301 wrapper->SetPrototype(binding->prototype());
3302 3302
3303 wrapperType->refObject(toScriptWrappableBase()); 3303 wrapperType->refObject(toScriptWrappableBase());
3304 V8DOMWrapper::associateObjectWithWrapperNonTemplate(this, wrapperType, wrapp er, isolate); 3304 V8DOMWrapper::associateObjectWithWrapperNonTemplate(this, wrapperType, wrapp er, isolate);
3305 return wrapper; 3305 return wrapper;
3306 } 3306 }
3307 3307
3308 } // namespace blink 3308 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698