Title: [179921] trunk
- Revision
- 179921
- Author
- [email protected]
- Date
- 2015-02-11 00:51:55 -0800 (Wed, 11 Feb 2015)
Log Message
Div having contentEditable and display:flex cannot be edited if it is empty.
https://bugs.webkit.org/show_bug.cgi?id=141218
Reviewed by Ryosuke Niwa.
Source/WebCore:
RenderFlexibleBox should be treated as a candidate for visible position. Visible selection
in an editable area is recalculated whenever an inner value of div is changed. If the inner value
is empty, the visible selection recalculated with DeleteSelectionCommand::m_endingPostion
is not correct. Because RenderBlockFlow is only considered but not RenderFlexibleBox
in Position::isCandidate so that a calculated ending VisiblePosition for an editable div
having "display : flex" goes weird and VisibleSelection is empty accordingly.
Test: fast/events/key-events-in-editable-flexbox.html
* dom/Position.cpp:
(WebCore::Position::isCandidate):
LayoutTests:
This tests if an editable flexbox can be reedited after erasing all texts in it.
* fast/events/key-events-in-editable-flexbox-expected.txt: Added.
* fast/events/key-events-in-editable-flexbox.html: Added.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (179920 => 179921)
--- trunk/LayoutTests/ChangeLog 2015-02-11 08:36:22 UTC (rev 179920)
+++ trunk/LayoutTests/ChangeLog 2015-02-11 08:51:55 UTC (rev 179921)
@@ -1,3 +1,15 @@
+2015-02-11 ChangSeok Oh <[email protected]>
+
+ Div having contentEditable and display:flex cannot be edited if it is empty.
+ https://bugs.webkit.org/show_bug.cgi?id=141218
+
+ Reviewed by Ryosuke Niwa.
+
+ This tests if an editable flexbox can be reedited after erasing all texts in it.
+
+ * fast/events/key-events-in-editable-flexbox-expected.txt: Added.
+ * fast/events/key-events-in-editable-flexbox.html: Added.
+
2015-02-11 Dana Burkart <[email protected]>
http/tests/cache/disk-cache-validation.html generates a lot of Perl errors
Added: trunk/LayoutTests/fast/events/key-events-in-editable-flexbox-expected.txt (0 => 179921)
--- trunk/LayoutTests/fast/events/key-events-in-editable-flexbox-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/events/key-events-in-editable-flexbox-expected.txt 2015-02-11 08:51:55 UTC (rev 179921)
@@ -0,0 +1,7 @@
+PASS targetDiv.innerText is "TEST"
+PASS targetDiv.innerText is ""
+PASS targetDiv.innerText is "TEST"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+TEST
Added: trunk/LayoutTests/fast/events/key-events-in-editable-flexbox.html (0 => 179921)
--- trunk/LayoutTests/fast/events/key-events-in-editable-flexbox.html (rev 0)
+++ trunk/LayoutTests/fast/events/key-events-in-editable-flexbox.html 2015-02-11 08:51:55 UTC (rev 179921)
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<style>
+ #target {
+ display: flex;
+ display: -webkit-flex;
+ }
+</style>
+<script>
+ var targetDiv;
+ function test()
+ {
+ targetDiv = document.getElementById('target');
+ targetDiv.focus();
+
+ // Move cursor to the end of line.
+ getSelection().modify('move', 'forward', 'lineboundary');
+
+ document.execCommand("insertText", false, "EST");
+ shouldBeEqualToString("targetDiv.innerText", "TEST");
+
+ document.execCommand("delete");
+ document.execCommand("delete");
+ document.execCommand("delete");
+ document.execCommand("delete");
+ document.execCommand("delete"); // Remove '\n'
+ shouldBeEmptyString("targetDiv.innerText");
+
+ document.execCommand("insertText", false, "TEST");
+ shouldBeEqualToString("targetDiv.innerText", "TEST");
+ }
+</script>
+</head>
+<body _onload_="test()">
+<div id="target" contentEditable>T</div>
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (179920 => 179921)
--- trunk/Source/WebCore/ChangeLog 2015-02-11 08:36:22 UTC (rev 179920)
+++ trunk/Source/WebCore/ChangeLog 2015-02-11 08:51:55 UTC (rev 179921)
@@ -1,3 +1,22 @@
+2015-02-11 ChangSeok Oh <[email protected]>
+
+ Div having contentEditable and display:flex cannot be edited if it is empty.
+ https://bugs.webkit.org/show_bug.cgi?id=141218
+
+ Reviewed by Ryosuke Niwa.
+
+ RenderFlexibleBox should be treated as a candidate for visible position. Visible selection
+ in an editable area is recalculated whenever an inner value of div is changed. If the inner value
+ is empty, the visible selection recalculated with DeleteSelectionCommand::m_endingPostion
+ is not correct. Because RenderBlockFlow is only considered but not RenderFlexibleBox
+ in Position::isCandidate so that a calculated ending VisiblePosition for an editable div
+ having "display : flex" goes weird and VisibleSelection is empty accordingly.
+
+ Test: fast/events/key-events-in-editable-flexbox.html
+
+ * dom/Position.cpp:
+ (WebCore::Position::isCandidate):
+
2015-02-11 Commit Queue <[email protected]>
Unreviewed, rolling out r179910.
Modified: trunk/Source/WebCore/dom/Position.cpp (179920 => 179921)
--- trunk/Source/WebCore/dom/Position.cpp 2015-02-11 08:36:22 UTC (rev 179920)
+++ trunk/Source/WebCore/dom/Position.cpp 2015-02-11 08:51:55 UTC (rev 179921)
@@ -35,6 +35,7 @@
#include "Logging.h"
#include "PositionIterator.h"
#include "RenderBlock.h"
+#include "RenderFlexibleBox.h"
#include "RenderInline.h"
#include "RenderIterator.h"
#include "RenderLineBreak.h"
@@ -934,8 +935,8 @@
if (m_anchorNode->hasTagName(htmlTag))
return false;
-
- if (is<RenderBlockFlow>(*renderer)) {
+
+ if (is<RenderBlockFlow>(*renderer) || is<RenderFlexibleBox>(*renderer)) {
RenderBlockFlow& block = downcast<RenderBlockFlow>(*renderer);
if (block.logicalHeight() || m_anchorNode->hasTagName(bodyTag)) {
if (!Position::hasRenderedNonAnonymousDescendantsWithHeight(block))
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes