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

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

Issue 14234005: CSP blocks style application in cloned nodes (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: CSP blocks style application in cloned nodes Created 7 years, 8 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
« no previous file with comments | « Source/WebCore/dom/Element.h ('k') | Source/WebCore/dom/StyledElement.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 813 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 static bool checkNeedsStyleInvalidationForIdChange(const AtomicString& oldId, co nst AtomicString& newId, StyleResolver* styleResolver) 824 static bool checkNeedsStyleInvalidationForIdChange(const AtomicString& oldId, co nst AtomicString& newId, StyleResolver* styleResolver)
825 { 825 {
826 ASSERT(newId != oldId); 826 ASSERT(newId != oldId);
827 if (!oldId.isEmpty() && styleResolver->hasSelectorForId(oldId)) 827 if (!oldId.isEmpty() && styleResolver->hasSelectorForId(oldId))
828 return true; 828 return true;
829 if (!newId.isEmpty() && styleResolver->hasSelectorForId(newId)) 829 if (!newId.isEmpty() && styleResolver->hasSelectorForId(newId))
830 return true; 830 return true;
831 return false; 831 return false;
832 } 832 }
833 833
834 void Element::attributeChanged(const QualifiedName& name, const AtomicString& ne wValue) 834 void Element::attributeChanged(const QualifiedName& name, const AtomicString& ne wValue, AttributeModificationReason)
835 { 835 {
836 if (ElementShadow* parentElementShadow = shadowOfParentForDistribution(this) ) { 836 if (ElementShadow* parentElementShadow = shadowOfParentForDistribution(this) ) {
837 if (shouldInvalidateDistributionWhenAttributeChanged(parentElementShadow , name, newValue)) 837 if (shouldInvalidateDistributionWhenAttributeChanged(parentElementShadow , name, newValue))
838 parentElementShadow->invalidateDistribution(); 838 parentElementShadow->invalidateDistribution();
839 } 839 }
840 840
841 parseAttribute(name, newValue); 841 parseAttribute(name, newValue);
842 842
843 document()->incDOMTreeVersion(); 843 document()->incDOMTreeVersion();
844 844
(...skipping 22 matching lines...) Expand all
867 // If there is currently no StyleResolver, we can't be sure that this attrib ute change won't affect style. 867 // If there is currently no StyleResolver, we can't be sure that this attrib ute change won't affect style.
868 shouldInvalidateStyle |= !styleResolver; 868 shouldInvalidateStyle |= !styleResolver;
869 869
870 if (shouldInvalidateStyle) 870 if (shouldInvalidateStyle)
871 setNeedsStyleRecalc(); 871 setNeedsStyleRecalc();
872 872
873 if (AXObjectCache* cache = document()->existingAXObjectCache()) 873 if (AXObjectCache* cache = document()->existingAXObjectCache())
874 cache->handleAttributeChanged(name, this); 874 cache->handleAttributeChanged(name, this);
875 } 875 }
876 876
877 inline void Element::attributeChangedFromParserOrByCloning(const QualifiedName& name, const AtomicString& newValue) 877 inline void Element::attributeChangedFromParserOrByCloning(const QualifiedName& name, const AtomicString& newValue, AttributeModificationReason reason)
878 { 878 {
879 #if ENABLE(CUSTOM_ELEMENTS) 879 #if ENABLE(CUSTOM_ELEMENTS)
880 if (name == isAttr) { 880 if (name == isAttr) {
881 if (CustomElementRegistry* registry = document()->registry()) 881 if (CustomElementRegistry* registry = document()->registry())
882 registry->didGiveTypeExtension(this); 882 registry->didGiveTypeExtension(this);
883 } 883 }
884 #endif 884 #endif
885 attributeChanged(name, newValue); 885 attributeChanged(name, newValue, reason);
886 } 886 }
887 887
888 template <typename CharacterType> 888 template <typename CharacterType>
889 static inline bool classStringHasClassName(const CharacterType* characters, unsi gned length) 889 static inline bool classStringHasClassName(const CharacterType* characters, unsi gned length)
890 { 890 {
891 ASSERT(length > 0); 891 ASSERT(length > 0);
892 892
893 unsigned i = 0; 893 unsigned i = 0;
894 do { 894 do {
895 if (isNotHTMLSpace(characters[i])) 895 if (isNotHTMLSpace(characters[i]))
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 if (attributeVector.isEmpty()) 1053 if (attributeVector.isEmpty())
1054 return; 1054 return;
1055 1055
1056 if (document() && document()->sharedObjectPool()) 1056 if (document() && document()->sharedObjectPool())
1057 m_elementData = document()->sharedObjectPool()->cachedShareableElementDa taWithAttributes(attributeVector); 1057 m_elementData = document()->sharedObjectPool()->cachedShareableElementDa taWithAttributes(attributeVector);
1058 else 1058 else
1059 m_elementData = ShareableElementData::createWithAttributes(attributeVect or); 1059 m_elementData = ShareableElementData::createWithAttributes(attributeVect or);
1060 1060
1061 // Use attributeVector instead of m_elementData because attributeChanged mig ht modify m_elementData. 1061 // Use attributeVector instead of m_elementData because attributeChanged mig ht modify m_elementData.
1062 for (unsigned i = 0; i < attributeVector.size(); ++i) 1062 for (unsigned i = 0; i < attributeVector.size(); ++i)
1063 attributeChangedFromParserOrByCloning(attributeVector[i].name(), attribu teVector[i].value()); 1063 attributeChangedFromParserOrByCloning(attributeVector[i].name(), attribu teVector[i].value(), ModifiedDirectly);
1064 } 1064 }
1065 1065
1066 bool Element::hasAttributes() const 1066 bool Element::hasAttributes() const
1067 { 1067 {
1068 synchronizeAllAttributes(); 1068 synchronizeAllAttributes();
1069 return elementData() && elementData()->length(); 1069 return elementData() && elementData()->length();
1070 } 1070 }
1071 1071
1072 bool Element::hasEquivalentAttributes(const Element* other) const 1072 bool Element::hasEquivalentAttributes(const Element* other) const
1073 { 1073 {
(...skipping 1778 matching lines...) Expand 10 before | Expand all | Expand 10 after
2852 && (!other.m_elementData->inlineStyle() || !other.m_elementData->inlineS tyle()->hasCSSOMWrapper())) 2852 && (!other.m_elementData->inlineStyle() || !other.m_elementData->inlineS tyle()->hasCSSOMWrapper()))
2853 const_cast<Element&>(other).m_elementData = static_cast<const UniqueElem entData*>(other.m_elementData.get())->makeShareableCopy(); 2853 const_cast<Element&>(other).m_elementData = static_cast<const UniqueElem entData*>(other.m_elementData.get())->makeShareableCopy();
2854 2854
2855 if (!other.m_elementData->isUnique()) 2855 if (!other.m_elementData->isUnique())
2856 m_elementData = other.m_elementData; 2856 m_elementData = other.m_elementData;
2857 else 2857 else
2858 m_elementData = other.m_elementData->makeUniqueCopy(); 2858 m_elementData = other.m_elementData->makeUniqueCopy();
2859 2859
2860 for (unsigned i = 0; i < m_elementData->length(); ++i) { 2860 for (unsigned i = 0; i < m_elementData->length(); ++i) {
2861 const Attribute* attribute = const_cast<const ElementData*>(m_elementDat a.get())->attributeItem(i); 2861 const Attribute* attribute = const_cast<const ElementData*>(m_elementDat a.get())->attributeItem(i);
2862 attributeChangedFromParserOrByCloning(attribute->name(), attribute->valu e()); 2862 attributeChangedFromParserOrByCloning(attribute->name(), attribute->valu e(), ModifiedByCloning);
2863 } 2863 }
2864 } 2864 }
2865 2865
2866 void Element::cloneDataFromElement(const Element& other) 2866 void Element::cloneDataFromElement(const Element& other)
2867 { 2867 {
2868 cloneAttributesFromElement(other); 2868 cloneAttributesFromElement(other);
2869 copyNonAttributePropertiesFromElement(other); 2869 copyNonAttributePropertiesFromElement(other);
2870 } 2870 }
2871 2871
2872 void Element::createUniqueElementData() 2872 void Element::createUniqueElementData()
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
3112 return 0; 3112 return 0;
3113 } 3113 }
3114 3114
3115 Attribute* UniqueElementData::attributeItem(unsigned index) 3115 Attribute* UniqueElementData::attributeItem(unsigned index)
3116 { 3116 {
3117 ASSERT_WITH_SECURITY_IMPLICATION(index < length()); 3117 ASSERT_WITH_SECURITY_IMPLICATION(index < length());
3118 return &m_attributeVector.at(index); 3118 return &m_attributeVector.at(index);
3119 } 3119 }
3120 3120
3121 } // namespace WebCore 3121 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/WebCore/dom/Element.h ('k') | Source/WebCore/dom/StyledElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698