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

Side by Side Diff: third_party/WebKit/Source/core/dom/Element.cpp

Issue 2593973002: Queue custom element attribute reactions for no-op sets, removes (Closed)
Patch Set: Rebaseline MutationObserver test. (Thanks!) Created 3 years, 12 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 | « third_party/WebKit/Source/core/dom/DOMTokenList.cpp ('k') | no next file » | 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. 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc.
8 * All rights reserved. 8 * All rights reserved.
9 * (C) 2007 Eric Seidel (eric@webkit.org) 9 * (C) 2007 Eric Seidel (eric@webkit.org)
10 * 10 *
(...skipping 2494 matching lines...) Expand 10 before | Expand all | Expand 10 after
2505 size_t index, 2505 size_t index,
2506 SynchronizationOfLazyAttribute inSynchronizationOfLazyAttribute) { 2506 SynchronizationOfLazyAttribute inSynchronizationOfLazyAttribute) {
2507 MutableAttributeCollection attributes = 2507 MutableAttributeCollection attributes =
2508 ensureUniqueElementData().attributes(); 2508 ensureUniqueElementData().attributes();
2509 SECURITY_DCHECK(index < attributes.size()); 2509 SECURITY_DCHECK(index < attributes.size());
2510 2510
2511 QualifiedName name = attributes[index].name(); 2511 QualifiedName name = attributes[index].name();
2512 AtomicString valueBeingRemoved = attributes[index].value(); 2512 AtomicString valueBeingRemoved = attributes[index].value();
2513 2513
2514 if (!inSynchronizationOfLazyAttribute) { 2514 if (!inSynchronizationOfLazyAttribute) {
2515 if (!valueBeingRemoved.isNull()) 2515 if (!valueBeingRemoved.isNull()) {
2516 willModifyAttribute(name, valueBeingRemoved, nullAtom); 2516 willModifyAttribute(name, valueBeingRemoved, nullAtom);
2517 } else if (getCustomElementState() == CustomElementState::Custom) {
2518 // This would otherwise be enqueued by willModifyAttribute.
2519 CustomElement::enqueueAttributeChangedCallback(
2520 this, name, valueBeingRemoved, nullAtom);
2521 }
2517 } 2522 }
2518 2523
2519 if (Attr* attrNode = attrIfExists(name)) 2524 if (Attr* attrNode = attrIfExists(name))
2520 detachAttrNodeFromElementWithValue(attrNode, attributes[index].value()); 2525 detachAttrNodeFromElementWithValue(attrNode, attributes[index].value());
2521 2526
2522 attributes.remove(index); 2527 attributes.remove(index);
2523 2528
2524 if (!inSynchronizationOfLazyAttribute) 2529 if (!inSynchronizationOfLazyAttribute)
2525 didRemoveAttribute(name, valueBeingRemoved); 2530 didRemoveAttribute(name, valueBeingRemoved);
2526 } 2531 }
(...skipping 978 matching lines...) Expand 10 before | Expand all | Expand 10 after
3505 updateExtraNamedItemRegistration(oldId, newId); 3510 updateExtraNamedItemRegistration(oldId, newId);
3506 } 3511 }
3507 3512
3508 void Element::willModifyAttribute(const QualifiedName& name, 3513 void Element::willModifyAttribute(const QualifiedName& name,
3509 const AtomicString& oldValue, 3514 const AtomicString& oldValue,
3510 const AtomicString& newValue) { 3515 const AtomicString& newValue) {
3511 if (name == HTMLNames::nameAttr) { 3516 if (name == HTMLNames::nameAttr) {
3512 updateName(oldValue, newValue); 3517 updateName(oldValue, newValue);
3513 } 3518 }
3514 3519
3520 if (getCustomElementState() == CustomElementState::Custom) {
3521 CustomElement::enqueueAttributeChangedCallback(this, name, oldValue,
3522 newValue);
3523 }
3524
3515 if (oldValue != newValue) { 3525 if (oldValue != newValue) {
3516 document().styleEngine().attributeChangedForElement(name, *this); 3526 document().styleEngine().attributeChangedForElement(name, *this);
3517 if (getCustomElementState() == CustomElementState::Custom) 3527 if (isUpgradedV0CustomElement()) {
3518 CustomElement::enqueueAttributeChangedCallback(this, name, oldValue,
3519 newValue);
3520 else if (isUpgradedV0CustomElement())
3521 V0CustomElement::attributeDidChange(this, name.localName(), oldValue, 3528 V0CustomElement::attributeDidChange(this, name.localName(), oldValue,
3522 newValue); 3529 newValue);
3530 }
3523 } 3531 }
3524 3532
3525 if (MutationObserverInterestGroup* recipients = 3533 if (MutationObserverInterestGroup* recipients =
3526 MutationObserverInterestGroup::createForAttributesMutation(*this, 3534 MutationObserverInterestGroup::createForAttributesMutation(*this,
3527 name)) 3535 name))
3528 recipients->enqueueMutationRecord( 3536 recipients->enqueueMutationRecord(
3529 MutationRecord::createAttributes(this, name, oldValue)); 3537 MutationRecord::createAttributes(this, name, oldValue));
3530 3538
3531 InspectorInstrumentation::willModifyDOMAttr(this, oldValue, newValue); 3539 InspectorInstrumentation::willModifyDOMAttr(this, oldValue, newValue);
3532 } 3540 }
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after
4104 } 4112 }
4105 4113
4106 DEFINE_TRACE_WRAPPERS(Element) { 4114 DEFINE_TRACE_WRAPPERS(Element) {
4107 if (hasRareData()) { 4115 if (hasRareData()) {
4108 visitor->traceWrappers(elementRareData()); 4116 visitor->traceWrappers(elementRareData());
4109 } 4117 }
4110 ContainerNode::traceWrappers(visitor); 4118 ContainerNode::traceWrappers(visitor);
4111 } 4119 }
4112 4120
4113 } // namespace blink 4121 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/DOMTokenList.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698