[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [tor-browser] 59/73: Bug 1785801 - Make `RangeUpdater::SelAdjJoinNodes` take the ex-offset of right node. r=m_kato, a=RyanVM



This is an automated email from the git hooks/post-receive script.

richard pushed a commit to branch geckoview-102.3.0esr-12.0-1
in repository tor-browser.

commit d902453efafea1b7d63ad3366d8db1c6775f365c
Author: Masayuki Nakano <masayuki@xxxxxxxxxxxx>
AuthorDate: Fri Sep 2 06:29:36 2022 +0000

    Bug 1785801 - Make `RangeUpdater::SelAdjJoinNodes` take the ex-offset of right node. r=m_kato, a=RyanVM
    
    In bug 1739524, I misunderstood the meaning of `aOffset` of `SelAdjJoinNodes`.
    
    After joining 2 nodes, and a point points right node which will have ex-left
    node content, the point needs to point ex-start of the right node to keep
    next insertion point as-is.  Therefore, it's not useful with new join nodes
    direction, it needs to know the ex-offset of the right node.
    
    This is a backport patch of https://phabricator.services.mozilla.com/D155438 for
    ESR 102.
    
    Differential Revision: https://phabricator.services.mozilla.com/D156271
---
 editor/libeditor/HTMLEditor.cpp                       |  8 ++++----
 editor/libeditor/SelectionState.cpp                   | 14 +++++++-------
 editor/libeditor/SelectionState.h                     |  6 +++---
 testing/web-platform/tests/editing/data/inserttext.js |  6 ++++++
 4 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/editor/libeditor/HTMLEditor.cpp b/editor/libeditor/HTMLEditor.cpp
index 822203e3c9773..d3a277633e45b 100644
--- a/editor/libeditor/HTMLEditor.cpp
+++ b/editor/libeditor/HTMLEditor.cpp
@@ -4939,8 +4939,8 @@ nsresult HTMLEditor::DoJoinNodes(nsIContent& aContentToKeep,
   MOZ_ASSERT(IsEditActionDataAvailable());
 
   const uint32_t removingContentLength = aContentToRemove.Length();
-  const Maybe<uint32_t> removingContentIndex =
-      aContentToRemove.ComputeIndexInParentNode();
+  const Maybe<uint32_t> keepingContentExIndex =
+      aContentToKeep.ComputeIndexInParentNode();
 
   // Remember all selection points.
   // XXX Do we need to restore all types of selections by ourselves?  Normal
@@ -5055,11 +5055,11 @@ nsresult HTMLEditor::DoJoinNodes(nsIContent& aContentToKeep,
     }
   }
 
-  if (MOZ_LIKELY(removingContentIndex.isSome())) {
+  if (MOZ_LIKELY(keepingContentExIndex.isSome())) {
     DebugOnly<nsresult> rvIgnored = RangeUpdaterRef().SelAdjJoinNodes(
         EditorRawDOMPoint(&aContentToKeep, std::min(removingContentLength,
                                                     aContentToKeep.Length())),
-        aContentToRemove, *removingContentIndex,
+        aContentToRemove, *keepingContentExIndex,
         JoinNodesDirection::LeftNodeIntoRightNode);
     NS_WARNING_ASSERTION(NS_SUCCEEDED(rvIgnored),
                          "RangeUpdater::SelAdjJoinNodes() failed, but ignored");
diff --git a/editor/libeditor/SelectionState.cpp b/editor/libeditor/SelectionState.cpp
index 42179428422c0..751cd21975381 100644
--- a/editor/libeditor/SelectionState.cpp
+++ b/editor/libeditor/SelectionState.cpp
@@ -327,7 +327,7 @@ nsresult RangeUpdater::SelAdjSplitNode(nsIContent& aOriginalContent,
 
 nsresult RangeUpdater::SelAdjJoinNodes(
     const EditorRawDOMPoint& aStartOfRightContent,
-    const nsIContent& aRemovedContent, uint32_t aOffsetOfRemovedContent,
+    const nsIContent& aRemovedContent, uint32_t aOffsetOfJoinedContent,
     JoinNodesDirection aJoinNodesDirection) {
   MOZ_ASSERT(aStartOfRightContent.IsSetAndValid());
 
@@ -343,14 +343,14 @@ nsresult RangeUpdater::SelAdjJoinNodes(
   auto AdjustDOMPoint = [&](nsCOMPtr<nsINode>& aContainer,
                             uint32_t& aOffset) -> void {
     if (aContainer == aStartOfRightContent.GetContainerParent()) {
-      // If the point is in common parent of joined content nodes and the
-      // point is after the removed point, decrease the offset.
-      if (aOffset > aOffsetOfRemovedContent) {
+      // If the point is in common parent of joined content nodes and it pointed
+      // after the right content node, decrease the offset.
+      if (aOffset > aOffsetOfJoinedContent) {
         aOffset--;
       }
-      // If it pointed the removed content node, move to start of right content
-      // which was moved from the removed content.
-      else if (aOffset == aOffsetOfRemovedContent) {
+      // If it pointed the right content node, adjust it to point ex-first
+      // content of the right node.
+      else if (aOffset == aOffsetOfJoinedContent) {
         aContainer = aStartOfRightContent.GetContainer();
         aOffset = aStartOfRightContent.Offset();
       }
diff --git a/editor/libeditor/SelectionState.h b/editor/libeditor/SelectionState.h
index 6d71d70d23b6b..b0ffdb42a10f6 100644
--- a/editor/libeditor/SelectionState.h
+++ b/editor/libeditor/SelectionState.h
@@ -231,12 +231,12 @@ class MOZ_STACK_CLASS RangeUpdater final {
    *                                in aRemovedContent.  And this points where
    *                                the joined position.
    * @param aRemovedContent         The removed content.
-   * @param aOffsetOfRemovedContent The offset which aRemovedContent was in
-   *                                its ex-parent.
+   * @param aOffsetOfJoinedContent  The offset which the container of
+   *                                aStartOfRightContent was in its parent.
    */
   nsresult SelAdjJoinNodes(const EditorRawDOMPoint& aStartOfRightContent,
                            const nsIContent& aRemovedContent,
-                           uint32_t aOffsetOfRemovedContent,
+                           uint32_t aOffsetOfJoinedContent,
                            JoinNodesDirection aJoinNodesDirection);
   void SelAdjInsertText(const dom::Text& aTextNode, uint32_t aOffset,
                         uint32_t aInsertedLength);
diff --git a/testing/web-platform/tests/editing/data/inserttext.js b/testing/web-platform/tests/editing/data/inserttext.js
index 59057d03c9136..ca90b9ae9cadc 100644
--- a/testing/web-platform/tests/editing/data/inserttext.js
+++ b/testing/web-platform/tests/editing/data/inserttext.js
@@ -1374,4 +1374,10 @@ var browserTests = [
     "<div style=\"white-space:pre-wrap\">a<br><span style=\"padding:1px\"></span><p>bc</p></div>",
     [true],
     {"inserttext":[false,false,"",false,false,""]}],
+// https://bugzilla.mozilla.org/show_bug.cgi?id=1785801
+["<div>abc{</div><div>}efg</div>",
+    [["inserttext", "d"]],
+    "<div>abcdefg</div>",
+    [true],
+    {"inserttext":[false,false,"",false,false,""]}],
 ]

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits