OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2015 Google Inc. All rights reserved. | 2 * Copyright (C) 2015 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 HeapVector<Member<Node>> distributedNodes; | 84 HeapVector<Member<Node>> distributedNodes; |
85 Node* child = NodeTraversal::firstChild(*this); | 85 Node* child = NodeTraversal::firstChild(*this); |
86 while (child) { | 86 while (child) { |
87 if (!child->isSlotable()) { | 87 if (!child->isSlotable()) { |
88 child = NodeTraversal::nextSkippingChildren(*child, this); | 88 child = NodeTraversal::nextSkippingChildren(*child, this); |
89 continue; | 89 continue; |
90 } | 90 } |
91 if (isHTMLSlotElement(child)) { | 91 if (isHTMLSlotElement(child)) { |
92 child = NodeTraversal::next(*child, this); | 92 child = NodeTraversal::next(*child, this); |
93 } else { | 93 } else { |
94 distributedNodes.append(child); | 94 distributedNodes.push_back(child); |
95 child = NodeTraversal::nextSkippingChildren(*child, this); | 95 child = NodeTraversal::nextSkippingChildren(*child, this); |
96 } | 96 } |
97 } | 97 } |
98 return distributedNodes; | 98 return distributedNodes; |
99 } | 99 } |
100 | 100 |
101 const HeapVector<Member<Node>>& HTMLSlotElement::getDistributedNodes() { | 101 const HeapVector<Member<Node>>& HTMLSlotElement::getDistributedNodes() { |
102 DCHECK(!needsDistributionRecalc()); | 102 DCHECK(!needsDistributionRecalc()); |
103 DCHECK(supportsDistribution() || m_distributedNodes.isEmpty()); | 103 DCHECK(supportsDistribution() || m_distributedNodes.isEmpty()); |
104 return m_distributedNodes; | 104 return m_distributedNodes; |
105 } | 105 } |
106 | 106 |
107 void HTMLSlotElement::appendAssignedNode(Node& hostChild) { | 107 void HTMLSlotElement::appendAssignedNode(Node& hostChild) { |
108 DCHECK(hostChild.isSlotable()); | 108 DCHECK(hostChild.isSlotable()); |
109 m_assignedNodes.append(&hostChild); | 109 m_assignedNodes.push_back(&hostChild); |
110 } | 110 } |
111 | 111 |
112 void HTMLSlotElement::resolveDistributedNodes() { | 112 void HTMLSlotElement::resolveDistributedNodes() { |
113 for (auto& node : m_assignedNodes) { | 113 for (auto& node : m_assignedNodes) { |
114 DCHECK(node->isSlotable()); | 114 DCHECK(node->isSlotable()); |
115 if (isHTMLSlotElement(*node)) | 115 if (isHTMLSlotElement(*node)) |
116 appendDistributedNodesFrom(toHTMLSlotElement(*node)); | 116 appendDistributedNodesFrom(toHTMLSlotElement(*node)); |
117 else | 117 else |
118 appendDistributedNode(*node); | 118 appendDistributedNode(*node); |
119 | 119 |
120 if (isChildOfV1ShadowHost()) | 120 if (isChildOfV1ShadowHost()) |
121 parentElementShadow()->setNeedsDistributionRecalc(); | 121 parentElementShadow()->setNeedsDistributionRecalc(); |
122 } | 122 } |
123 } | 123 } |
124 | 124 |
125 void HTMLSlotElement::appendDistributedNode(Node& node) { | 125 void HTMLSlotElement::appendDistributedNode(Node& node) { |
126 size_t size = m_distributedNodes.size(); | 126 size_t size = m_distributedNodes.size(); |
127 m_distributedNodes.append(&node); | 127 m_distributedNodes.push_back(&node); |
128 m_distributedIndices.set(&node, size); | 128 m_distributedIndices.set(&node, size); |
129 } | 129 } |
130 | 130 |
131 void HTMLSlotElement::appendDistributedNodesFrom(const HTMLSlotElement& other) { | 131 void HTMLSlotElement::appendDistributedNodesFrom(const HTMLSlotElement& other) { |
132 size_t index = m_distributedNodes.size(); | 132 size_t index = m_distributedNodes.size(); |
133 m_distributedNodes.appendVector(other.m_distributedNodes); | 133 m_distributedNodes.appendVector(other.m_distributedNodes); |
134 for (const auto& node : other.m_distributedNodes) | 134 for (const auto& node : other.m_distributedNodes) |
135 m_distributedIndices.set(node.get(), index++); | 135 m_distributedIndices.set(node.get(), index++); |
136 } | 136 } |
137 | 137 |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 | 361 |
362 DEFINE_TRACE(HTMLSlotElement) { | 362 DEFINE_TRACE(HTMLSlotElement) { |
363 visitor->trace(m_assignedNodes); | 363 visitor->trace(m_assignedNodes); |
364 visitor->trace(m_distributedNodes); | 364 visitor->trace(m_distributedNodes); |
365 visitor->trace(m_oldDistributedNodes); | 365 visitor->trace(m_oldDistributedNodes); |
366 visitor->trace(m_distributedIndices); | 366 visitor->trace(m_distributedIndices); |
367 HTMLElement::trace(visitor); | 367 HTMLElement::trace(visitor); |
368 } | 368 } |
369 | 369 |
370 } // namespace blink | 370 } // namespace blink |
OLD | NEW |