| Index: Source/core/rendering/RenderDeprecatedFlexibleBox.cpp
 | 
| diff --git a/Source/core/rendering/RenderDeprecatedFlexibleBox.cpp b/Source/core/rendering/RenderDeprecatedFlexibleBox.cpp
 | 
| index ee4d483f6e1f0845dbda12e3c6475e355198ec41..a4d691950d32443479500d1e38011e5bcec3811c 100644
 | 
| --- a/Source/core/rendering/RenderDeprecatedFlexibleBox.cpp
 | 
| +++ b/Source/core/rendering/RenderDeprecatedFlexibleBox.cpp
 | 
| @@ -182,15 +182,6 @@ static LayoutUnit contentHeightForChild(RenderBox* child)
 | 
|      return child->logicalHeight() - child->borderAndPaddingLogicalHeight();
 | 
|  }
 | 
|  
 | 
| -void RenderDeprecatedFlexibleBox::styleWillChange(StyleDifference diff, const RenderStyle* newStyle)
 | 
| -{
 | 
| -    RenderStyle* oldStyle = style();
 | 
| -    if (oldStyle && !oldStyle->lineClamp().isNone() && newStyle->lineClamp().isNone())
 | 
| -        clearLineClamp();
 | 
| -
 | 
| -    RenderBlock::styleWillChange(diff, newStyle);
 | 
| -}
 | 
| -
 | 
|  void RenderDeprecatedFlexibleBox::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const
 | 
