Title: [287395] trunk/Source/WebCore
Revision
287395
Author
za...@apple.com
Date
2021-12-23 07:07:24 -0800 (Thu, 23 Dec 2021)

Log Message

[LFC][IFC] Do not try to bidi reorder empty content
https://bugs.webkit.org/show_bug.cgi?id=234623

Reviewed by Antti Koivisto.

* layout/formattingContexts/inline/InlineItemsBuilder.cpp:
(WebCore::Layout::buildBidiParagraph):
(WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
* layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
(WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (287394 => 287395)


--- trunk/Source/WebCore/ChangeLog	2021-12-23 14:42:49 UTC (rev 287394)
+++ trunk/Source/WebCore/ChangeLog	2021-12-23 15:07:24 UTC (rev 287395)
@@ -1,5 +1,18 @@
 2021-12-23  Alan Bujtas  <za...@apple.com>
 
+        [LFC][IFC] Do not try to bidi reorder empty content
+        https://bugs.webkit.org/show_bug.cgi?id=234623
+
+        Reviewed by Antti Koivisto.
+
+        * layout/formattingContexts/inline/InlineItemsBuilder.cpp:
+        (WebCore::Layout::buildBidiParagraph):
+        (WebCore::Layout::InlineItemsBuilder::breakAndComputeBidiLevels):
+        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
+        (WebCore::Layout::InlineDisplayContentBuilder::processNonBidiContent):
+
+2021-12-23  Alan Bujtas  <za...@apple.com>
+
         [LFC][IFC] Empty bidi inline boxes should not make the line taller
         https://bugs.webkit.org/show_bug.cgi?id=234621
 

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.cpp (287394 => 287395)


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.cpp	2021-12-23 14:42:49 UTC (rev 287394)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineItemsBuilder.cpp	2021-12-23 15:07:24 UTC (rev 287395)
@@ -238,8 +238,7 @@
         } else if (inlineItem.isBox()) {
             inlineItemOffsetList.uncheckedAppend({ paragraphContentBuilder.length() });
             paragraphContentBuilder.append(objectReplacementCharacter);
-        }
-        else if (inlineItem.isInlineBoxStart() || inlineItem.isInlineBoxEnd()) {
+        } else if (inlineItem.isInlineBoxStart() || inlineItem.isInlineBoxEnd()) {
             // https://drafts.csswg.org/css-writing-modes/#unicode-bidi
             auto& style = inlineItem.style();
             auto initiatesControlCharacter = style.rtlOrdering() == Order::Logical && style.unicodeBidi() != EUnicodeBidi::UBNormal;
@@ -290,6 +289,12 @@
     InlineItemOffsetList inlineItemOffsets;
     inlineItemOffsets.reserveInitialCapacity(inlineItems.size());
     buildBidiParagraph(root().style(), inlineItems, paragraphContentBuilder, inlineItemOffsets);
+    if (paragraphContentBuilder.isEmpty()) {
+        // Style may trigger visual reordering even on a completely empty content.
+        // e.g. <div><span style="direction:rtl"></span></div>
+        // Let's not try to do bidi handling when there's no content to reorder.
+        return;
+    }
     ASSERT(inlineItemOffsets.size() == inlineItems.size());
     // 1. Setup the bidi boundary loop by calling ubidi_setPara with the paragraph text.
     // 2. Call ubidi_getLogicalRun to advance to the next bidi boundary until we hit the end of the content.

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp (287394 => 287395)


--- trunk/Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp	2021-12-23 14:42:49 UTC (rev 287394)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp	2021-12-23 15:07:24 UTC (rev 287395)
@@ -319,7 +319,12 @@
 
 void InlineDisplayContentBuilder::processNonBidiContent(const LineBuilder::LineContent& lineContent, const LineBox& lineBox, const InlineDisplay::Line& displayLine, DisplayBoxes& boxes)
 {
-    ASSERT(root().style().isLeftToRightDirection());
+#ifndef NDEBUG
+    auto hasContent = false;
+    for (auto& lineRun : lineContent.runs)
+        hasContent = hasContent || lineRun.isText() || lineRun.isBox();
+    ASSERT(root().style().isLeftToRightDirection() || !hasContent);
+#endif
     auto lineBoxRect = displayLine.lineBoxRect();
     auto contentStartInVisualOrder = lineBoxRect.left() + displayLine.contentLeft();
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to