Index: third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp b/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp |
index 6bbb0e81e7379c934c2eaedb7a84b85b8309fded..8f81209fc0a90a76fc144f37481b0fe841669f6f 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlowLine.cpp |
@@ -1537,6 +1537,18 @@ static bool isInlineWithOutlineAndContinuation(const LayoutObject& o) |
return o.isLayoutInline() && o.styleRef().hasOutline() && !o.isElementContinuation() && toLayoutInline(o).continuation(); |
} |
+static inline bool shouldTruncateOverflowingText(const LayoutBlockFlow* block) |
+{ |
+ const LayoutObject* objectToCheck = block; |
+ if (block->isAnonymousBlock()) { |
+ const LayoutObject* parent = block->parent(); |
+ if (!parent || !parent->behavesLikeBlockContainer()) |
+ return false; |
+ objectToCheck = parent; |
+ } |
+ return objectToCheck->hasOverflowClip() && objectToCheck->style()->getTextOverflow(); |
+} |
+ |
void LayoutBlockFlow::layoutInlineChildren(bool relayoutChildren, LayoutUnit& paintInvalidationLogicalTop, LayoutUnit& paintInvalidationLogicalBottom, LayoutUnit afterEdge) |
{ |
// Figure out if we should clear out our line boxes. |
@@ -1551,17 +1563,12 @@ void LayoutBlockFlow::layoutInlineChildren(bool relayoutChildren, LayoutUnit& pa |
lineBoxes()->deleteLineBoxes(); |
} |
- // Text truncation kicks in in two cases: |
- // 1) If your overflow isn't visible and your text-overflow-mode isn't clip. |
- // 2) If you're an anonymous block with a block parent that satisfies #1 that was created |
- // to accommodate a block that has inline and block children. This excludes parents where |
- // canCollapseAnonymousBlockChild is false, notably flex items and grid items. |
+ // Text truncation kicks in if overflow isn't visible and text-overflow isn't 'clip'. If this is |
+ // an anonymous block, we have to examine the parent. |
// FIXME: CSS3 says that descendants that are clipped must also know how to truncate. This is insanely |
// difficult to figure out in general (especially in the middle of doing layout), so we only handle the |
- // simple case of an anonymous block truncating when it's parent is clipped. |
- bool hasTextOverflow = (style()->getTextOverflow() && hasOverflowClip()) |
- || (isAnonymousBlock() && parent() && parent()->isLayoutBlock() && toLayoutBlock(parent())->canCollapseAnonymousBlockChild() |
- && parent()->style()->getTextOverflow() && parent()->hasOverflowClip()); |
+ // simple case of an anonymous block truncating when its parent is clipped. |
+ bool hasTextOverflow = shouldTruncateOverflowingText(this); |
// Walk all the lines and delete our ellipsis line boxes if they exist. |
if (hasTextOverflow) |