|  {
 | 
|      if (hasMultipleLines() || isVertical()) {
 | 
| @@ -644,12 +635,6 @@ void RenderDeprecatedFlexibleBox::layoutVerticalBox(bool relayoutChildren)
 | 
|      bool haveFlex = false, flexingChildren = false;
 | 
|      gatherFlexChildrenInfo(iterator, relayoutChildren, highestFlexGroup, lowestFlexGroup, haveFlex);
 | 
|  
 | 
| -    // We confine the line clamp ugliness to vertical flexible boxes (thus keeping it out of
 | 
| -    // mainstream block layout); this is not really part of the XUL box model.
 | 
| -    bool haveLineClamp = !style()->lineClamp().isNone();
 | 
| -    if (haveLineClamp)
 | 
| -        applyLineClamp(iterator, relayoutChildren);
 | 
| -
 | 
|      RenderBlock::startDelayUpdateScrollInfo();
 | 
|  
 | 
|      // We do 2 passes.  The first pass is simply to lay everyone out at
 | 
| @@ -674,7 +659,7 @@ void RenderDeprecatedFlexibleBox::layoutVerticalBox(bool relayoutChildren)
 | 
|              }
 | 
|  
 | 
|              SubtreeLayoutScope layoutScope(child);
 | 
| -            if (!haveLineClamp && (relayoutChildren || (child->isReplaced() && (child->style()->width().isPercent() || child->style()->height().isPercent()))))
 | 
| +            if (relayoutChildren || (child->isReplaced() && (child->style()->width().isPercent() || child->style()->height().isPercent())))
 | 
|                  layoutScope.setChildNeedsLayout(child);
 | 
|  
 | 
|              if (child->style()->visibility() == COLLAPSE) {
 | 
| @@ -878,126 +863,6 @@ void RenderDeprecatedFlexibleBox::layoutVerticalBox(bool relayoutChildren)
 | 
|          setHeight(oldHeight);
 | 
|  }
 | 
|  
 | 
| -void RenderDeprecatedFlexibleBox::applyLineClamp(FlexBoxIterator& iterator, bool relayoutChildren)
 | 
| -{
 | 
| -    UseCounter::count(&document(), UseCounter::LineClamp);
 | 
| -
 | 
| -    int maxLineCount = 0;
 | 
| -    for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
 | 
| -        if (childDoesNotAffectWidthOrFlexing(child))
 | 
| -            continue;
 | 
| -
 | 
| -        child->clearOverrideSize();
 | 
| -        if (relayoutChildren || (child->isReplaced() && (child->style()->width().isPercent() || child->style()->height().isPercent()))
 | 
| -            || (child->style()->height().isAuto() && child->isRenderBlock())) {
 | 
| -            child->setChildNeedsLayout(MarkOnlyThis);
 | 
| -
 | 
| -            // Dirty all the positioned objects.
 | 
| -            if (child->isRenderBlock()) {
 | 
| -                toRenderBlock(child)->markPositionedObjectsForLayout();
 | 
| -                toRenderBlock(child)->clearTruncation();
 | 
| -            }
 | 
| -        }
 | 
| -        child->layoutIfNeeded();
 | 
| -        if (child->style()->height().isAuto() && child->isRenderBlock())
 | 
| -            maxLineCount = max(maxLineCount, toRenderBlock(child)->lineCount());
 | 
| -    }
 | 
| -
 | 
| -    // Get the number of lines and then alter all block flow children with auto height to use the
 | 
| -    // specified height. We always try to leave room for at least one line.
 | 
| -    LineClampValue lineClamp = style()->lineClamp();
 | 
| -    int numVisibleLines = lineClamp.isPercentage() ? max(1, (maxLineCount + 1) * lineClamp.value() / 100) : lineClamp.value();
 | 
| -    if (numVisibleLines >= maxLineCount)
 | 
| -        return;
 | 
| -
 | 
| -    for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
 | 
| -        if (childDoesNotAffectWidthOrFlexing(child) || !child->style()->height().isAuto() || !child->isRenderBlock())
 | 
| -            continue;
 | 
| -
 | 
| -        RenderBlock* blockChild = toRenderBlock(child);
 | 
| -        int lineCount = blockChild->lineCount();
 | 
| -        if (lineCount <= numVisibleLines)
 | 
| -            continue;
 | 
| -
 | 
| -        LayoutUnit newHeight = blockChild->heightForLineCount(numVisibleLines);
 | 
| -        if (newHeight == child->height())
 | 
| -            continue;
 | 
| -
 | 
| -        child->setOverrideLogicalContentHeight(newHeight - child->borderAndPaddingHeight());
 | 
| -        child->forceChildLayout();
 | 
| -
 | 
| -        // FIXME: For now don't support RTL.
 | 
| -        if (style()->direction() != LTR)
 | 
| -            continue;
 | 
| -
 | 
| -        // Get the last line
 | 
| -        RootInlineBox* lastLine = blockChild->lineAtIndex(lineCount - 1);
 | 
| -        if (!lastLine)
 | 
| -            continue;
 | 
| -
 | 
| -        RootInlineBox* lastVisibleLine = blockChild->lineAtIndex(numVisibleLines - 1);
 | 
| -        if (!lastVisibleLine)
 | 
| -            continue;
 | 
| -
 | 
| -        const UChar ellipsisAndSpace[2] = { horizontalEllipsis, ' ' };
 | 
| -        DEFINE_STATIC_LOCAL(AtomicString, ellipsisAndSpaceStr, (ellipsisAndSpace, 2));
 | 
| -        DEFINE_STATIC_LOCAL(AtomicString, ellipsisStr, (&horizontalEllipsis, 1));
 | 
| -        const Font& font = style(numVisibleLines == 1)->font();
 | 
| -
 | 
| -        // Get ellipsis width, and if the last child is an anchor, it will go after the ellipsis, so add in a space and the anchor width too
 | 
| -        LayoutUnit totalWidth;
 | 
| -        InlineBox* anchorBox = lastLine->lastChild();
 | 
| -        if (anchorBox && anchorBox->renderer()->style()->isLink())
 | 
| -            totalWidth = anchorBox->logicalWidth() + font.width(constructTextRun(this, font, ellipsisAndSpace, 2, style()));
 | 
| -        else {
 | 
| -            anchorBox = 0;
 | 
| -            totalWidth = font.width(constructTextRun(this, font, &horizontalEllipsis, 1, style()));
 | 
| -        }
 | 
| -
 | 
| -        // See if this width can be accommodated on the last visible line
 | 
| -        RenderBlock* destBlock = toRenderBlock(lastVisibleLine->renderer());
 | 
| -        RenderBlock* srcBlock = toRenderBlock(lastLine->renderer());
 | 
| -
 | 
| -        // FIXME: Directions of src/destBlock could be different from our direction and from one another.
 | 
| -        if (!srcBlock->style()->isLeftToRightDirection())
 | 
| -            continue;
 | 
| -
 | 
| -        bool leftToRight = destBlock->style()->isLeftToRightDirection();
 | 
| -        if (!leftToRight)
 | 
| -            continue;
 | 
| -
 | 
| -        LayoutUnit blockRightEdge = destBlock->logicalRightOffsetForLine(lastVisibleLine->y(), false);
 | 
| -        if (!lastVisibleLine->lineCanAccommodateEllipsis(leftToRight, blockRightEdge, lastVisibleLine->x() + lastVisibleLine->logicalWidth(), totalWidth))
 | 
| -            continue;
 | 
| -
 | 
| -        // Let the truncation code kick in.
 | 
| -        // FIXME: the text alignment should be recomputed after the width changes due to truncation.
 | 
| -        LayoutUnit blockLeftEdge = destBlock->logicalLeftOffsetForLine(lastVisibleLine->y(), false);
 | 
| -        lastVisibleLine->placeEllipsis(anchorBox ? ellipsisAndSpaceStr : ellipsisStr, leftToRight, blockLeftEdge, blockRightEdge, totalWidth, anchorBox);
 | 
| -        destBlock->setHasMarkupTruncation(true);
 | 
| -    }
 | 
| -}
 | 
| -
 | 
| -void RenderDeprecatedFlexibleBox::clearLineClamp()
 | 
| -{
 | 
| -    FlexBoxIterator iterator(this);
 | 
| -    for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
 | 
| -        if (childDoesNotAffectWidthOrFlexing(child))
 | 
| -            continue;
 | 
| -
 | 
| -        child->clearOverrideSize();
 | 
| -        if ((child->isReplaced() && (child->style()->width().isPercent() || child->style()->height().isPercent()))
 | 
| -            || (child->style()->height().isAuto() && child->isRenderBlock())) {
 | 
| -            child->setChildNeedsLayout();
 | 
| -
 | 
| -            if (child->isRenderBlock()) {
 | 
| -                toRenderBlock(child)->markPositionedObjectsForLayout();
 | 
| -                toRenderBlock(child)->clearTruncation();
 | 
| -            }
 | 
| -        }
 | 
| -    }
 | 
| -}
 | 
| -
 | 
|  void RenderDeprecatedFlexibleBox::placeChild(RenderBox* child, const LayoutPoint& location)
 | 
|  {
 | 
|      LayoutRect oldRect = child->frameRect();
 | 
| 
 |