| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/dom/shadow/SlotAssignment.h" | 5 #include "core/dom/shadow/SlotAssignment.h" |
| 6 | 6 |
| 7 #include "core/HTMLNames.h" | 7 #include "core/HTMLNames.h" |
| 8 #include "core/dom/ElementTraversal.h" | 8 #include "core/dom/ElementTraversal.h" |
| 9 #include "core/dom/NodeTraversal.h" | 9 #include "core/dom/NodeTraversal.h" |
| 10 #include "core/dom/shadow/ElementShadow.h" | 10 #include "core/dom/shadow/ElementShadow.h" |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 | 109 |
| 110 static void detachNotAssignedNode(Node& node) | 110 static void detachNotAssignedNode(Node& node) |
| 111 { | 111 { |
| 112 if (node.layoutObject()) | 112 if (node.layoutObject()) |
| 113 node.lazyReattachIfAttached(); | 113 node.lazyReattachIfAttached(); |
| 114 } | 114 } |
| 115 | 115 |
| 116 void SlotAssignment::resolveAssignment() | 116 void SlotAssignment::resolveAssignment() |
| 117 { | 117 { |
| 118 for (Member<HTMLSlotElement> slot : slots()) | 118 for (Member<HTMLSlotElement> slot : slots()) |
| 119 slot->clearDistribution(); | 119 slot->saveAndClearDistribution(); |
| 120 | 120 |
| 121 for (Node& child : NodeTraversal::childrenOf(m_owner->host())) { | 121 for (Node& child : NodeTraversal::childrenOf(m_owner->host())) { |
| 122 if (!child.isSlotable()) { | 122 if (!child.isSlotable()) { |
| 123 detachNotAssignedNode(child); | 123 detachNotAssignedNode(child); |
| 124 continue; | 124 continue; |
| 125 } | 125 } |
| 126 HTMLSlotElement* slot = findSlotByName(child.slotName()); | 126 HTMLSlotElement* slot = findSlotByName(child.slotName()); |
| 127 if (slot) | 127 if (slot) |
| 128 slot->appendAssignedNode(child); | 128 slot->appendAssignedNode(child); |
| 129 else | 129 else |
| 130 detachNotAssignedNode(child); | 130 detachNotAssignedNode(child); |
| 131 } | 131 } |
| 132 } | 132 } |
| 133 | 133 |
| 134 void SlotAssignment::resolveDistribution() | 134 void SlotAssignment::resolveDistribution() |
| 135 { | 135 { |
| 136 resolveAssignment(); | 136 resolveAssignment(); |
| 137 const HeapVector<Member<HTMLSlotElement>>& slots = this->slots(); | 137 const HeapVector<Member<HTMLSlotElement>>& slots = this->slots(); |
| 138 | 138 |
| 139 for (auto slot : slots) | 139 for (auto slot : slots) |
| 140 slot->resolveDistributedNodes(); | 140 slot->resolveDistributedNodes(); |
| 141 | 141 |
| 142 // Update each slot's distribution in reverse tree order so that a child slo
t is visited before its parent slot. | 142 // Update each slot's distribution in reverse tree order so that a child slo
t is visited before its parent slot. |
| 143 for (auto slot = slots.rbegin(); slot != slots.rend(); ++slot) | 143 for (auto slot = slots.rbegin(); slot != slots.rend(); ++slot) { |
| 144 (*slot)->updateDistributedNodesWithFallback(); | 144 (*slot)->updateDistributedNodesWithFallback(); |
| 145 (*slot)->lazyReattachDistributedNodesIfNeeded(); |
| 146 } |
| 145 } | 147 } |
| 146 | 148 |
| 147 const HeapVector<Member<HTMLSlotElement>>& SlotAssignment::slots() | 149 const HeapVector<Member<HTMLSlotElement>>& SlotAssignment::slots() |
| 148 { | 150 { |
| 149 if (m_needsCollectSlots) | 151 if (m_needsCollectSlots) |
| 150 collectSlots(); | 152 collectSlots(); |
| 151 return m_slots; | 153 return m_slots; |
| 152 } | 154 } |
| 153 | 155 |
| 154 HTMLSlotElement* SlotAssignment::findSlot(const Node& node) | 156 HTMLSlotElement* SlotAssignment::findSlot(const Node& node) |
| (...skipping 20 matching lines...) Expand all Loading... |
| 175 } | 177 } |
| 176 | 178 |
| 177 DEFINE_TRACE(SlotAssignment) | 179 DEFINE_TRACE(SlotAssignment) |
| 178 { | 180 { |
| 179 visitor->trace(m_slots); | 181 visitor->trace(m_slots); |
| 180 visitor->trace(m_slotMap); | 182 visitor->trace(m_slotMap); |
| 181 visitor->trace(m_owner); | 183 visitor->trace(m_owner); |
| 182 } | 184 } |
| 183 | 185 |
| 184 } // namespace blink | 186 } // namespace blink |
| OLD | NEW |