Title: [210524] trunk
Revision
210524
Author
[email protected]
Date
2017-01-09 14:35:27 -0800 (Mon, 09 Jan 2017)

Log Message

Unindenting text inside a blockquote can result in the text being reordered
https://bugs.webkit.org/show_bug.cgi?id=166813

Reviewed by Darin Adler and Ryosuke Niwa.

Test: editing/execCommand/unindent-nested-blockquote-with-inner-div.html

* editing/IndentOutdentCommand.cpp:
(WebCore::IndentOutdentCommand::outdentParagraph):
Start splitting the tree at the beginning of the content being unindented,
not at the containing block flow element, which could e.g. contain other
elements (or even other blockquotes).

* editing/execCommand/unindent-nested-blockquote-with-inner-div-expected.txt: Added.
* editing/execCommand/unindent-nested-blockquote-with-inner-div.html: Added.

Old test output:
second<br><blockquote><div><blockquote>first</blockquote><br></div></blockquote>
New test output:
<blockquote><div><blockquote>first</blockquote><br></div></blockquote>second

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (210523 => 210524)


--- trunk/LayoutTests/ChangeLog	2017-01-09 22:28:43 UTC (rev 210523)
+++ trunk/LayoutTests/ChangeLog	2017-01-09 22:35:27 UTC (rev 210524)
@@ -1,3 +1,18 @@
+2017-01-09  Tim Horton  <[email protected]>
+
+        Unindenting text inside a blockquote can result in the text being reordered
+        https://bugs.webkit.org/show_bug.cgi?id=166813
+
+        Reviewed by Darin Adler and Ryosuke Niwa.
+
+        * editing/execCommand/unindent-nested-blockquote-with-inner-div-expected.txt: Added.
+        * editing/execCommand/unindent-nested-blockquote-with-inner-div.html: Added.
+
+        Old test output:
+        second<br><blockquote><div><blockquote>first</blockquote><br></div></blockquote>
+        New test output:
+        <blockquote><div><blockquote>first</blockquote><br></div></blockquote>second
+
 2017-01-09  Yusuke Suzuki  <[email protected]>
 
         [JSC] Prototype dynamic-import

Added: trunk/LayoutTests/editing/execCommand/unindent-nested-blockquote-with-inner-div-expected.txt (0 => 210524)


--- trunk/LayoutTests/editing/execCommand/unindent-nested-blockquote-with-inner-div-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/editing/execCommand/unindent-nested-blockquote-with-inner-div-expected.txt	2017-01-09 22:35:27 UTC (rev 210524)
@@ -0,0 +1,94 @@
+EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > BODY > HTML > #document to 1 of DIV > BODY > HTML > #document
+EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of BLOCKQUOTE > DIV > BLOCKQUOTE > DIV > BODY > HTML > #document to 0 of BLOCKQUOTE > DIV > BLOCKQUOTE > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 6 of #text > DIV > BODY > HTML > #document to 6 of #text > DIV > BODY > HTML > #document toDOMRange:range from 6 of #text > DIV > BODY > HTML > #document to 6 of #text > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
+EDITING DELEGATE: shouldEndEditingInDOMRange:range from 0 of DIV > BODY > HTML > #document to 2 of DIV > BODY > HTML > #document
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidEndEditing:WebViewDidEndEditingNotification
+EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > BODY > HTML > #document to 1 of DIV > BODY > HTML > #document
+EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of BLOCKQUOTE > DIV > BLOCKQUOTE > DIV > BODY > HTML > #document to 0 of BLOCKQUOTE > DIV > BLOCKQUOTE > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 6 of #text > DIV > BODY > HTML > #document to 6 of #text > DIV > BODY > HTML > #document toDOMRange:range from 6 of #text > DIV > BODY > HTML > #document to 6 of #text > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
+EDITING DELEGATE: shouldEndEditingInDOMRange:range from 0 of DIV > BODY > HTML > #document to 2 of DIV > BODY > HTML > #document
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidEndEditing:WebViewDidEndEditingNotification
+EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > BODY > HTML > #document to 1 of DIV > BODY > HTML > #document
+EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of BLOCKQUOTE > DIV > BLOCKQUOTE > DIV > BODY > HTML > #document to 0 of BLOCKQUOTE > DIV > BLOCKQUOTE > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 6 of #text > B > DIV > BODY > HTML > #document to 6 of #text > B > DIV > BODY > HTML > #document toDOMRange:range from 6 of #text > B > DIV > BODY > HTML > #document to 6 of #text > B > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
+EDITING DELEGATE: webViewDidEndEditing:WebViewDidEndEditingNotification
+https://bugs.webkit.org/show_bug.cgi?id=166813 Unindenting text inside a blockquote can result in the text being reordered
+
+before outdent:
+| <blockquote>
+|   <div>
+|     <blockquote>
+|       "first"
+|     <br>
+|     "second<#selection-caret>"
+|     <span>
+|       id="select1"
+|     <br>
+
+after outdent:
+| <blockquote>
+|   <div>
+|     <blockquote>
+|       "first"
+|     <br>
+| "second<#selection-caret>"
+
+before outdent (second inside <div>):
+| <blockquote>
+|   <div>
+|     <blockquote>
+|       "first"
+|     <br>
+|     <div>
+|       "second<#selection-caret>"
+|       <span>
+|         id="select2"
+|       <br>
+
+after outdent:
+| <blockquote>
+|   <div>
+|     <blockquote>
+|       "first"
+|     <br>
+| "second<#selection-caret>"
+
+before outdent (second inside <b>):
+| <blockquote>
+|   <div>
+|     <blockquote>
+|       "first"
+|     <br>
+|     <b>
+|       "second<#selection-caret>"
+|       <span>
+|         id="select3"
+|       <br>
+
+after outdent:
+| <blockquote>
+|   <div>
+|     <blockquote>
+|       "first"
+|     <br>
+| <b>
+|   "second<#selection-caret>"

