Changeset 266212 in webkit
- Timestamp:
- Aug 26, 2020 6:26:24 PM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r266207 r266212 1 2020-08-25 Ryosuke Niwa <rniwa@webkit.org> 2 3 Make it possible to create a WeakPtr to Node and use it store assigned nodes in SlotAssignment 4 https://bugs.webkit.org/show_bug.cgi?id=215673 5 <rdar://problem/67440818> 6 7 Reviewed by Darin Adler. 8 9 This patch makes Node inherit from CanMakeWeakPtr<Node> and uses it in SlotAssignment's assignedNodes 10 and related member variables and functions. 11 12 No new tests since there should be no behavioral difference. 13 14 * dom/ComposedTreeIterator.cpp: 15 (WebCore::ComposedTreeIterator::traverseNextInShadowTree): 16 (WebCore::ComposedTreeIterator::advanceInSlot): 17 * dom/ComposedTreeIterator.h: 18 (WebCore::firstChildInComposedTreeIgnoringUserAgentShadow): 19 (WebCore::nextSiblingInComposedTreeIgnoringUserAgentShadow): 20 * dom/ContainerNode.h: 21 * dom/Node.h: 22 * dom/ShadowRoot.cpp: 23 (WebCore::ShadowRoot::assignedNodesForSlot): 24 * dom/ShadowRoot.h: 25 * dom/SlotAssignment.cpp: 26 (WebCore::SlotAssignment::assignedNodesForSlot): 27 (WebCore::SlotAssignment::assignToSlot): 28 * dom/SlotAssignment.h: 29 * html/HTMLSlotElement.cpp: 30 (WebCore::HTMLSlotElement::assignedNodes const): 31 (WebCore::flattenAssignedNodes): 32 (WebCore:: const): Deleted. 33 * html/HTMLSlotElement.h: 34 * page/FocusController.cpp: 35 (WebCore::FocusNavigationScope::firstNodeInScope const): 36 (WebCore::FocusNavigationScope::lastNodeInScope const): 37 1 38 2020-08-26 Andres Gonzalez <andresg_22@apple.com> 2 39 -
trunk/Source/WebCore/dom/ComposedTreeIterator.cpp
r260997 r266212 164 164 if (auto* assignedNodes = slot.assignedNodes()) { 165 165 context().slotNodeIndex = 0; 166 auto* assignedNode = assignedNodes->at(0) ;166 auto* assignedNode = assignedNodes->at(0).get(); 167 167 m_contextStack.append(Context(*assignedNode->parentElement(), *assignedNode, Context::Slotted)); 168 168 return; … … 198 198 return false; 199 199 200 auto* slotNode = assignedNodes.at(context().slotNodeIndex); 200 auto* slotNode = assignedNodes.at(context().slotNodeIndex).get(); 201 if (!slotNode) 202 return false; 201 203 m_contextStack.append(Context(*slotNode->parentElement(), *slotNode, Context::Slotted)); 202 204 return true; -
trunk/Source/WebCore/dom/ComposedTreeIterator.h
r238693 r266212 227 227 if (is<HTMLSlotElement>(node)) { 228 228 if (auto* assignedNodes = downcast<HTMLSlotElement>(node).assignedNodes()) 229 return assignedNodes->at(0) ;229 return assignedNodes->at(0).get(); 230 230 } 231 231 return node.firstChild(); … … 240 240 ASSERT(nodeIndex != notFound); 241 241 if (assignedNodes->size() > nodeIndex + 1) 242 return assignedNodes->at(nodeIndex + 1) ;242 return assignedNodes->at(nodeIndex + 1).get(); 243 243 return nullptr; 244 244 } -
trunk/Source/WebCore/dom/ContainerNode.h
r265844 r266212 26 26 #include "CollectionType.h" 27 27 #include "Node.h" 28 #include <wtf/WeakPtr.h>29 28 30 29 namespace WebCore { … … 37 36 typedef Vector<Ref<Node>, initialNodeVectorSize> NodeVector; 38 37 39 class ContainerNode : public CanMakeWeakPtr<ContainerNode>, publicNode {38 class ContainerNode : public Node { 40 39 WTF_MAKE_ISO_ALLOCATED(ContainerNode); 41 40 public: -
trunk/Source/WebCore/dom/Node.h
r266026 r266212 38 38 #include <wtf/MainThread.h> 39 39 #include <wtf/URLHash.h> 40 #include <wtf/WeakPtr.h> 40 41 41 42 // This needs to be here because Document.h also depends on it. … … 70 71 using NodeOrString = Variant<RefPtr<Node>, String>; 71 72 72 class Node : public EventTarget {73 class Node : public CanMakeWeakPtr<Node>, public EventTarget { 73 74 WTF_MAKE_ISO_ALLOCATED(Node); 74 75 -
trunk/Source/WebCore/dom/ShadowRoot.cpp
r260195 r266212 254 254 } 255 255 256 const Vector< Node*>* ShadowRoot::assignedNodesForSlot(const HTMLSlotElement& slot)256 const Vector<WeakPtr<Node>>* ShadowRoot::assignedNodesForSlot(const HTMLSlotElement& slot) 257 257 { 258 258 if (!m_slotAssignment) -
trunk/Source/WebCore/dom/ShadowRoot.h
r259577 r266212 100 100 void hostChildElementDidChangeSlotAttribute(Element&, const AtomString& oldValue, const AtomString& newValue); 101 101 102 const Vector< Node*>* assignedNodesForSlot(const HTMLSlotElement&);102 const Vector<WeakPtr<Node>>* assignedNodesForSlot(const HTMLSlotElement&); 103 103 104 104 void moveShadowRootToNewParentScope(TreeScope&, Document&); -
trunk/Source/WebCore/dom/SlotAssignment.cpp
r254087 r266212 312 312 } 313 313 314 const Vector< Node*>* SlotAssignment::assignedNodesForSlot(const HTMLSlotElement& slotElement, ShadowRoot& shadowRoot)314 const Vector<WeakPtr<Node>>* SlotAssignment::assignedNodesForSlot(const HTMLSlotElement& slotElement, ShadowRoot& shadowRoot) 315 315 { 316 316 ASSERT(slotElement.containingShadowRoot() == &shadowRoot); … … 401 401 auto defaultSlotEntry = m_slots.find(defaultSlotName()); 402 402 if (defaultSlotEntry != m_slots.end()) 403 defaultSlotEntry->value->assignedNodes.append( &child);403 defaultSlotEntry->value->assignedNodes.append(makeWeakPtr(child)); 404 404 return; 405 405 } … … 408 408 return makeUnique<Slot>(); 409 409 }); 410 addResult.iterator->value->assignedNodes.append( &child);411 } 412 413 } 414 415 410 addResult.iterator->value->assignedNodes.append(makeWeakPtr(child)); 411 } 412 413 } 414 415 -
trunk/Source/WebCore/dom/SlotAssignment.h
r254087 r266212 61 61 void enqueueSlotChangeEvent(const AtomString&, ShadowRoot&); 62 62 63 const Vector< Node*>* assignedNodesForSlot(const HTMLSlotElement&, ShadowRoot&);63 const Vector<WeakPtr<Node>>* assignedNodesForSlot(const HTMLSlotElement&, ShadowRoot&); 64 64 65 65 virtual void hostChildElementDidChange(const Element&, ShadowRoot&); … … 79 79 unsigned elementCount { 0 }; 80 80 bool seenFirstElement { false }; 81 Vector< Node*> assignedNodes;81 Vector<WeakPtr<Node>> assignedNodes; 82 82 }; 83 83 -
trunk/Source/WebCore/html/HTMLSlotElement.cpp
r261433 r266212 96 96 } 97 97 98 const Vector< Node*>* HTMLSlotElement::assignedNodes() const98 const Vector<WeakPtr<Node>>* HTMLSlotElement::assignedNodes() const 99 99 { 100 100 auto shadowRoot = makeRefPtr(containingShadowRoot()); … … 120 120 return; 121 121 } 122 for (const RefPtr<Node>& node : *assignedNodes) { 122 for (auto& nodeWeakPtr : *assignedNodes) { 123 auto* node = nodeWeakPtr.get(); 124 if (UNLIKELY(!node)) { 125 ASSERT_NOT_REACHED(); 126 continue; 127 } 123 128 if (is<HTMLSlotElement>(*node) && downcast<HTMLSlotElement>(*node).containingShadowRoot()) 124 129 flattenAssignedNodes(nodes, downcast<HTMLSlotElement>(*node)); … … 140 145 if (!assignedNodes) 141 146 return { }; 142 return assignedNodes->map([] (Node* node) { return makeRef(*node); }); 147 148 Vector<Ref<Node>> nodes; 149 nodes.reserveInitialCapacity(assignedNodes->size()); 150 for (auto& nodePtr : *assignedNodes) { 151 auto* node = nodePtr.get(); 152 if (UNLIKELY(!node)) 153 continue; 154 nodes.uncheckedAppend(*node); 155 } 156 157 return nodes; 143 158 } 144 159 -
trunk/Source/WebCore/html/HTMLSlotElement.h
r246490 r266212 36 36 static Ref<HTMLSlotElement> create(const QualifiedName&, Document&); 37 37 38 const Vector< Node*>* assignedNodes() const;38 const Vector<WeakPtr<Node>>* assignedNodes() const; 39 39 struct AssignedNodesOptions { 40 40 bool flatten; -
trunk/Source/WebCore/page/FocusController.cpp
r265228 r266212 181 181 if (m_slotKind == SlotKind::Assigned) { 182 182 ASSERT(assigneNodes); 183 return assigneNodes->first() ;183 return assigneNodes->first().get(); 184 184 } 185 185 ASSERT(m_slotKind == SlotKind::Fallback); … … 196 196 if (m_slotKind == SlotKind::Assigned) { 197 197 ASSERT(assigneNodes); 198 return assigneNodes->last() ;198 return assigneNodes->last().get(); 199 199 } 200 200 ASSERT(m_slotKind == SlotKind::Fallback);
Note: See TracChangeset
for help on using the changeset viewer.