Title: [277647] trunk/Source/WebCore
Revision
277647
Author
commit-qu...@webkit.org
Date
2021-05-18 03:01:26 -0700 (Tue, 18 May 2021)

Log Message

Use RefPtr for local ref counted objects of FrameSelection::setSelectionWithoutUpdatingAppearance
https://bugs.webkit.org/show_bug.cgi?id=225908

Patch by Frederic Wang <fw...@igalia.com> on 2021-05-18
Reviewed by Ryosuke Niwa.

A previous patch modified setSelectionWithoutUpdatingAppearance to take into account one
possible DOM mutation after focus change. This is a follow-up patch applying recommendation
from https://lists.webkit.org/pipermail/webkit-dev/2020-September/031386.html event if it is
not obvious whether any of the current uses is dangerous.

No new tests.

* editing/FrameSelection.cpp:
(WebCore::FrameSelection::selectFrameElementInParentIfFullySelected): Use RefPtr for the
following variables:
- parent: used in the non-trivial setFocusedFrame function (where it is however immediately
stored in a RefPtr).
- ownerElement: used in the non-trivial function computeNodeIndex (which however only
performs simple tree navigation).
- ownerElementParent: used as a this of the non-trivial function hasEditableStyle (which
however does not update style when computing editability).

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (277646 => 277647)


--- trunk/Source/WebCore/ChangeLog	2021-05-18 08:44:51 UTC (rev 277646)
+++ trunk/Source/WebCore/ChangeLog	2021-05-18 10:01:26 UTC (rev 277647)
@@ -1,3 +1,27 @@
+2021-05-18  Frederic Wang  <fw...@igalia.com>
+
+        Use RefPtr for local ref counted objects of FrameSelection::setSelectionWithoutUpdatingAppearance
+        https://bugs.webkit.org/show_bug.cgi?id=225908
+
+        Reviewed by Ryosuke Niwa.
+
+        A previous patch modified setSelectionWithoutUpdatingAppearance to take into account one
+        possible DOM mutation after focus change. This is a follow-up patch applying recommendation
+        from https://lists.webkit.org/pipermail/webkit-dev/2020-September/031386.html event if it is
+        not obvious whether any of the current uses is dangerous.
+
+        No new tests.
+
+        * editing/FrameSelection.cpp:
+        (WebCore::FrameSelection::selectFrameElementInParentIfFullySelected): Use RefPtr for the
+        following variables:
+        - parent: used in the non-trivial setFocusedFrame function (where it is however immediately
+        stored in a RefPtr).
+        - ownerElement: used in the non-trivial function computeNodeIndex (which however only
+        performs simple tree navigation).
+        - ownerElementParent: used as a this of the non-trivial function hasEditableStyle (which
+        however does not update style when computing editability).
+
 2021-05-18  Ryosuke Niwa  <rn...@webkit.org>
 
         ASSERTION FAILED: isReactionAllowed() in enqueueDisconnectedCallbackIfNeeded during document teardown

Modified: trunk/Source/WebCore/editing/FrameSelection.cpp (277646 => 277647)


--- trunk/Source/WebCore/editing/FrameSelection.cpp	2021-05-18 08:44:51 UTC (rev 277646)
+++ trunk/Source/WebCore/editing/FrameSelection.cpp	2021-05-18 10:01:26 UTC (rev 277647)
@@ -1922,7 +1922,7 @@
 void FrameSelection::selectFrameElementInParentIfFullySelected()
 {
     // Find the parent frame; if there is none, then we have nothing to do.
-    Frame* parent = m_document->frame()->tree().parent();
+    auto parent = makeRefPtr(m_document->frame()->tree().parent());
     if (!parent)
         return;
     Page* page = m_document->page();
@@ -1938,10 +1938,10 @@
         return;
 
     // Get to the <iframe> or <frame> (or even <object>) element in the parent frame.
-    Element* ownerElement = m_document->ownerElement();
+    auto ownerElement = makeRefPtr(m_document->ownerElement());
     if (!ownerElement)
         return;
-    ContainerNode* ownerElementParent = ownerElement->parentNode();
+    auto ownerElementParent = makeRefPtr(ownerElement->parentNode());
     if (!ownerElementParent)
         return;
         
@@ -1951,13 +1951,13 @@
 
     // Create compute positions before and after the element.
     unsigned ownerElementNodeIndex = ownerElement->computeNodeIndex();
-    VisiblePosition beforeOwnerElement(VisiblePosition(Position(ownerElementParent, ownerElementNodeIndex, Position::PositionIsOffsetInAnchor)));
-    VisiblePosition afterOwnerElement(VisiblePosition(Position(ownerElementParent, ownerElementNodeIndex + 1, Position::PositionIsOffsetInAnchor), Affinity::Upstream));
+    VisiblePosition beforeOwnerElement(VisiblePosition(Position(ownerElementParent.get(), ownerElementNodeIndex, Position::PositionIsOffsetInAnchor)));
+    VisiblePosition afterOwnerElement(VisiblePosition(Position(ownerElementParent.get(), ownerElementNodeIndex + 1, Position::PositionIsOffsetInAnchor), Affinity::Upstream));
 
     // Focus on the parent frame, and then select from before this element to after.
     VisibleSelection newSelection(beforeOwnerElement, afterOwnerElement);
     if (parent->selection().shouldChangeSelection(newSelection)) {
-        page->focusController().setFocusedFrame(parent);
+        page->focusController().setFocusedFrame(parent.get());
         // Previous focus can trigger DOM events, ensure the selection did not become orphan.
         if (newSelection.isOrphan())
             parent->selection().clear();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to