Changeset 235830 in webkit


Ignore:
Timestamp:
Sep 8, 2018, 1:19:22 PM (7 years ago)
Author:
Simon Fraser
Message:

Clean up code related to Document node removal
https://bugs.webkit.org/show_bug.cgi?id=189452

Reviewed by Wenson Hsieh.

Replace the "amongChildrenOnly" boolean argument with an enum for clarity.

Rename the remove*OfSubtree functions, because that naming is very unclear.
Instead, use adjust*OnNodeRemoval which better describes what the code does.

  • dom/Document.cpp:

(WebCore::isNodeInSubtree):
(WebCore::Document::adjustFocusedNodeOnNodeRemoval):
(WebCore::Document::nodeChildrenWillBeRemoved):
(WebCore::Document::nodeWillBeRemoved):
(WebCore::Document::adjustFocusNavigationNodeOnNodeRemoval):
(WebCore::Document::adjustFullScreenElementOnNodeRemoval):
(WebCore::Document::removeFocusedNodeOfSubtree): Deleted.
(WebCore::Document::removeFocusNavigationNodeOfSubtree): Deleted.
(WebCore::Document::removeFullScreenElementOfSubtree): Deleted.

  • dom/Document.h:
  • dom/Element.cpp:

(WebCore::Element::removeShadowRoot):

  • loader/FrameLoader.cpp:

(WebCore::FrameLoader::clear):

Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r235829 r235830  
     12018-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
    1292018-09-08  Yusuke Suzuki  <yusukesuzuki@slowstart.org>
    230
  • trunk/Source/WebCore/dom/Document.cpp

    r235806 r235830  
    38253825}
    38263826
    3827 static bool isNodeInSubtree(Node& node, Node& container, bool amongChildrenOnly)
    3828 {
    3829     if (amongChildrenOnly)
     3827static bool isNodeInSubtree(Node& node, Node& container, Document::NodeRemoval nodeRemoval)
     3828{
     3829    if (nodeRemoval == Document::NodeRemoval::ChildrenOfNode)
    38303830        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
     3835void Document::adjustFocusedNodeOnNodeRemoval(Node& node, NodeRemoval nodeRemoval)
    38363836{
    38373837    if (!m_focusedElement || pageCacheState() != NotInPageCache) // If the document is in the page cache, then we don't need to clear out the focused node.
     
    38413841    if (!focusedElement)
    38423842        return;
    3843    
    3844     if (isNodeInSubtree(*focusedElement, node, amongChildrenOnly)) {
     3843
     3844    if (isNodeInSubtree(*focusedElement, node, nodeRemoval)) {
    38453845        // FIXME: We should avoid synchronously updating the style inside setFocusedElement.
    38463846        // FIXME: Object elements should avoid loading a frame synchronously in a post style recalc callback.
     
    42024202    ASSERT(!ScriptDisallowedScope::InMainThread::isScriptAllowed());
    42034203
    4204     removeFocusedNodeOfSubtree(container, true /* amongChildrenOnly */);
    4205     removeFocusNavigationNodeOfSubtree(container, true /* amongChildrenOnly */);
     4204    adjustFocusedNodeOnNodeRemoval(container, NodeRemoval::ChildrenOfNode);
     4205    adjustFocusNavigationNodeOnNodeRemoval(container, NodeRemoval::ChildrenOfNode);
    42064206
    42074207#if ENABLE(FULLSCREEN_API)
    4208     removeFullScreenElementOfSubtree(container, true /* amongChildrenOnly */);
     4208    adjustFullScreenElementOnNodeRemoval(container, NodeRemoval::ChildrenOfNode);
    42094209#endif
    42104210
     
    42354235    ASSERT(!ScriptDisallowedScope::InMainThread::isScriptAllowed());
    42364236
    4237     removeFocusedNodeOfSubtree(node);
    4238     removeFocusNavigationNodeOfSubtree(node);
     4237    adjustFocusedNodeOnNodeRemoval(node);
     4238    adjustFocusNavigationNodeOnNodeRemoval(node);
    42394239
    42404240#if ENABLE(FULLSCREEN_API)
    4241     removeFullScreenElementOfSubtree(node);
     4241    adjustFullScreenElementOnNodeRemoval(node);
    42424242#endif
    42434243
     
    42634263}
    42644264
    4265 void Document::removeFocusNavigationNodeOfSubtree(Node& node, bool amongChildrenOnly)
     4265void Document::adjustFocusNavigationNodeOnNodeRemoval(Node& node, NodeRemoval nodeRemoval)
    42664266{
    42674267    if (!m_focusNavigationStartingNode)
    42684268        return;
    42694269
    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);
    42724272        m_focusNavigationStartingNodeIsRemoved = true;
    42734273    }
     
    64676467}
    64686468
    6469 void Document::removeFullScreenElementOfSubtree(Node& node, bool amongChildrenOnly)
     6469void Document::adjustFullScreenElementOnNodeRemoval(Node& node, NodeRemoval nodeRemoval)
    64706470{
    64716471    if (!m_fullScreenElement)
     
    64736473   
    64746474    bool elementInSubtree = false;
    6475     if (amongChildrenOnly)
     6475    if (nodeRemoval == NodeRemoval::ChildrenOfNode)
    64766476        elementInSubtree = m_fullScreenElement->isDescendantOf(node);
    64776477    else
  • trunk/Source/WebCore/dom/Document.h

    r235806 r235830  
    758758    Element* focusNavigationStartingNode(FocusDirection) const;
    759759
    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
    761764    void hoveredElementDidDetach(Element*);
    762765    void elementInActiveChainDidDetach(Element*);
     
    803806    // nodeWillBeRemoved is only safe when removing one node at a time.
    804807    void nodeWillBeRemoved(Node&);
    805     void removeFocusNavigationNodeOfSubtree(Node&, bool amongChildrenOnly = false);
     808
    806809    enum class AcceptChildOperation { Replace, InsertOrAdd };
    807810    bool canAcceptChild(const Node& newChild, const Node* refChild, AcceptChildOperation) const;
     
    11781181    bool fullScreenIsAllowedForElement(Element*) const;
    11791182    void fullScreenElementRemoved();
    1180     void removeFullScreenElementOfSubtree(Node&, bool amongChildrenOnly = false);
     1183    void adjustFullScreenElementOnNodeRemoval(Node&, NodeRemoval = NodeRemoval::Node);
     1184
    11811185    WEBCORE_EXPORT bool isAnimatingFullScreen() const;
    11821186    WEBCORE_EXPORT void setAnimatingFullScreen(bool);
  • trunk/Source/WebCore/dom/Element.cpp

    r235806 r235830  
    20182018
    20192019    InspectorInstrumentation::willPopShadowRoot(*this, *oldRoot);
    2020     document().removeFocusedNodeOfSubtree(*oldRoot);
     2020    document().adjustFocusedNodeOnNodeRemoval(*oldRoot);
    20212021
    20222022    ASSERT(!oldRoot->renderer());
  • trunk/Source/WebCore/loader/FrameLoader.cpp

    r235562 r235830  
    632632        m_frame.document()->prepareForDestruction();
    633633        if (hadLivingRenderTree)
    634             m_frame.document()->removeFocusedNodeOfSubtree(*m_frame.document());
     634            m_frame.document()->adjustFocusedNodeOnNodeRemoval(*m_frame.document());
    635635    }
    636636
Note: See TracChangeset for help on using the changeset viewer.