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 1066 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1077 appendAttributeInternal(name, newValue, inSynchronizationOfLazyAttribute
); | 1077 appendAttributeInternal(name, newValue, inSynchronizationOfLazyAttribute
); |
1078 return; | 1078 return; |
1079 } | 1079 } |
1080 | 1080 |
1081 const Attribute& existingAttribute = elementData()->attributes().at(index); | 1081 const Attribute& existingAttribute = elementData()->attributes().at(index); |
1082 AtomicString existingAttributeValue = existingAttribute.value(); | 1082 AtomicString existingAttributeValue = existingAttribute.value(); |
1083 QualifiedName existingAttributeName = existingAttribute.name(); | 1083 QualifiedName existingAttributeName = existingAttribute.name(); |
1084 | 1084 |
1085 if (!inSynchronizationOfLazyAttribute) | 1085 if (!inSynchronizationOfLazyAttribute) |
1086 willModifyAttribute(existingAttributeName, existingAttributeValue, newVa
lue); | 1086 willModifyAttribute(existingAttributeName, existingAttributeValue, newVa
lue); |
1087 | 1087 if (newValue != existingAttributeValue) |
1088 if (newValue != existingAttributeValue) { | 1088 ensureUniqueElementData().attributes().at(index).setValue(newValue); |
1089 // If there is an Attr node hooked to this attribute, the Attr::setValue
() call below | |
1090 // will write into the ElementData. | |
1091 // FIXME: Refactor this so it makes some sense. | |
1092 if (RefPtrWillBeRawPtr<Attr> attrNode = inSynchronizationOfLazyAttribute
? nullptr : attrIfExists(existingAttributeName)) | |
1093 attrNode->setValue(newValue); | |
1094 else | |
1095 ensureUniqueElementData().attributes().at(index).setValue(newValue); | |
1096 } | |
1097 | |
1098 if (!inSynchronizationOfLazyAttribute) | 1089 if (!inSynchronizationOfLazyAttribute) |
1099 didModifyAttribute(existingAttributeName, newValue); | 1090 didModifyAttribute(existingAttributeName, newValue); |
1100 } | 1091 } |
1101 | 1092 |
1102 static inline AtomicString makeIdForStyleResolution(const AtomicString& value, b
ool inQuirksMode) | 1093 static inline AtomicString makeIdForStyleResolution(const AtomicString& value, b
ool inQuirksMode) |
1103 { | 1094 { |
1104 if (inQuirksMode) | 1095 if (inQuirksMode) |
1105 return value.lower(); | 1096 return value.lower(); |
1106 return value; | 1097 return value; |
1107 } | 1098 } |
(...skipping 1563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2671 { | 2662 { |
2672 return document().getCachedLocale(computeInheritedLanguage()); | 2663 return document().getCachedLocale(computeInheritedLanguage()); |
2673 } | 2664 } |
2674 | 2665 |
2675 void Element::cancelFocusAppearanceUpdate() | 2666 void Element::cancelFocusAppearanceUpdate() |
2676 { | 2667 { |
2677 if (document().focusedElement() == this) | 2668 if (document().focusedElement() == this) |
2678 document().cancelFocusAppearanceUpdate(); | 2669 document().cancelFocusAppearanceUpdate(); |
2679 } | 2670 } |
2680 | 2671 |
2681 void Element::normalizeAttributes() | |
2682 { | |
2683 if (!hasAttributes()) | |
2684 return; | |
2685 AttrNodeList* attrNodes = attrNodeList(); | |
2686 if (!attrNodes) | |
2687 return; | |
2688 // Copy the Attr Vector because Node::normalize() can fire synchronous JS | |
2689 // events (e.g. DOMSubtreeModified) and a JS listener could add / remove | |
2690 // attributes while we are iterating. | |
2691 AttrNodeList attrNodesCopy(*attrNodes); | |
2692 for (size_t i = 0; i < attrNodesCopy.size(); ++i) | |
2693 attrNodesCopy[i]->normalize(); | |
2694 } | |
2695 | |
2696 void Element::updatePseudoElement(PseudoId pseudoId, StyleRecalcChange change) | 2672 void Element::updatePseudoElement(PseudoId pseudoId, StyleRecalcChange change) |
2697 { | 2673 { |
2698 ASSERT(!needsStyleRecalc()); | 2674 ASSERT(!needsStyleRecalc()); |
2699 PseudoElement* element = pseudoElement(pseudoId); | 2675 PseudoElement* element = pseudoElement(pseudoId); |
2700 | 2676 |
2701 if (element && (change == UpdatePseudoElements || element->shouldCallRecalcS
tyle(change))) { | 2677 if (element && (change == UpdatePseudoElements || element->shouldCallRecalcS
tyle(change))) { |
2702 if (pseudoId == FIRST_LETTER && updateFirstLetter(element)) | 2678 if (pseudoId == FIRST_LETTER && updateFirstLetter(element)) |
2703 return; | 2679 return; |
2704 | 2680 |
2705 // Need to clear the cached style if the PseudoElement wants a recalc so
it | 2681 // Need to clear the cached style if the PseudoElement wants a recalc so
it |
(...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3470 { | 3446 { |
3471 #if ENABLE(OILPAN) | 3447 #if ENABLE(OILPAN) |
3472 if (hasRareData()) | 3448 if (hasRareData()) |
3473 visitor->trace(elementRareData()); | 3449 visitor->trace(elementRareData()); |
3474 visitor->trace(m_elementData); | 3450 visitor->trace(m_elementData); |
3475 #endif | 3451 #endif |
3476 ContainerNode::trace(visitor); | 3452 ContainerNode::trace(visitor); |
3477 } | 3453 } |
3478 | 3454 |
3479 } // namespace blink | 3455 } // namespace blink |
OLD | NEW |