Changeset 235830 in webkit
- Timestamp:
- Sep 8, 2018, 1:19:22 PM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
-
ChangeLog (modified) (1 diff)
-
dom/Document.cpp (modified) (7 diffs)
-
dom/Document.h (modified) (3 diffs)
-
dom/Element.cpp (modified) (1 diff)
-
loader/FrameLoader.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r235829 r235830 1 2018-09-08 Simon Fraser <simon.fraser@apple.com> 2 3 Clean up code related to Document node removal 4 https://bugs.webkit.org/show_bug.cgi?id=189452 5 6 Reviewed by Wenson Hsieh. 7 8 Replace the "amongChildrenOnly" boolean argument with an enum for clarity. 9 10 Rename the remove*OfSubtree functions, because that naming is very unclear. 11 Instead, use adjust*OnNodeRemoval which better describes what the code does. 12 13 * dom/Document.cpp: 14 (WebCore::isNodeInSubtree): 15 (WebCore::Document::adjustFocusedNodeOnNodeRemoval): 16 (WebCore::Document::nodeChildrenWillBeRemoved): 17 (WebCore::Document::nodeWillBeRemoved): 18 (WebCore::Document::adjustFocusNavigationNodeOnNodeRemoval): 19 (WebCore::Document::adjustFullScreenElementOnNodeRemoval): 20 (WebCore::Document::removeFocusedNodeOfSubtree): Deleted. 21 (WebCore::Document::removeFocusNavigationNodeOfSubtree): Deleted. 22 (WebCore::Document::removeFullScreenElementOfSubtree): Deleted. 23 * dom/Document.h: 24 * dom/Element.cpp: 25 (WebCore::Element::removeShadowRoot): 26 * loader/FrameLoader.cpp: 27 (WebCore::FrameLoader::clear): 28 1 29 2018-09-08 Yusuke Suzuki <yusukesuzuki@slowstart.org> 2 30 -
trunk/Source/WebCore/dom/Document.cpp
r235806 r235830 3825 3825 } 3826 3826 3827 static bool isNodeInSubtree(Node& node, Node& container, bool amongChildrenOnly)3828 { 3829 if ( amongChildrenOnly)3827 static bool isNodeInSubtree(Node& node, Node& container, Document::NodeRemoval nodeRemoval) 3828 { 3829 if (nodeRemoval == Document::NodeRemoval::ChildrenOfNode) 3830 3830 return node.isDescendantOf(container); 3831 else 3832 return &node == &container || node.isDescendantOf(container);3833 } 3834 3835 void Document:: removeFocusedNodeOfSubtree(Node& node, bool amongChildrenOnly)3831 3832 return &node == &container || node.isDescendantOf(container); 3833 } 3834 3835 void Document::adjustFocusedNodeOnNodeRemoval(Node& node, NodeRemoval nodeRemoval) 3836 3836 { 3837 3837 if (!m_focusedElement || pageCacheState() != NotInPageCache) // If the document is in the page cache, then we don't need to clear out the focused node. … … 3841 3841 if (!focusedElement) 3842 3842 return; 3843 3844 if (isNodeInSubtree(*focusedElement, node, amongChildrenOnly)) {3843 3844 if (isNodeInSubtree(*focusedElement, node, nodeRemoval)) { 3845 3845 // FIXME: We should avoid synchronously updating the style inside setFocusedElement. 3846 3846 // FIXME: Object elements should avoid loading a frame synchronously in a post style recalc callback. … … 4202 4202 ASSERT(!ScriptDisallowedScope::InMainThread::isScriptAllowed()); 4203 4203 4204 removeFocusedNodeOfSubtree(container, true /* amongChildrenOnly */);4205 removeFocusNavigationNodeOfSubtree(container, true /* amongChildrenOnly */);4204 adjustFocusedNodeOnNodeRemoval(container, NodeRemoval::ChildrenOfNode); 4205 adjustFocusNavigationNodeOnNodeRemoval(container, NodeRemoval::ChildrenOfNode); 4206 4206 4207 4207 #if ENABLE(FULLSCREEN_API) 4208 removeFullScreenElementOfSubtree(container, true /* amongChildrenOnly */);4208 adjustFullScreenElementOnNodeRemoval(container, NodeRemoval::ChildrenOfNode); 4209 4209 #endif 4210 4210 … … 4235 4235 ASSERT(!ScriptDisallowedScope::InMainThread::isScriptAllowed()); 4236 4236 4237 removeFocusedNodeOfSubtree(node);4238 removeFocusNavigationNodeOfSubtree(node);4237 adjustFocusedNodeOnNodeRemoval(node); 4238 adjustFocusNavigationNodeOnNodeRemoval(node); 4239 4239 4240 4240 #if ENABLE(FULLSCREEN_API) 4241 removeFullScreenElementOfSubtree(node);4241 adjustFullScreenElementOnNodeRemoval(node); 4242 4242 #endif 4243 4243 … … 4263 4263 } 4264 4264 4265 void Document:: removeFocusNavigationNodeOfSubtree(Node& node, bool amongChildrenOnly)4265 void Document::adjustFocusNavigationNodeOnNodeRemoval(Node& node, NodeRemoval nodeRemoval) 4266 4266 { 4267 4267 if (!m_focusNavigationStartingNode) 4268 4268 return; 4269 4269 4270 if (isNodeInSubtree(*m_focusNavigationStartingNode, node, amongChildrenOnly)) {4271 m_focusNavigationStartingNode = amongChildrenOnly? &node : fallbackFocusNavigationStartingNodeAfterRemoval(node);4270 if (isNodeInSubtree(*m_focusNavigationStartingNode, node, nodeRemoval)) { 4271 m_focusNavigationStartingNode = (nodeRemoval == NodeRemoval::ChildrenOfNode) ? &node : fallbackFocusNavigationStartingNodeAfterRemoval(node); 4272 4272 m_focusNavigationStartingNodeIsRemoved = true; 4273 4273 } … … 6467 6467 } 6468 6468 6469 void Document:: removeFullScreenElementOfSubtree(Node& node, bool amongChildrenOnly)6469 void Document::adjustFullScreenElementOnNodeRemoval(Node& node, NodeRemoval nodeRemoval) 6470 6470 { 6471 6471 if (!m_fullScreenElement) … … 6473 6473 6474 6474 bool elementInSubtree = false; 6475 if ( amongChildrenOnly)6475 if (nodeRemoval == NodeRemoval::ChildrenOfNode) 6476 6476 elementInSubtree = m_fullScreenElement->isDescendantOf(node); 6477 6477 else -
trunk/Source/WebCore/dom/Document.h
r235806 r235830 758 758 Element* focusNavigationStartingNode(FocusDirection) const; 759 759 760 void removeFocusedNodeOfSubtree(Node&, bool amongChildrenOnly = false); 760 enum class NodeRemoval { Node, ChildrenOfNode }; 761 void adjustFocusedNodeOnNodeRemoval(Node&, NodeRemoval = NodeRemoval::Node); 762 void adjustFocusNavigationNodeOnNodeRemoval(Node&, NodeRemoval = NodeRemoval::Node); 763 761 764 void hoveredElementDidDetach(Element*); 762 765 void elementInActiveChainDidDetach(Element*); … … 803 806 // nodeWillBeRemoved is only safe when removing one node at a time. 804 807 void nodeWillBeRemoved(Node&); 805 void removeFocusNavigationNodeOfSubtree(Node&, bool amongChildrenOnly = false); 808 806 809 enum class AcceptChildOperation { Replace, InsertOrAdd }; 807 810 bool canAcceptChild(const Node& newChild, const Node* refChild, AcceptChildOperation) const; … … 1178 1181 bool fullScreenIsAllowedForElement(Element*) const; 1179 1182 void fullScreenElementRemoved(); 1180 void removeFullScreenElementOfSubtree(Node&, bool amongChildrenOnly = false); 1183 void adjustFullScreenElementOnNodeRemoval(Node&, NodeRemoval = NodeRemoval::Node); 1184 1181 1185 WEBCORE_EXPORT bool isAnimatingFullScreen() const; 1182 1186 WEBCORE_EXPORT void setAnimatingFullScreen(bool); -
trunk/Source/WebCore/dom/Element.cpp
r235806 r235830 2018 2018 2019 2019 InspectorInstrumentation::willPopShadowRoot(*this, *oldRoot); 2020 document(). removeFocusedNodeOfSubtree(*oldRoot);2020 document().adjustFocusedNodeOnNodeRemoval(*oldRoot); 2021 2021 2022 2022 ASSERT(!oldRoot->renderer()); -
trunk/Source/WebCore/loader/FrameLoader.cpp
r235562 r235830 632 632 m_frame.document()->prepareForDestruction(); 633 633 if (hadLivingRenderTree) 634 m_frame.document()-> removeFocusedNodeOfSubtree(*m_frame.document());634 m_frame.document()->adjustFocusedNodeOnNodeRemoval(*m_frame.document()); 635 635 } 636 636
Note:
See TracChangeset
for help on using the changeset viewer.