Chromium Code Reviews| 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..048687d341cd367266c9bdf4c66df7a1904b1049 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,33 @@ 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) |
| +{ |
| + |
| + using Name2Slot = HeapHashMap<AtomicString, Member<HTMLSlotElement>>; |
| + Name2Slot name2slot; |
|
hayato
2016/04/18 07:16:31
resolveDistribution does not need `name2slot`.
yuzuchan
2016/04/18 09:43:27
Done.
|
| + |
| + const HeapVector<Member<HTMLSlotElement>>& slots = shadowRoot.descendantSlots(); |
| + |
| + for (Member<HTMLSlotElement> slot : slots) { |
| + slot->willUpdateDistribution(); |
| + name2slot.add(slot->name(), slot.get()); |
| + } |
| + |
| + 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 +97,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(); |
| } |