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 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
625 } | 625 } |
626 | 626 |
627 if (index == kNotFound) { | 627 if (index == kNotFound) { |
628 appendAttributeInternal(name, newValue, inSynchronizationOfLazyAttribute
); | 628 appendAttributeInternal(name, newValue, inSynchronizationOfLazyAttribute
); |
629 return; | 629 return; |
630 } | 630 } |
631 | 631 |
632 const Attribute& existingAttribute = elementData()->attributes().at(index); | 632 const Attribute& existingAttribute = elementData()->attributes().at(index); |
633 QualifiedName existingAttributeName = existingAttribute.name(); | 633 QualifiedName existingAttributeName = existingAttribute.name(); |
634 | 634 |
| 635 if (newValue == existingAttribute.value()) |
| 636 return; |
| 637 |
635 if (!inSynchronizationOfLazyAttribute) | 638 if (!inSynchronizationOfLazyAttribute) |
636 willModifyAttribute(existingAttributeName, existingAttribute.value(), ne
wValue); | 639 willModifyAttribute(existingAttributeName, existingAttribute.value(), ne
wValue); |
637 | 640 |
638 if (newValue != existingAttribute.value()) | 641 ensureUniqueElementData().attributes().at(index).setValue(newValue); |
639 ensureUniqueElementData().attributes().at(index).setValue(newValue); | |
640 | 642 |
641 if (!inSynchronizationOfLazyAttribute) | 643 if (!inSynchronizationOfLazyAttribute) |
642 attributeChanged(existingAttributeName, newValue); | 644 attributeChanged(existingAttributeName, newValue); |
643 } | 645 } |
644 | 646 |
645 void Element::attributeChanged(const QualifiedName& name, const AtomicString& ne
wValue, AttributeModificationReason reason) | 647 void Element::attributeChanged(const QualifiedName& name, const AtomicString& ne
wValue, AttributeModificationReason reason) |
646 { | 648 { |
647 if (ElementShadow* parentElementShadow = shadowWhereNodeCanBeDistributed(*th
is)) { | 649 if (ElementShadow* parentElementShadow = shadowWhereNodeCanBeDistributed(*th
is)) { |
648 if (shouldInvalidateDistributionWhenAttributeChanged(parentElementShadow
, name, newValue)) | 650 if (shouldInvalidateDistributionWhenAttributeChanged(parentElementShadow
, name, newValue)) |
649 parentElementShadow->setNeedsDistributionRecalc(); | 651 parentElementShadow->setNeedsDistributionRecalc(); |
(...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1524 ASSERT(oldId != newId); | 1526 ASSERT(oldId != newId); |
1525 | 1527 |
1526 if (!oldId.isEmpty()) | 1528 if (!oldId.isEmpty()) |
1527 scope.removeElementById(oldId, this); | 1529 scope.removeElementById(oldId, this); |
1528 if (!newId.isEmpty()) | 1530 if (!newId.isEmpty()) |
1529 scope.addElementById(newId, this); | 1531 scope.addElementById(newId, this); |
1530 } | 1532 } |
1531 | 1533 |
1532 void Element::willModifyAttribute(const QualifiedName& name, const AtomicString&
oldValue, const AtomicString& newValue) | 1534 void Element::willModifyAttribute(const QualifiedName& name, const AtomicString&
oldValue, const AtomicString& newValue) |
1533 { | 1535 { |
1534 if (name == HTMLNames::idAttr) { | 1536 if (name == HTMLNames::idAttr) |
1535 updateId(oldValue, newValue); | 1537 updateId(oldValue, newValue); |
1536 } | |
1537 | 1538 |
1538 if (oldValue != newValue) { | 1539 if (inActiveDocument() && styleChangeType() < SubtreeStyleChange && affected
ByAttributeSelector(name.localName())) |
1539 if (inActiveDocument() && styleChangeType() < SubtreeStyleChange && affe
ctedByAttributeSelector(name.localName())) | 1540 setNeedsStyleRecalc(LocalStyleChange); |
1540 setNeedsStyleRecalc(LocalStyleChange); | |
1541 | 1541 |
1542 if (isUpgradedCustomElement()) | 1542 if (isUpgradedCustomElement()) |
1543 CustomElement::attributeDidChange(this, name.localName(), oldValue,
newValue); | 1543 CustomElement::attributeDidChange(this, name.localName(), oldValue, newV
alue); |
1544 } | |
1545 | 1544 |
1546 if (OwnPtr<MutationObserverInterestGroup> recipients = MutationObserverInter
estGroup::createForAttributesMutation(*this, name)) | 1545 if (OwnPtr<MutationObserverInterestGroup> recipients = MutationObserverInter
estGroup::createForAttributesMutation(*this, name)) |
1547 recipients->enqueueMutationRecord(MutationRecord::createAttributes(this,
name, oldValue)); | 1546 recipients->enqueueMutationRecord(MutationRecord::createAttributes(this,
name, oldValue)); |
1548 } | 1547 } |
1549 | 1548 |
1550 static bool needsURLResolutionForInlineStyle(const Element& element, const Docum
ent& oldDocument, const Document& newDocument) | 1549 static bool needsURLResolutionForInlineStyle(const Element& element, const Docum
ent& oldDocument, const Document& newDocument) |
1551 { | 1550 { |
1552 if (oldDocument == newDocument) | 1551 if (oldDocument == newDocument) |
1553 return false; | 1552 return false; |
1554 if (oldDocument.baseURL() == newDocument.baseURL()) | 1553 if (oldDocument.baseURL() == newDocument.baseURL()) |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1832 return false; | 1831 return false; |
1833 if (treeScope().scopedStyleResolver().features().hasSelectorForId(idValue)) | 1832 if (treeScope().scopedStyleResolver().features().hasSelectorForId(idValue)) |
1834 return true; | 1833 return true; |
1835 // Host rules could also have effects. | 1834 // Host rules could also have effects. |
1836 if (ShadowRoot* shadowRoot = this->shadowRoot()) | 1835 if (ShadowRoot* shadowRoot = this->shadowRoot()) |
1837 return shadowRoot->scopedStyleResolver().features().hasSelectorForId(idV
alue); | 1836 return shadowRoot->scopedStyleResolver().features().hasSelectorForId(idV
alue); |
1838 return false; | 1837 return false; |
1839 } | 1838 } |
1840 | 1839 |
1841 } // namespace blink | 1840 } // namespace blink |
OLD | NEW |