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

Unified Diff: third_party/WebKit/Source/core/dom/shadow/SlotAssignment.cpp

Issue 1899653002: Support slotchange event (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Bug fix Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/dom/shadow/SlotAssignment.cpp
diff --git a/third_party/WebKit/Source/core/dom/shadow/SlotAssignment.cpp b/third_party/WebKit/Source/core/dom/shadow/SlotAssignment.cpp
index fca3fa5350e6904cfe7b4fb92341a08506f50ccc..44274a29c1a4add2cce6e37d51527076f286a0a9 100644
--- a/third_party/WebKit/Source/core/dom/shadow/SlotAssignment.cpp
+++ b/third_party/WebKit/Source/core/dom/shadow/SlotAssignment.cpp
@@ -35,7 +35,8 @@ void SlotAssignment::resolveAssignment(ShadowRoot& shadowRoot)
const HeapVector<Member<HTMLSlotElement>>& slots = shadowRoot.descendantSlots();
for (Member<HTMLSlotElement> slot : slots) {
- slot->willUpdateDistribution();
+ slot->willUpdateAssignment();
+ slot->willUpdateFallback();
name2slot.add(slot->name(), slot.get());
}
@@ -57,6 +58,27 @@ void SlotAssignment::resolveAssignment(ShadowRoot& shadowRoot)
detachNotAssignedNode(child);
}
+ for (auto slot = slots.rbegin(); slot != slots.rend(); ++slot)
+ (*slot)->updateFallbackNodes();
+
+ // For each slot, check if assigned nodes have changed
+ // If so, call fireSlotchange function
+ for (const auto& slot : slots)
+ slot->didUpdateAssignment();
+}
+
+void SlotAssignment::resolveDistribution(ShadowRoot& shadowRoot)
+{
+ const HeapVector<Member<HTMLSlotElement>>& slots = shadowRoot.descendantSlots();
+ for (Member<HTMLSlotElement> slot : slots) {
+ slot->willUpdateDistribution();
+ }
+
+ for (auto slot : slots) {
+ for (auto node : slot->assignedNodes())
+ distribute(*node, *slot);
+ }
+
// Update each slot's distribution in reverse tree order so that a child slot is visited before its parent slot.
for (auto slot = slots.rbegin(); slot != slots.rend(); ++slot)
(*slot)->updateDistributedNodesWithFallback();
@@ -69,10 +91,16 @@ void SlotAssignment::assign(Node& hostChild, HTMLSlotElement& slot)
DCHECK(hostChild.isSlotAssignable());
m_assignment.add(&hostChild, &slot);
slot.appendAssignedNode(hostChild);
+}
+
+void SlotAssignment::distribute(Node& hostChild, HTMLSlotElement& slot)
+{
+ DCHECK(hostChild.isSlotAssignable());
if (isHTMLSlotElement(hostChild))
slot.appendDistributedNodesFrom(toHTMLSlotElement(hostChild));
else
slot.appendDistributedNode(hostChild);
+
if (slot.isChildOfV1ShadowHost())
slot.parentElementShadow()->setNeedsDistributionRecalc();
}
« no previous file with comments | « third_party/WebKit/Source/core/dom/shadow/SlotAssignment.h ('k') | third_party/WebKit/Source/core/html/HTMLSlotElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698