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