Added: trunk/LayoutTests/editing/execCommand/unindent-nested-blockquote-with-inner-div.html (0 => 210524)


--- trunk/LayoutTests/editing/execCommand/unindent-nested-blockquote-with-inner-div.html	                        (rev 0)
+++ trunk/LayoutTests/editing/execCommand/unindent-nested-blockquote-with-inner-div.html	2017-01-09 22:35:27 UTC (rev 210524)
@@ -0,0 +1,45 @@
+<html>
+<head>
+<script src=""
+<script src=""
+<script>
+Markup.waitUntilDone()
+
+function editingTest() {
+    Markup.description('https://bugs.webkit.org/show_bug.cgi?id=166813 Unindenting text inside a blockquote can result in the text being reordered');
+
+    document.getElementById("edit1").focus();
+    window.getSelection().setPosition(document.getElementById("select1"), 0);
+    Markup.dump('edit1', 'before outdent');
+    document.execCommand("Outdent");
+    Markup.dump('edit1', 'after outdent');
+
+    document.getElementById("edit2").focus();
+    window.getSelection().setPosition(document.getElementById("select2"), 0);
+    Markup.dump('edit2', 'before outdent (second inside <div>)');
+    document.execCommand("Outdent");
+    Markup.dump('edit2', 'after outdent');
+
+    document.getElementById("edit3").focus();
+    window.getSelection().setPosition(document.getElementById("select3"), 0);
+    Markup.dump('edit3', 'before outdent (second inside <b>)');
+    document.execCommand("Outdent");    
+    Markup.dump('edit3', 'after outdent');
+
+    Markup.notifyDone();
+}
+
+
+</script>
+</head>
+<body _onload_="runEditingTest()">
+<div id="description1">This tests outdenting text adjacent to an inner blockquote, inside a blockquote with an inner div.</div>
+<div id="edit1" contentEditable><blockquote><div><blockquote>first</blockquote><br/>second<span id="select1"></span><br/></div></blockquote></div>
+
+<div id="description2">This tests outdenting text inside a div adjacent to an inner blockquote, inside a blockquote with an inner div.</div>
+<div id="edit2" contentEditable><blockquote><div><blockquote>first</blockquote><br/><div>second<span id="select2"></span><br/></div></div></blockquote></div>
+
+<div id="description3">This tests outdenting text inside an inline adjacent to an inner blockquote, inside a blockquote with an inner div.</div>
+<div id="edit3" contentEditable><blockquote><div><blockquote>first</blockquote><br/><b>second<span id="select3"></span><br/></b></div></blockquote></div>
+</body>
+</html>
\ No newline at end of file

Modified: trunk/Source/WebCore/ChangeLog (210523 => 210524)


--- trunk/Source/WebCore/ChangeLog	2017-01-09 22:28:43 UTC (rev 210523)
+++ trunk/Source/WebCore/ChangeLog	2017-01-09 22:35:27 UTC (rev 210524)
@@ -1,3 +1,18 @@
+2017-01-09  Tim Horton  <[email protected]>
+
+        Unindenting text inside a blockquote can result in the text being reordered
+        https://bugs.webkit.org/show_bug.cgi?id=166813
+
+        Reviewed by Darin Adler and Ryosuke Niwa.
+
+        Test: editing/execCommand/unindent-nested-blockquote-with-inner-div.html
+
+        * editing/IndentOutdentCommand.cpp:
+        (WebCore::IndentOutdentCommand::outdentParagraph):
+        Start splitting the tree at the beginning of the content being unindented,
+        not at the containing block flow element, which could e.g. contain other
+        elements (or even other blockquotes).
+
 2017-01-09  Yusuke Suzuki  <[email protected]>
 
         [JSC] Prototype dynamic-import

Modified: trunk/Source/WebCore/editing/IndentOutdentCommand.cpp (210523 => 210524)


--- trunk/Source/WebCore/editing/IndentOutdentCommand.cpp	2017-01-09 22:28:43 UTC (rev 210523)
+++ trunk/Source/WebCore/editing/IndentOutdentCommand.cpp	2017-01-09 22:35:27 UTC (rev 210524)
@@ -174,10 +174,12 @@
 
         return;
     }
-    auto* enclosingBlockFlow = enclosingBlock(visibleStartOfParagraph.deepEquivalent().deprecatedNode());
+
+    auto* startOfParagraphNode = visibleStartOfParagraph.deepEquivalent().deprecatedNode();
+    auto* enclosingBlockFlow = enclosingBlock(startOfParagraphNode);
     RefPtr<Node> splitBlockquoteNode = enclosingNode;
     if (enclosingBlockFlow != enclosingNode)
-        splitBlockquoteNode = splitTreeToNode(enclosingBlockFlow, enclosingNode, true);
+        splitBlockquoteNode = splitTreeToNode(startOfParagraphNode, enclosingNode, true);
     else {
         // We split the blockquote at where we start outdenting.
         auto* highestInlineNode = highestEnclosingNodeOfType(visibleStartOfParagraph.deepEquivalent(), isInline, CannotCrossEditingBoundary, enclosingBlockFlow);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to