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

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

Issue 1995203002: Rewrite Shadow DOM distribution engine to support partial synchronous distribution for v1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: wip Created 4 years, 7 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
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. 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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 #include "core/dom/ScriptableDocumentParser.h" 71 #include "core/dom/ScriptableDocumentParser.h"
72 #include "core/dom/SelectorQuery.h" 72 #include "core/dom/SelectorQuery.h"
73 #include "core/dom/StyleChangeReason.h" 73 #include "core/dom/StyleChangeReason.h"
74 #include "core/dom/StyleEngine.h" 74 #include "core/dom/StyleEngine.h"
75 #include "core/dom/Text.h" 75 #include "core/dom/Text.h"
76 #include "core/dom/custom/V0CustomElement.h" 76 #include "core/dom/custom/V0CustomElement.h"
77 #include "core/dom/custom/V0CustomElementRegistrationContext.h" 77 #include "core/dom/custom/V0CustomElementRegistrationContext.h"
78 #include "core/dom/shadow/InsertionPoint.h" 78 #include "core/dom/shadow/InsertionPoint.h"
79 #include "core/dom/shadow/ShadowRoot.h" 79 #include "core/dom/shadow/ShadowRoot.h"
80 #include "core/dom/shadow/ShadowRootInit.h" 80 #include "core/dom/shadow/ShadowRootInit.h"
81 #include "core/dom/shadow/SlotAssignment.h"
81 #include "core/editing/EditingUtilities.h" 82 #include "core/editing/EditingUtilities.h"
82 #include "core/editing/FrameSelection.h" 83 #include "core/editing/FrameSelection.h"
83 #include "core/editing/iterators/TextIterator.h" 84 #include "core/editing/iterators/TextIterator.h"
84 #include "core/editing/serializers/Serialization.h" 85 #include "core/editing/serializers/Serialization.h"
85 #include "core/events/EventDispatcher.h" 86 #include "core/events/EventDispatcher.h"
86 #include "core/events/FocusEvent.h" 87 #include "core/events/FocusEvent.h"
87 #include "core/frame/FrameHost.h" 88 #include "core/frame/FrameHost.h"
88 #include "core/frame/FrameView.h" 89 #include "core/frame/FrameView.h"
89 #include "core/frame/HostsUsingFeatures.h" 90 #include "core/frame/HostsUsingFeatures.h"
90 #include "core/frame/LocalDOMWindow.h" 91 #include "core/frame/LocalDOMWindow.h"
(...skipping 1047 matching lines...) Expand 10 before | Expand all | Expand 10 after
1138 return value.lowerASCII(); 1139 return value.lowerASCII();
1139 return value; 1140 return value;
1140 } 1141 }
1141 1142
1142 void Element::attributeChanged(const QualifiedName& name, const AtomicString& ol dValue, const AtomicString& newValue, AttributeModificationReason reason) 1143 void Element::attributeChanged(const QualifiedName& name, const AtomicString& ol dValue, const AtomicString& newValue, AttributeModificationReason reason)
1143 { 1144 {
1144 if (ElementShadow* parentElementShadow = shadowWhereNodeCanBeDistributed(*th is)) { 1145 if (ElementShadow* parentElementShadow = shadowWhereNodeCanBeDistributed(*th is)) {
1145 if (shouldInvalidateDistributionWhenAttributeChanged(parentElementShadow , name, newValue)) 1146 if (shouldInvalidateDistributionWhenAttributeChanged(parentElementShadow , name, newValue))
1146 parentElementShadow->setNeedsDistributionRecalc(); 1147 parentElementShadow->setNeedsDistributionRecalc();
1147 } 1148 }
1148 if (name == HTMLNames::slotAttr && isChildOfV1ShadowHost()) { 1149 if (name == HTMLNames::slotAttr && oldValue != newValue) {
1149 parentElementShadow()->setNeedsDistributionRecalc(); 1150 if (ShadowRoot* root = v1ShadowRootOfParent())
1150 if (oldValue != newValue) 1151 root->ensureSlotAssignment().hostChildSlotNameChanged(oldValue, newV alue);
1151 parentElement()->shadowRootIfV1()->assignV1();
1152 } 1152 }
1153 1153
1154 parseAttribute(name, oldValue, newValue); 1154 parseAttribute(name, oldValue, newValue);
1155 1155
1156 document().incDOMTreeVersion(); 1156 document().incDOMTreeVersion();
1157 1157
1158 if (name == HTMLNames::idAttr) { 1158 if (name == HTMLNames::idAttr) {
1159 AtomicString oldId = elementData()->idForStyleResolution(); 1159 AtomicString oldId = elementData()->idForStyleResolution();
1160 AtomicString newId = makeIdForStyleResolution(newValue, document().inQui rksMode()); 1160 AtomicString newId = makeIdForStyleResolution(newValue, document().inQui rksMode());
1161 if (newId != oldId) { 1161 if (newId != oldId) {
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
1500 1500
1501 if (ElementAnimations* elementAnimations = data->elementAnimations()) 1501 if (ElementAnimations* elementAnimations = data->elementAnimations())
1502 elementAnimations->cssAnimations().cancel(); 1502 elementAnimations->cssAnimations().cancel();
1503 1503
1504 if (data->intersectionObserverData()) 1504 if (data->intersectionObserverData())
1505 data->intersectionObserverData()->deactivateAllIntersectionObservers (*this); 1505 data->intersectionObserverData()->deactivateAllIntersectionObservers (*this);
1506 } 1506 }
1507 1507
1508 if (document().frame()) 1508 if (document().frame())
1509 document().frame()->eventHandler().elementRemoved(this); 1509 document().frame()->eventHandler().elementRemoved(this);
1510
1511 if (HTMLSlotElement* slot = assignedSlot()) {
1512 ShadowRoot* root = slot->containingShadowRoot();
1513 if (root && root->isV1())
1514 root->assignV1();
1515 }
1516 } 1510 }
1517 1511
1518 void Element::attach(const AttachContext& context) 1512 void Element::attach(const AttachContext& context)
1519 { 1513 {
1520 DCHECK(document().inStyleRecalc()); 1514 DCHECK(document().inStyleRecalc());
1521 1515
1522 // We've already been through detach when doing an attach, but we might 1516 // We've already been through detach when doing an attach, but we might
1523 // need to clear any state that's been added since then. 1517 // need to clear any state that's been added since then.
1524 if (hasRareData() && getStyleChangeType() == NeedsReattachStyleChange) { 1518 if (hasRareData() && getStyleChangeType() == NeedsReattachStyleChange) {
1525 ElementRareData* data = elementRareData(); 1519 ElementRareData* data = elementRareData();
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
2081 } 2075 }
2082 2076
2083 void Element::childrenChanged(const ChildrenChange& change) 2077 void Element::childrenChanged(const ChildrenChange& change)
2084 { 2078 {
2085 ContainerNode::childrenChanged(change); 2079 ContainerNode::childrenChanged(change);
2086 2080
2087 checkForEmptyStyleChange(); 2081 checkForEmptyStyleChange();
2088 if (!change.byParser && change.isChildElementChange()) 2082 if (!change.byParser && change.isChildElementChange())
2089 checkForSiblingStyleChanges(change.type == ElementRemoved ? SiblingEleme ntRemoved : SiblingElementInserted, change.siblingBeforeChange, change.siblingAf terChange); 2083 checkForSiblingStyleChanges(change.type == ElementRemoved ? SiblingEleme ntRemoved : SiblingElementInserted, change.siblingBeforeChange, change.siblingAf terChange);
2090 2084
2091 if (ElementShadow* shadow = this->shadow()) { 2085 // TODO(hayato): Confirm that we can skip this if a shadow tree is v1.
2086 if (ElementShadow* shadow = this->shadow())
2092 shadow->setNeedsDistributionRecalc(); 2087 shadow->setNeedsDistributionRecalc();
2093 if (document().shadowCascadeOrder() == ShadowCascadeOrder::ShadowCascade V1) {
2094 ShadowRoot* root = isShadowHost(*this) && shadowRoot()->isV1() ? sha dowRootIfV1() : isHTMLSlotElement(*this) ? containingShadowRoot() : nullptr;
2095 if (root && root->isV1())
2096 root->assignV1();
2097 }
2098 }
2099 } 2088 }
2100 2089
2101 void Element::finishParsingChildren() 2090 void Element::finishParsingChildren()
2102 { 2091 {
2103 setIsFinishedParsingChildren(true); 2092 setIsFinishedParsingChildren(true);
2104 checkForEmptyStyleChange(); 2093 checkForEmptyStyleChange();
2105 checkForSiblingStyleChanges(FinishedParsingChildren, lastChild(), nullptr); 2094 checkForSiblingStyleChanges(FinishedParsingChildren, lastChild(), nullptr);
2106 } 2095 }
2107 2096
2108 #ifndef NDEBUG 2097 #ifndef NDEBUG
(...skipping 1598 matching lines...) Expand 10 before | Expand all | Expand 10 after
3707 3696
3708 DEFINE_TRACE_WRAPPERS(Element) 3697 DEFINE_TRACE_WRAPPERS(Element)
3709 { 3698 {
3710 if (hasRareData()) { 3699 if (hasRareData()) {
3711 visitor->traceWrappers(elementRareData()); 3700 visitor->traceWrappers(elementRareData());
3712 } 3701 }
3713 ContainerNode::traceWrappers(visitor); 3702 ContainerNode::traceWrappers(visitor);
3714 } 3703 }
3715 3704
3716 } // namespace blink 3705 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698