| OLD | NEW |
| 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 1183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1194 { | 1194 { |
| 1195 if (ElementShadow* parentElementShadow = shadowWhereNodeCanBeDistributed(*th
is)) { | 1195 if (ElementShadow* parentElementShadow = shadowWhereNodeCanBeDistributed(*th
is)) { |
| 1196 if (shouldInvalidateDistributionWhenAttributeChanged(parentElementShadow
, name, newValue)) | 1196 if (shouldInvalidateDistributionWhenAttributeChanged(parentElementShadow
, name, newValue)) |
| 1197 parentElementShadow->setNeedsDistributionRecalc(); | 1197 parentElementShadow->setNeedsDistributionRecalc(); |
| 1198 } | 1198 } |
| 1199 | 1199 |
| 1200 parseAttribute(name, oldValue, newValue); | 1200 parseAttribute(name, oldValue, newValue); |
| 1201 | 1201 |
| 1202 document().incDOMTreeVersion(); | 1202 document().incDOMTreeVersion(); |
| 1203 | 1203 |
| 1204 StyleResolver* styleResolver = document().styleResolver(); | |
| 1205 | |
| 1206 if (name == HTMLNames::idAttr) { | 1204 if (name == HTMLNames::idAttr) { |
| 1207 AtomicString oldId = elementData()->idForStyleResolution(); | 1205 AtomicString oldId = elementData()->idForStyleResolution(); |
| 1208 AtomicString newId = makeIdForStyleResolution(newValue, document().inQui
rksMode()); | 1206 AtomicString newId = makeIdForStyleResolution(newValue, document().inQui
rksMode()); |
| 1209 if (newId != oldId) { | 1207 if (newId != oldId) { |
| 1210 elementData()->setIdForStyleResolution(newId); | 1208 elementData()->setIdForStyleResolution(newId); |
| 1211 if (inActiveDocument() && styleResolver) | 1209 document().styleEngine().idChangedForElement(oldId, newId, *this); |
| 1212 document().styleEngine().idChangedForElement(oldId, newId, *this
); | |
| 1213 } | 1210 } |
| 1214 } else if (name == classAttr) { | 1211 } else if (name == classAttr) { |
| 1215 classAttributeChanged(newValue); | 1212 classAttributeChanged(newValue); |
| 1216 } else if (name == HTMLNames::nameAttr) { | 1213 } else if (name == HTMLNames::nameAttr) { |
| 1217 setHasName(!newValue.isNull()); | 1214 setHasName(!newValue.isNull()); |
| 1218 } else if (isStyledElement()) { | 1215 } else if (isStyledElement()) { |
| 1219 if (name == styleAttr) { | 1216 if (name == styleAttr) { |
| 1220 styleAttributeChanged(newValue, reason); | 1217 styleAttributeChanged(newValue, reason); |
| 1221 } else if (isPresentationAttribute(name)) { | 1218 } else if (isPresentationAttribute(name)) { |
| 1222 elementData()->m_presentationAttributeStyleIsDirty = true; | 1219 elementData()->m_presentationAttributeStyleIsDirty = true; |
| 1223 setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForTracing::f
romAttribute(name)); | 1220 setNeedsStyleRecalc(LocalStyleChange, StyleChangeReasonForTracing::f
romAttribute(name)); |
| 1224 } | 1221 } |
| 1225 } | 1222 } |
| 1226 | 1223 |
| 1227 invalidateNodeListCachesInAncestors(&name, this); | 1224 invalidateNodeListCachesInAncestors(&name, this); |
| 1228 | 1225 |
| 1229 // If there is currently no StyleResolver, we can't be sure that this attrib
ute change won't affect style. | |
| 1230 if (!styleResolver) | |
| 1231 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::fro
mAttribute(name)); | |
| 1232 | |
| 1233 if (inDocument()) { | 1226 if (inDocument()) { |
| 1234 if (AXObjectCache* cache = document().existingAXObjectCache()) | 1227 if (AXObjectCache* cache = document().existingAXObjectCache()) |
| 1235 cache->handleAttributeChanged(name, this); | 1228 cache->handleAttributeChanged(name, this); |
| 1236 } | 1229 } |
| 1237 } | 1230 } |
| 1238 | 1231 |
| 1239 bool Element::hasLegalLinkAttribute(const QualifiedName&) const | 1232 bool Element::hasLegalLinkAttribute(const QualifiedName&) const |
| 1240 { | 1233 { |
| 1241 return false; | 1234 return false; |
| 1242 } | 1235 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1280 if (!length) | 1273 if (!length) |
| 1281 return ClassStringContent::Empty; | 1274 return ClassStringContent::Empty; |
| 1282 | 1275 |
| 1283 if (newClassString.is8Bit()) | 1276 if (newClassString.is8Bit()) |
| 1284 return classStringHasClassName(newClassString.characters8(), length); | 1277 return classStringHasClassName(newClassString.characters8(), length); |
| 1285 return classStringHasClassName(newClassString.characters16(), length); | 1278 return classStringHasClassName(newClassString.characters16(), length); |
| 1286 } | 1279 } |
| 1287 | 1280 |
| 1288 void Element::classAttributeChanged(const AtomicString& newClassString) | 1281 void Element::classAttributeChanged(const AtomicString& newClassString) |
| 1289 { | 1282 { |
| 1290 StyleResolver* styleResolver = document().styleResolver(); | |
| 1291 bool testShouldInvalidateStyle = inActiveDocument() && styleResolver; | |
| 1292 | |
| 1293 ASSERT(elementData()); | 1283 ASSERT(elementData()); |
| 1294 ClassStringContent classStringContentType = classStringHasClassName(newClass
String); | 1284 ClassStringContent classStringContentType = classStringHasClassName(newClass
String); |
| 1295 const bool shouldFoldCase = document().inQuirksMode(); | 1285 const bool shouldFoldCase = document().inQuirksMode(); |
| 1296 if (classStringContentType == ClassStringContent::HasClasses) { | 1286 if (classStringContentType == ClassStringContent::HasClasses) { |
| 1297 const SpaceSplitString oldClasses = elementData()->classNames(); | 1287 const SpaceSplitString oldClasses = elementData()->classNames(); |
| 1298 elementData()->setClass(newClassString, shouldFoldCase); | 1288 elementData()->setClass(newClassString, shouldFoldCase); |
| 1299 const SpaceSplitString& newClasses = elementData()->classNames(); | 1289 const SpaceSplitString& newClasses = elementData()->classNames(); |
| 1300 if (testShouldInvalidateStyle) | 1290 document().styleEngine().classChangedForElement(oldClasses, newClasses,
*this); |
| 1301 document().styleEngine().classChangedForElement(oldClasses, newClass
es, *this); | |
| 1302 } else { | 1291 } else { |
| 1303 const SpaceSplitString& oldClasses = elementData()->classNames(); | 1292 const SpaceSplitString& oldClasses = elementData()->classNames(); |
| 1304 if (testShouldInvalidateStyle) | 1293 document().styleEngine().classChangedForElement(oldClasses, *this); |
| 1305 document().styleEngine().classChangedForElement(oldClasses, *this); | |
| 1306 if (classStringContentType == ClassStringContent::WhiteSpaceOnly) | 1294 if (classStringContentType == ClassStringContent::WhiteSpaceOnly) |
| 1307 elementData()->setClass(newClassString, shouldFoldCase); | 1295 elementData()->setClass(newClassString, shouldFoldCase); |
| 1308 else | 1296 else |
| 1309 elementData()->clearClass(); | 1297 elementData()->clearClass(); |
| 1310 } | 1298 } |
| 1311 | 1299 |
| 1312 if (hasRareData()) | 1300 if (hasRareData()) |
| 1313 elementRareData()->clearClassListValueForQuirksMode(); | 1301 elementRareData()->clearClassListValueForQuirksMode(); |
| 1314 } | 1302 } |
| 1315 | 1303 |
| (...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1869 } | 1857 } |
| 1870 | 1858 |
| 1871 void Element::pseudoStateChanged(CSSSelector::PseudoType pseudo) | 1859 void Element::pseudoStateChanged(CSSSelector::PseudoType pseudo) |
| 1872 { | 1860 { |
| 1873 // We can't schedule invaliation sets from inside style recalc otherwise | 1861 // We can't schedule invaliation sets from inside style recalc otherwise |
| 1874 // we'd never process them. | 1862 // we'd never process them. |
| 1875 // TODO(esprehn): Make this an ASSERT and fix places that call into this | 1863 // TODO(esprehn): Make this an ASSERT and fix places that call into this |
| 1876 // like HTMLSelectElement. | 1864 // like HTMLSelectElement. |
| 1877 if (document().inStyleRecalc()) | 1865 if (document().inStyleRecalc()) |
| 1878 return; | 1866 return; |
| 1879 StyleResolver* styleResolver = document().styleResolver(); | 1867 document().styleEngine().pseudoStateChangedForElement(pseudo, *this); |
| 1880 if (inActiveDocument() && styleResolver) | |
| 1881 document().styleEngine().pseudoStateChangedForElement(pseudo, *this); | |
| 1882 } | 1868 } |
| 1883 | 1869 |
| 1884 void Element::setAnimationStyleChange(bool animationStyleChange) | 1870 void Element::setAnimationStyleChange(bool animationStyleChange) |
| 1885 { | 1871 { |
| 1886 if (animationStyleChange && document().inStyleRecalc()) | 1872 if (animationStyleChange && document().inStyleRecalc()) |
| 1887 return; | 1873 return; |
| 1888 if (!hasRareData()) | 1874 if (!hasRareData()) |
| 1889 return; | 1875 return; |
| 1890 if (ElementAnimations* elementAnimations = elementRareData()->elementAnimati
ons()) | 1876 if (ElementAnimations* elementAnimations = elementRareData()->elementAnimati
ons()) |
| 1891 elementAnimations->setAnimationStyleChange(animationStyleChange); | 1877 elementAnimations->setAnimationStyleChange(animationStyleChange); |
| (...skipping 1232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3124 updateExtraNamedItemRegistration(oldId, newId); | 3110 updateExtraNamedItemRegistration(oldId, newId); |
| 3125 } | 3111 } |
| 3126 | 3112 |
| 3127 void Element::willModifyAttribute(const QualifiedName& name, const AtomicString&
oldValue, const AtomicString& newValue) | 3113 void Element::willModifyAttribute(const QualifiedName& name, const AtomicString&
oldValue, const AtomicString& newValue) |
| 3128 { | 3114 { |
| 3129 if (name == HTMLNames::nameAttr) { | 3115 if (name == HTMLNames::nameAttr) { |
| 3130 updateName(oldValue, newValue); | 3116 updateName(oldValue, newValue); |
| 3131 } | 3117 } |
| 3132 | 3118 |
| 3133 if (oldValue != newValue) { | 3119 if (oldValue != newValue) { |
| 3134 if (inActiveDocument() && document().styleResolver()) | 3120 document().styleEngine().attributeChangedForElement(name, *this); |
| 3135 document().styleEngine().attributeChangedForElement(name, *this); | |
| 3136 | |
| 3137 if (isUpgradedCustomElement()) | 3121 if (isUpgradedCustomElement()) |
| 3138 CustomElement::attributeDidChange(this, name.localName(), oldValue,
newValue); | 3122 CustomElement::attributeDidChange(this, name.localName(), oldValue,
newValue); |
| 3139 } | 3123 } |
| 3140 | 3124 |
| 3141 if (OwnPtrWillBeRawPtr<MutationObserverInterestGroup> recipients = MutationO
bserverInterestGroup::createForAttributesMutation(*this, name)) | 3125 if (OwnPtrWillBeRawPtr<MutationObserverInterestGroup> recipients = MutationO
bserverInterestGroup::createForAttributesMutation(*this, name)) |
| 3142 recipients->enqueueMutationRecord(MutationRecord::createAttributes(this,
name, oldValue)); | 3126 recipients->enqueueMutationRecord(MutationRecord::createAttributes(this,
name, oldValue)); |
| 3143 | 3127 |
| 3144 InspectorInstrumentation::willModifyDOMAttr(this, oldValue, newValue); | 3128 InspectorInstrumentation::willModifyDOMAttr(this, oldValue, newValue); |
| 3145 } | 3129 } |
| 3146 | 3130 |
| (...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3644 { | 3628 { |
| 3645 #if ENABLE(OILPAN) | 3629 #if ENABLE(OILPAN) |
| 3646 if (hasRareData()) | 3630 if (hasRareData()) |
| 3647 visitor->trace(elementRareData()); | 3631 visitor->trace(elementRareData()); |
| 3648 visitor->trace(m_elementData); | 3632 visitor->trace(m_elementData); |
| 3649 #endif | 3633 #endif |
| 3650 ContainerNode::trace(visitor); | 3634 ContainerNode::trace(visitor); |
| 3651 } | 3635 } |
| 3652 | 3636 |
| 3653 } // namespace blink | 3637 } // namespace blink |
| OLD | NEW |