Title: [224773] trunk
Revision
224773
Author
[email protected]
Date
2017-11-13 13:14:46 -0800 (Mon, 13 Nov 2017)

Log Message

Don't eliminate whitespace renderer if the previous sibling is a text renderer
https://bugs.webkit.org/show_bug.cgi?id=179620

Reviewed by Zalan Bujtas.

Source/WebCore:

Currently whitespace elimination code doesn't consider runs of text renderers. We should always make whitespace
renderer if the previous renderer is a text renderer. The behavior should be the same as if those were a single
renderer with merged text. This situation can happen easily with display:contents.

This fixes the remaining flexbox failures in display:contents tests.

* style/RenderTreeUpdater.cpp:
(WebCore::RenderTreeUpdater::textRendererIsNeeded):

We need a renderer if the previous rendere is RenderText.

LayoutTests:

* TestExpectations:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (224772 => 224773)


--- trunk/LayoutTests/ChangeLog	2017-11-13 21:06:23 UTC (rev 224772)
+++ trunk/LayoutTests/ChangeLog	2017-11-13 21:14:46 UTC (rev 224773)
@@ -1,3 +1,12 @@
+2017-11-13  Antti Koivisto  <[email protected]>
+
+        Don't eliminate whitespace renderer if the previous sibling is a text renderer
+        https://bugs.webkit.org/show_bug.cgi?id=179620
+
+        Reviewed by Zalan Bujtas.
+
+        * TestExpectations:
+
 2017-11-13  Chris Dumez  <[email protected]>
 
         Implement "Service Worker Has No Pending Events" / "Update Service Worker Extended Events Set" algorithms

Modified: trunk/LayoutTests/TestExpectations (224772 => 224773)


--- trunk/LayoutTests/TestExpectations	2017-11-13 21:06:23 UTC (rev 224772)
+++ trunk/LayoutTests/TestExpectations	2017-11-13 21:14:46 UTC (rev 224773)
@@ -1378,14 +1378,8 @@
 ########################################
 ### START OF display: contents failures
 
-webkit.org/b/157477 imported/w3c/web-platform-tests/css/css-display-3/display-contents-flex-003.html [ ImageOnlyFailure ]
 webkit.org/b/157477 imported/w3c/web-platform-tests/css/css-display-3/display-contents-dynamic-table-001-inline.html [ ImageOnlyFailure ]
-webkit.org/b/157477 imported/w3c/web-platform-tests/css/css-display-3/display-contents-dynamic-flex-002-none.html [ ImageOnlyFailure ]
-webkit.org/b/157477 imported/w3c/web-platform-tests/css/css-display-3/display-contents-flex-002.html [ ImageOnlyFailure ]
 webkit.org/b/157477 imported/w3c/web-platform-tests/css/css-display-3/display-flow-root-001.html [ ImageOnlyFailure ]
-webkit.org/b/157477 imported/w3c/web-platform-tests/css/css-display-3/display-contents-dynamic-flex-003-none.html [ ImageOnlyFailure ]
-webkit.org/b/157477 imported/w3c/web-platform-tests/css/css-display-3/display-contents-dynamic-flex-002-inline.html [ ImageOnlyFailure ]
-webkit.org/b/157477 imported/w3c/web-platform-tests/css/css-display-3/display-contents-dynamic-flex-003-inline.html [ ImageOnlyFailure ]
 
 ### END OF display: contents failures
 ########################################

Modified: trunk/Source/WebCore/ChangeLog (224772 => 224773)


--- trunk/Source/WebCore/ChangeLog	2017-11-13 21:06:23 UTC (rev 224772)
+++ trunk/Source/WebCore/ChangeLog	2017-11-13 21:14:46 UTC (rev 224773)
@@ -1,3 +1,21 @@
+2017-11-13  Antti Koivisto  <[email protected]>
+
+        Don't eliminate whitespace renderer if the previous sibling is a text renderer
+        https://bugs.webkit.org/show_bug.cgi?id=179620
+
+        Reviewed by Zalan Bujtas.
+
+        Currently whitespace elimination code doesn't consider runs of text renderers. We should always make whitespace
+        renderer if the previous renderer is a text renderer. The behavior should be the same as if those were a single
+        renderer with merged text. This situation can happen easily with display:contents.
+
+        This fixes the remaining flexbox failures in display:contents tests.
+
+        * style/RenderTreeUpdater.cpp:
+        (WebCore::RenderTreeUpdater::textRendererIsNeeded):
+
+        We need a renderer if the previous rendere is RenderText.
+
 2017-11-13  Chris Dumez  <[email protected]>
 
         Implement "Service Worker Has No Pending Events" / "Update Service Worker Extended Events Set" algorithms

Modified: trunk/Source/WebCore/style/RenderTreeUpdater.cpp (224772 => 224773)


--- trunk/Source/WebCore/style/RenderTreeUpdater.cpp	2017-11-13 21:06:23 UTC (rev 224772)
+++ trunk/Source/WebCore/style/RenderTreeUpdater.cpp	2017-11-13 21:14:46 UTC (rev 224773)
@@ -398,7 +398,8 @@
 
 bool RenderTreeUpdater::textRendererIsNeeded(const Text& textNode)
 {
-    const RenderElement& parentRenderer = renderTreePosition().parent();
+    auto& renderingParent = this->renderingParent();
+    auto& parentRenderer = renderingParent.renderTreePosition->parent();
     if (!parentRenderer.canHaveChildren())
         return false;
     if (parentRenderer.element() && !parentRenderer.element()->childShouldCreateRenderer(textNode))
@@ -409,13 +410,17 @@
         return false;
     if (!textNode.containsOnlyWhitespace())
         return true;
+    if (is<RenderText>(renderingParent.previousChildRenderer))
+        return true;
     // This text node has nothing but white space. We may still need a renderer in some cases.
-    if (parentRenderer.isTable() || parentRenderer.isTableRow() || parentRenderer.isTableSection() || parentRenderer.isRenderTableCol() || parentRenderer.isFrameSet() || (parentRenderer.isFlexibleBox() && !parentRenderer.isRenderButton()))
+    if (parentRenderer.isTable() || parentRenderer.isTableRow() || parentRenderer.isTableSection() || parentRenderer.isRenderTableCol() || parentRenderer.isFrameSet())
         return false;
+    if (parentRenderer.isFlexibleBox() && !parentRenderer.isRenderButton())
+        return false;
     if (parentRenderer.style().preserveNewline()) // pre/pre-wrap/pre-line always make renderers.
         return true;
 
-    auto* previousRenderer = renderingParent().previousChildRenderer;
+    auto* previousRenderer = renderingParent.previousChildRenderer;
     if (previousRenderer && previousRenderer->isBR()) // <span><br/> <br/></span>
         return false;
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to