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