| 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 958 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 969 if (ElementShadow* parentElementShadow = shadowOfParentForDistribution(this)
) { | 969 if (ElementShadow* parentElementShadow = shadowOfParentForDistribution(this)
) { |
| 970 if (shouldInvalidateDistributionWhenAttributeChanged(parentElementShadow
, name, newValue)) | 970 if (shouldInvalidateDistributionWhenAttributeChanged(parentElementShadow
, name, newValue)) |
| 971 parentElementShadow->setNeedsDistributionRecalc(); | 971 parentElementShadow->setNeedsDistributionRecalc(); |
| 972 } | 972 } |
| 973 | 973 |
| 974 parseAttribute(name, newValue); | 974 parseAttribute(name, newValue); |
| 975 | 975 |
| 976 document().incDOMTreeVersion(); | 976 document().incDOMTreeVersion(); |
| 977 | 977 |
| 978 StyleResolver* styleResolver = document().styleResolverIfExists(); | 978 StyleResolver* styleResolver = document().styleResolverIfExists(); |
| 979 bool testShouldInvalidateStyle = confusingAndOftenMisusedAttached() && style
Resolver && styleChangeType() < SubtreeStyleChange; | 979 bool testShouldInvalidateStyle = inActiveDocument() && styleResolver && styl
eChangeType() < SubtreeStyleChange; |
| 980 bool shouldInvalidateStyle = false; | 980 bool shouldInvalidateStyle = false; |
| 981 | 981 |
| 982 if (isStyledElement() && name == styleAttr) { | 982 if (isStyledElement() && name == styleAttr) { |
| 983 styleAttributeChanged(newValue, reason); | 983 styleAttributeChanged(newValue, reason); |
| 984 } else if (isStyledElement() && isPresentationAttribute(name)) { | 984 } else if (isStyledElement() && isPresentationAttribute(name)) { |
| 985 elementData()->m_presentationAttributeStyleIsDirty = true; | 985 elementData()->m_presentationAttributeStyleIsDirty = true; |
| 986 setNeedsStyleRecalc(LocalStyleChange); | 986 setNeedsStyleRecalc(LocalStyleChange); |
| 987 } | 987 } |
| 988 | 988 |
| 989 if (isIdAttributeName(name)) { | 989 if (isIdAttributeName(name)) { |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1084 continue; | 1084 continue; |
| 1085 if (checker.hasSelectorForClass(oldClasses[i])) | 1085 if (checker.hasSelectorForClass(oldClasses[i])) |
| 1086 return true; | 1086 return true; |
| 1087 } | 1087 } |
| 1088 return false; | 1088 return false; |
| 1089 } | 1089 } |
| 1090 | 1090 |
| 1091 void Element::classAttributeChanged(const AtomicString& newClassString) | 1091 void Element::classAttributeChanged(const AtomicString& newClassString) |
| 1092 { | 1092 { |
| 1093 StyleResolver* styleResolver = document().styleResolverIfExists(); | 1093 StyleResolver* styleResolver = document().styleResolverIfExists(); |
| 1094 bool testShouldInvalidateStyle = confusingAndOftenMisusedAttached() && style
Resolver && styleChangeType() < SubtreeStyleChange; | 1094 bool testShouldInvalidateStyle = inActiveDocument() && styleResolver && styl
eChangeType() < SubtreeStyleChange; |
| 1095 bool shouldInvalidateStyle = false; | 1095 bool shouldInvalidateStyle = false; |
| 1096 | 1096 |
| 1097 if (classStringHasClassName(newClassString)) { | 1097 if (classStringHasClassName(newClassString)) { |
| 1098 const bool shouldFoldCase = document().inQuirksMode(); | 1098 const bool shouldFoldCase = document().inQuirksMode(); |
| 1099 const SpaceSplitString oldClasses = elementData()->classNames(); | 1099 const SpaceSplitString oldClasses = elementData()->classNames(); |
| 1100 elementData()->setClass(newClassString, shouldFoldCase); | 1100 elementData()->setClass(newClassString, shouldFoldCase); |
| 1101 const SpaceSplitString& newClasses = elementData()->classNames(); | 1101 const SpaceSplitString& newClasses = elementData()->classNames(); |
| 1102 shouldInvalidateStyle = testShouldInvalidateStyle && checkSelectorForCla
ssChange(oldClasses, newClasses, styleResolver->ruleFeatureSet()); | 1102 shouldInvalidateStyle = testShouldInvalidateStyle && checkSelectorForCla
ssChange(oldClasses, newClasses, styleResolver->ruleFeatureSet()); |
| 1103 } else { | 1103 } else { |
| 1104 const SpaceSplitString& oldClasses = elementData()->classNames(); | 1104 const SpaceSplitString& oldClasses = elementData()->classNames(); |
| (...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1762 if (!style && !element->styleAffectedByEmpty()) | 1762 if (!style && !element->styleAffectedByEmpty()) |
| 1763 return; | 1763 return; |
| 1764 | 1764 |
| 1765 if (!style || (element->styleAffectedByEmpty() && (!style->emptyState() || e
lement->hasChildNodes()))) | 1765 if (!style || (element->styleAffectedByEmpty() && (!style->emptyState() || e
lement->hasChildNodes()))) |
| 1766 element->setNeedsStyleRecalc(); | 1766 element->setNeedsStyleRecalc(); |
| 1767 } | 1767 } |
| 1768 | 1768 |
| 1769 static void checkForSiblingStyleChanges(Element* e, RenderStyle* style, bool fin
ishedParsingCallback, | 1769 static void checkForSiblingStyleChanges(Element* e, RenderStyle* style, bool fin
ishedParsingCallback, |
| 1770 Node* beforeChange, Node* afterChange, i
nt childCountDelta) | 1770 Node* beforeChange, Node* afterChange, i
nt childCountDelta) |
| 1771 { | 1771 { |
| 1772 if (!e->confusingAndOftenMisusedAttached() || e->document().hasPendingForced
StyleRecalc() || e->styleChangeType() >= SubtreeStyleChange) | 1772 if (!e->inActiveDocument() || e->document().hasPendingForcedStyleRecalc() ||
e->styleChangeType() >= SubtreeStyleChange) |
| 1773 return; | 1773 return; |
| 1774 | 1774 |
| 1775 // :empty selector. | 1775 // :empty selector. |
| 1776 checkForEmptyStyleChange(e, style); | 1776 checkForEmptyStyleChange(e, style); |
| 1777 | 1777 |
| 1778 if (!style || (e->needsStyleRecalc() && e->childrenAffectedByPositionalRules
())) | 1778 if (!style || (e->needsStyleRecalc() && e->childrenAffectedByPositionalRules
())) |
| 1779 return; | 1779 return; |
| 1780 | 1780 |
| 1781 // Forward positional selectors include the ~ selector, nth-child, nth-of-ty
pe, first-of-type and only-of-type. | 1781 // Forward positional selectors include the ~ selector, nth-child, nth-of-ty
pe, first-of-type and only-of-type. |
| 1782 // Backward positional selectors include nth-last-child, nth-last-of-type, l
ast-of-type and only-of-type. | 1782 // Backward positional selectors include nth-last-child, nth-last-of-type, l
ast-of-type and only-of-type. |
| (...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2306 // properties, which are only known by the renderer because it did the layou
t, will be correct and so that the | 2306 // properties, which are only known by the renderer because it did the layou
t, will be correct and so that the |
| 2307 // values returned for the ":selection" pseudo-element will be correct. | 2307 // values returned for the ":selection" pseudo-element will be correct. |
| 2308 if (RenderStyle* usedStyle = renderStyle()) { | 2308 if (RenderStyle* usedStyle = renderStyle()) { |
| 2309 if (pseudoElementSpecifier) { | 2309 if (pseudoElementSpecifier) { |
| 2310 RenderStyle* cachedPseudoStyle = usedStyle->getCachedPseudoStyle(pse
udoElementSpecifier); | 2310 RenderStyle* cachedPseudoStyle = usedStyle->getCachedPseudoStyle(pse
udoElementSpecifier); |
| 2311 return cachedPseudoStyle ? cachedPseudoStyle : usedStyle; | 2311 return cachedPseudoStyle ? cachedPseudoStyle : usedStyle; |
| 2312 } else | 2312 } else |
| 2313 return usedStyle; | 2313 return usedStyle; |
| 2314 } | 2314 } |
| 2315 | 2315 |
| 2316 if (!confusingAndOftenMisusedAttached()) | 2316 if (!inActiveDocument()) |
| 2317 // FIXME: Try to do better than this. Ensure that styleForElement() work
s for elements that are not in the | 2317 // FIXME: Try to do better than this. Ensure that styleForElement() work
s for elements that are not in the |
| 2318 // document tree and figure out when to destroy the computed style for s
uch elements. | 2318 // document tree and figure out when to destroy the computed style for s
uch elements. |
| 2319 return 0; | 2319 return 0; |
| 2320 | 2320 |
| 2321 ElementRareData& rareData = ensureElementRareData(); | 2321 ElementRareData& rareData = ensureElementRareData(); |
| 2322 if (!rareData.computedStyle()) | 2322 if (!rareData.computedStyle()) |
| 2323 rareData.setComputedStyle(document().styleForElementIgnoringPendingStyle
sheets(this)); | 2323 rareData.setComputedStyle(document().styleForElementIgnoringPendingStyle
sheets(this)); |
| 2324 return pseudoElementSpecifier ? rareData.computedStyle()->getCachedPseudoSty
le(pseudoElementSpecifier) : rareData.computedStyle(); | 2324 return pseudoElementSpecifier ? rareData.computedStyle()->getCachedPseudoSty
le(pseudoElementSpecifier) : rareData.computedStyle(); |
| 2325 } | 2325 } |
| 2326 | 2326 |
| (...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2924 updateId(oldValue, newValue); | 2924 updateId(oldValue, newValue); |
| 2925 else if (name == HTMLNames::nameAttr) | 2925 else if (name == HTMLNames::nameAttr) |
| 2926 updateName(oldValue, newValue); | 2926 updateName(oldValue, newValue); |
| 2927 else if (name == HTMLNames::forAttr && hasTagName(labelTag)) { | 2927 else if (name == HTMLNames::forAttr && hasTagName(labelTag)) { |
| 2928 TreeScope& scope = treeScope(); | 2928 TreeScope& scope = treeScope(); |
| 2929 if (scope.shouldCacheLabelsByForAttribute()) | 2929 if (scope.shouldCacheLabelsByForAttribute()) |
| 2930 updateLabel(scope, oldValue, newValue); | 2930 updateLabel(scope, oldValue, newValue); |
| 2931 } | 2931 } |
| 2932 | 2932 |
| 2933 if (oldValue != newValue) { | 2933 if (oldValue != newValue) { |
| 2934 if (confusingAndOftenMisusedAttached() && hasSelectorForAttribute(&docum
ent(), name.localName())) | 2934 if (inActiveDocument() && hasSelectorForAttribute(&document(), name.loca
lName())) |
| 2935 setNeedsStyleRecalc(); | 2935 setNeedsStyleRecalc(); |
| 2936 | 2936 |
| 2937 if (isUpgradedCustomElement()) | 2937 if (isUpgradedCustomElement()) |
| 2938 CustomElement::attributeDidChange(this, name.localName(), oldValue,
newValue); | 2938 CustomElement::attributeDidChange(this, name.localName(), oldValue,
newValue); |
| 2939 } | 2939 } |
| 2940 | 2940 |
| 2941 if (OwnPtr<MutationObserverInterestGroup> recipients = MutationObserverInter
estGroup::createForAttributesMutation(this, name)) | 2941 if (OwnPtr<MutationObserverInterestGroup> recipients = MutationObserverInter
estGroup::createForAttributesMutation(this, name)) |
| 2942 recipients->enqueueMutationRecord(MutationRecord::createAttributes(this,
name, oldValue)); | 2942 recipients->enqueueMutationRecord(MutationRecord::createAttributes(this,
name, oldValue)); |
| 2943 | 2943 |
| 2944 InspectorInstrumentation::willModifyDOMAttr(this, oldValue, newValue); | 2944 InspectorInstrumentation::willModifyDOMAttr(this, oldValue, newValue); |
| (...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3431 // Before doing so, we need to resolve issues in HTMLSelectElement::recalcLi
stItems | 3431 // Before doing so, we need to resolve issues in HTMLSelectElement::recalcLi
stItems |
| 3432 // and RenderMenuList::setText. See also https://bugs.webkit.org/show_bug.cg
i?id=88405 | 3432 // and RenderMenuList::setText. See also https://bugs.webkit.org/show_bug.cg
i?id=88405 |
| 3433 if (hasTagName(optionTag) || hasTagName(optgroupTag)) | 3433 if (hasTagName(optionTag) || hasTagName(optgroupTag)) |
| 3434 return false; | 3434 return false; |
| 3435 if (FullscreenElementStack::isActiveFullScreenElement(this)) | 3435 if (FullscreenElementStack::isActiveFullScreenElement(this)) |
| 3436 return false; | 3436 return false; |
| 3437 return true; | 3437 return true; |
| 3438 } | 3438 } |
| 3439 | 3439 |
| 3440 } // namespace WebCore | 3440 } // namespace WebCore |
| OLD | NEW |