| Index: Source/core/rendering/RenderBlock.cpp | 
| diff --git a/Source/core/rendering/RenderBlock.cpp b/Source/core/rendering/RenderBlock.cpp | 
| index da9b6215d797a841a9a37760ee523679e5c66212..5ef5049ecfc68aaad4e47b1bd7cbfa116b4eaf69 100644 | 
| --- a/Source/core/rendering/RenderBlock.cpp | 
| +++ b/Source/core/rendering/RenderBlock.cpp | 
| @@ -4009,10 +4009,10 @@ LayoutPoint RenderBlock::computeLogicalLocationForFloat(const FloatingObject* fl | 
| if (childBox->style()->floating() == LeftFloat) { | 
| LayoutUnit heightRemainingLeft = 1; | 
| LayoutUnit heightRemainingRight = 1; | 
| -        floatLogicalLeft = logicalLeftOffsetForLine(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft); | 
| -        while (logicalRightOffsetForLine(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight) - floatLogicalLeft < floatLogicalWidth) { | 
| +        floatLogicalLeft = logicalLeftOffsetForLine(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft, 0, ShapeOutsideFloatBoundingBoxOffset); | 
| +        while (logicalRightOffsetForLine(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight, 0, ShapeOutsideFloatBoundingBoxOffset) - floatLogicalLeft < floatLogicalWidth) { | 
| logicalTopOffset += min(heightRemainingLeft, heightRemainingRight); | 
| -            floatLogicalLeft = logicalLeftOffsetForLine(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft); | 
| +            floatLogicalLeft = logicalLeftOffsetForLine(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft, 0, ShapeOutsideFloatBoundingBoxOffset); | 
| if (insideFlowThread) { | 
| // Have to re-evaluate all of our offsets, since they may have changed. | 
| logicalRightOffset = logicalRightOffsetForContent(logicalTopOffset); // Constant part of right offset. | 
| @@ -4024,10 +4024,10 @@ LayoutPoint RenderBlock::computeLogicalLocationForFloat(const FloatingObject* fl | 
| } else { | 
| LayoutUnit heightRemainingLeft = 1; | 
| LayoutUnit heightRemainingRight = 1; | 
| -        floatLogicalLeft = logicalRightOffsetForLine(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight); | 
| -        while (floatLogicalLeft - logicalLeftOffsetForLine(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft) < floatLogicalWidth) { | 
| +        floatLogicalLeft = logicalRightOffsetForLine(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight, 0, ShapeOutsideFloatBoundingBoxOffset); | 
| +        while (floatLogicalLeft - logicalLeftOffsetForLine(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft, 0, ShapeOutsideFloatBoundingBoxOffset) < floatLogicalWidth) { | 
| logicalTopOffset += min(heightRemainingLeft, heightRemainingRight); | 
| -            floatLogicalLeft = logicalRightOffsetForLine(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight); | 
| +            floatLogicalLeft = logicalRightOffsetForLine(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight, 0, ShapeOutsideFloatBoundingBoxOffset); | 
| if (insideFlowThread) { | 
| // Have to re-evaluate all of our offsets, since they may have changed. | 
| logicalRightOffset = logicalRightOffsetForContent(logicalTopOffset); // Constant part of right offset. | 
| @@ -4316,7 +4316,7 @@ LayoutUnit RenderBlock::logicalRightOffsetForContent(RenderRegion* region, Layou | 
| return logicalRightOffset - (logicalWidth() - (isHorizontalWritingMode() ? boxRect.maxX() : boxRect.maxY())); | 
| } | 
|  | 
| -LayoutUnit RenderBlock::logicalLeftOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedOffset, bool applyTextIndent, LayoutUnit* heightRemaining, LayoutUnit logicalHeight) const | 
| +LayoutUnit RenderBlock::logicalLeftOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedOffset, bool applyTextIndent, LayoutUnit* heightRemaining, LayoutUnit logicalHeight, ShapeOutsideFloatOffsetMode offsetMode) const | 
| { | 
| LayoutUnit left = fixedOffset; | 
| if (m_floatingObjects && m_floatingObjects->hasLeftObjects()) { | 
| @@ -4327,7 +4327,8 @@ LayoutUnit RenderBlock::logicalLeftOffsetForLine(LayoutUnit logicalTop, LayoutUn | 
| m_floatingObjects->placedFloatsTree().allOverlapsWithAdapter(adapter); | 
|  | 
| #if ENABLE(CSS_EXCLUSIONS) | 
| -        if (const FloatingObject* lastFloat = adapter.lastFloat()) { | 
| +        const FloatingObject* lastFloat = adapter.lastFloat(); | 
| +        if (offsetMode == ShapeOutsideFloatShapeOffset && lastFloat) { | 
| if (ExclusionShapeOutsideInfo* shapeOutside = lastFloat->renderer()->exclusionShapeOutsideInfo()) { | 
| shapeOutside->computeSegmentsForLine(logicalTop - logicalTopForFloat(lastFloat) + shapeOutside->shapeLogicalTop(), logicalHeight); | 
| left += shapeOutside->rightSegmentShapeBoundingBoxDelta(); | 
| @@ -4370,7 +4371,7 @@ LayoutUnit RenderBlock::logicalLeftOffsetForLine(LayoutUnit logicalTop, LayoutUn | 
| return left; | 
| } | 
|  | 
| -LayoutUnit RenderBlock::logicalRightOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedOffset, bool applyTextIndent, LayoutUnit* heightRemaining, LayoutUnit logicalHeight) const | 
| +LayoutUnit RenderBlock::logicalRightOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedOffset, bool applyTextIndent, LayoutUnit* heightRemaining, LayoutUnit logicalHeight, ShapeOutsideFloatOffsetMode offsetMode) const | 
| { | 
| LayoutUnit right = fixedOffset; | 
| if (m_floatingObjects && m_floatingObjects->hasRightObjects()) { | 
| @@ -4382,7 +4383,8 @@ LayoutUnit RenderBlock::logicalRightOffsetForLine(LayoutUnit logicalTop, LayoutU | 
| m_floatingObjects->placedFloatsTree().allOverlapsWithAdapter(adapter); | 
|  | 
| #if ENABLE(CSS_EXCLUSIONS) | 
| -        if (const FloatingObject* lastFloat = adapter.lastFloat()) { | 
| +        const FloatingObject* lastFloat = adapter.lastFloat(); | 
| +        if (offsetMode == ShapeOutsideFloatShapeOffset && lastFloat) { | 
| if (ExclusionShapeOutsideInfo* shapeOutside = lastFloat->renderer()->exclusionShapeOutsideInfo()) { | 
| shapeOutside->computeSegmentsForLine(logicalTop - logicalTopForFloat(lastFloat) + shapeOutside->shapeLogicalTop(), logicalHeight); | 
| rightFloatOffset += shapeOutside->leftSegmentShapeBoundingBoxDelta(); | 
|  |