| Index: Source/core/rendering/RenderBlockFlow.cpp
 | 
| diff --git a/Source/core/rendering/RenderBlockFlow.cpp b/Source/core/rendering/RenderBlockFlow.cpp
 | 
| index c90e924371983ad626d39bdc3eca9ec124489dbd..340583e4d815c6e6f1cc4290cc021f102b2621ae 100644
 | 
| --- a/Source/core/rendering/RenderBlockFlow.cpp
 | 
| +++ b/Source/core/rendering/RenderBlockFlow.cpp
 | 
| @@ -38,8 +38,6 @@
 | 
|  #include "core/rendering/LayoutRectRecorder.h"
 | 
|  #include "core/rendering/LayoutRepainter.h"
 | 
|  #include "core/rendering/RenderLayer.h"
 | 
| -#include "core/rendering/RenderNamedFlowFragment.h"
 | 
| -#include "core/rendering/RenderNamedFlowThread.h"
 | 
|  #include "core/rendering/RenderText.h"
 | 
|  #include "core/rendering/RenderView.h"
 | 
|  #include "core/rendering/line/LineWidth.h"
 | 
| @@ -145,7 +143,7 @@ static bool inNormalFlow(RenderBox* child)
 | 
|      RenderBlock* curr = child->containingBlock();
 | 
|      RenderView* renderView = child->view();
 | 
|      while (curr && curr != renderView) {
 | 
| -        if (curr->hasColumns() || curr->isRenderFlowThread())
 | 
| +        if (curr->hasColumns())
 | 
|              return true;
 | 
|          if (curr->isFloatingOrOutOfFlowPositioned())
 | 
|              return false;
 | 
| @@ -181,9 +179,6 @@ void RenderBlockFlow::willBeDestroyed()
 | 
|      if (lineGridBox())
 | 
|          lineGridBox()->destroy();
 | 
|  
 | 
| -    if (renderNamedFlowFragment())
 | 
| -        setRenderNamedFlowFragment(0);
 | 
| -
 | 
|      RenderBlock::willBeDestroyed();
 | 
|  }
 | 
|  
 | 
| @@ -278,15 +273,6 @@ inline void RenderBlockFlow::layoutBlockFlow(bool relayoutChildren, LayoutUnit p
 | 
|      RenderView* renderView = view();
 | 
|      LayoutStateMaintainer statePusher(renderView, this, locationOffset(), hasColumns() || hasTransform() || hasReflection() || style()->isFlippedBlocksWritingMode(), pageLogicalHeight, pageLogicalHeightChanged, columnInfo());
 | 
|  
 | 
| -    // Regions changing widths can force us to relayout our children.
 | 
| -    RenderFlowThread* flowThread = flowThreadContainingBlock();
 | 
| -    if (logicalWidthChangedInRegions(flowThread))
 | 
| -        relayoutChildren = true;
 | 
| -    if (updateRegionsAndShapesLogicalSize(flowThread))
 | 
| -        relayoutChildren = true;
 | 
| -    if (!relayoutChildren && isRenderNamedFlowFragmentContainer())
 | 
| -        relayoutChildren = true;
 | 
| -
 | 
|      // We use four values, maxTopPos, maxTopNeg, maxBottomPos, and maxBottomNeg, to track
 | 
|      // our current maximal positive and negative margins. These values are used when we
 | 
|      // are collapsed with adjacent blocks, so for example, if you have block A and B
 | 
| @@ -347,11 +333,6 @@ inline void RenderBlockFlow::layoutBlockFlow(bool relayoutChildren, LayoutUnit p
 | 
|      LayoutUnit oldHeight = logicalHeight();
 | 
|      LayoutUnit oldClientAfterEdge = clientLogicalBottom();
 | 
|  
 | 
| -    // Before updating the final size of the flow thread make sure a forced break is applied after the content.
 | 
| -    // This ensures the size information is correctly computed for the last auto-height region receiving content.
 | 
| -    if (isRenderFlowThread())
 | 
| -        toRenderFlowThread(this)->applyBreakAfterContent(oldClientAfterEdge);
 | 
| -
 | 
|      updateLogicalHeight();
 | 
|      LayoutUnit newHeight = logicalHeight();
 | 
|      if (oldHeight != newHeight) {
 | 
| @@ -373,8 +354,6 @@ inline void RenderBlockFlow::layoutBlockFlow(bool relayoutChildren, LayoutUnit p
 | 
|  
 | 
|      layoutPositionedObjects(relayoutChildren || isRoot());
 | 
|  
 | 
| -    updateRegionsAndShapesAfterChildLayout(flowThread, heightChanged);
 | 
| -
 | 
|      // Add overflow from children (unless we're multi-column, since in that case all our child overflow is clipped anyway).
 | 
|      computeOverflow(oldClientAfterEdge);
 | 
|  
 | 
| @@ -864,7 +843,7 @@ MarginInfo::MarginInfo(RenderBlockFlow* blockFlow, LayoutUnit beforeBorderPaddin
 | 
|      ASSERT(blockFlow->isRenderView() || blockFlow->parent());
 | 
|      m_canCollapseWithChildren = !blockFlow->isRenderView() && !blockFlow->isRoot() && !blockFlow->isOutOfFlowPositioned()
 | 
|          && !blockFlow->isFloating() && !blockFlow->isTableCell() && !blockFlow->hasOverflowClip() && !blockFlow->isInlineBlockOrInlineTable()
 | 
| -        && !blockFlow->isRenderFlowThread() && !blockFlow->isWritingModeRoot() && !blockFlow->parent()->isFlexibleBox()
 | 
| +        && !blockFlow->isWritingModeRoot() && !blockFlow->parent()->isFlexibleBox()
 | 
|          && blockStyle->hasAutoColumnCount() && blockStyle->hasAutoColumnWidth() && !blockStyle->columnSpan();
 | 
|  
 | 
|      m_canCollapseMarginBeforeWithChildren = m_canCollapseWithChildren && !beforeBorderPadding && blockStyle->marginBeforeCollapse() != MSEPARATE;
 | 
| @@ -1134,19 +1113,16 @@ void RenderBlockFlow::adjustPositionedBlock(RenderBox* child, const MarginInfo&
 | 
|      }
 | 
|  }
 | 
|  
 | 
| -LayoutUnit RenderBlockFlow::computeStartPositionDeltaForChildAvoidingFloats(const RenderBox* child, LayoutUnit childMarginStart, RenderRegion* region)
 | 
| +LayoutUnit RenderBlockFlow::computeStartPositionDeltaForChildAvoidingFloats(const RenderBox* child, LayoutUnit childMarginStart)
 | 
|  {
 | 
| -    LayoutUnit startPosition = startOffsetForContent(region);
 | 
| +    LayoutUnit startPosition = startOffsetForContent();
 | 
|  
 | 
|      // Add in our start margin.
 | 
|      LayoutUnit oldPosition = startPosition + childMarginStart;
 | 
|      LayoutUnit newPosition = oldPosition;
 | 
|  
 | 
|      LayoutUnit blockOffset = logicalTopForChild(child);
 | 
| -    if (region)
 | 
| -        blockOffset = max(blockOffset, blockOffset + (region->logicalTopForFlowThreadContent() - offsetFromLogicalTopOfFirstPage()));
 | 
| -
 | 
| -    LayoutUnit startOff = startOffsetForLineInRegion(blockOffset, false, region, logicalHeightForChild(child));
 | 
| +    LayoutUnit startOff = startOffsetForLine(blockOffset, false, logicalHeightForChild(child));
 | 
|  
 | 
|      if (style()->textAlign() != WEBKIT_CENTER && !child->style()->marginStartUsing(style()).isAuto()) {
 | 
|          if (childMarginStart < 0)
 | 
| @@ -1529,18 +1505,10 @@ LayoutUnit RenderBlockFlow::applyBeforeBreak(RenderBox* child, LayoutUnit logica
 | 
|      // FIXME: Add page break checking here when we support printing.
 | 
|      bool checkColumnBreaks = view()->layoutState()->isPaginatingColumns();
 | 
|      bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->m_pageLogicalHeight; // FIXME: Once columns can print we have to check this.
 | 
| -    RenderFlowThread* flowThread = flowThreadContainingBlock();
 | 
| -    bool checkRegionBreaks = flowThread && flowThread->isRenderNamedFlowThread();
 | 
| -    bool checkBeforeAlways = (checkColumnBreaks && child->style()->columnBreakBefore() == PBALWAYS) || (checkPageBreaks && child->style()->pageBreakBefore() == PBALWAYS)
 | 
| -        || (checkRegionBreaks && child->style()->regionBreakBefore() == PBALWAYS);
 | 
| +    bool checkBeforeAlways = (checkColumnBreaks && child->style()->columnBreakBefore() == PBALWAYS) || (checkPageBreaks && child->style()->pageBreakBefore() == PBALWAYS);
 | 
|      if (checkBeforeAlways && inNormalFlow(child) && hasNextPage(logicalOffset, IncludePageBoundary)) {
 | 
|          if (checkColumnBreaks)
 | 
|              view()->layoutState()->addForcedColumnBreak(child, logicalOffset);
 | 
| -        if (checkRegionBreaks) {
 | 
| -            LayoutUnit offsetBreakAdjustment = 0;
 | 
| -            if (flowThread->addForcedRegionBreak(offsetFromLogicalTopOfFirstPage() + logicalOffset, child, true, &offsetBreakAdjustment))
 | 
| -                return logicalOffset + offsetBreakAdjustment;
 | 
| -        }
 | 
|          return nextPageLogicalTop(logicalOffset, IncludePageBoundary);
 | 
|      }
 | 
|      return logicalOffset;
 | 
| @@ -1551,23 +1519,13 @@ LayoutUnit RenderBlockFlow::applyAfterBreak(RenderBox* child, LayoutUnit logical
 | 
|      // FIXME: Add page break checking here when we support printing.
 | 
|      bool checkColumnBreaks = view()->layoutState()->isPaginatingColumns();
 | 
|      bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->m_pageLogicalHeight; // FIXME: Once columns can print we have to check this.
 | 
| -    RenderFlowThread* flowThread = flowThreadContainingBlock();
 | 
| -    bool checkRegionBreaks = flowThread && flowThread->isRenderNamedFlowThread();
 | 
| -    bool checkAfterAlways = (checkColumnBreaks && child->style()->columnBreakAfter() == PBALWAYS) || (checkPageBreaks && child->style()->pageBreakAfter() == PBALWAYS)
 | 
| -        || (checkRegionBreaks && child->style()->regionBreakAfter() == PBALWAYS);
 | 
| +    bool checkAfterAlways = (checkColumnBreaks && child->style()->columnBreakAfter() == PBALWAYS) || (checkPageBreaks && child->style()->pageBreakAfter() == PBALWAYS);
 | 
|      if (checkAfterAlways && inNormalFlow(child) && hasNextPage(logicalOffset, IncludePageBoundary)) {
 | 
| -        LayoutUnit marginOffset = marginInfo.canCollapseWithMarginBefore() ? LayoutUnit() : marginInfo.margin();
 | 
| -
 | 
|          // So our margin doesn't participate in the next collapsing steps.
 | 
|          marginInfo.clearMargin();
 | 
|  
 | 
|          if (checkColumnBreaks)
 | 
|              view()->layoutState()->addForcedColumnBreak(child, logicalOffset);
 | 
| -        if (checkRegionBreaks) {
 | 
| -            LayoutUnit offsetBreakAdjustment = 0;
 | 
| -            if (flowThread->addForcedRegionBreak(offsetFromLogicalTopOfFirstPage() + logicalOffset + marginOffset, child, false, &offsetBreakAdjustment))
 | 
| -                return logicalOffset + marginOffset + offsetBreakAdjustment;
 | 
| -        }
 | 
|          return nextPageLogicalTop(logicalOffset, IncludePageBoundary);
 | 
|      }
 | 
|      return logicalOffset;
 | 
| @@ -1695,11 +1653,10 @@ LayoutUnit RenderBlockFlow::getClearDelta(RenderBox* child, LayoutUnit logicalTo
 | 
|          LayoutUnit newLogicalTop = logicalTop;
 | 
|          while (true) {
 | 
|              LayoutUnit availableLogicalWidthAtNewLogicalTopOffset = availableLogicalWidthForLine(newLogicalTop, false, logicalHeightForChild(child));
 | 
| -            if (availableLogicalWidthAtNewLogicalTopOffset == availableLogicalWidthForContent(newLogicalTop))
 | 
| +            if (availableLogicalWidthAtNewLogicalTopOffset == availableLogicalWidthForContent())
 | 
|                  return newLogicalTop - logicalTop;
 | 
|  
 | 
| -            RenderRegion* region = regionAtBlockOffset(logicalTopForChild(child));
 | 
| -            LayoutRect borderBox = child->borderBoxRectInRegion(region, DoNotCacheRenderBoxRegionInfo);
 | 
| +            LayoutRect borderBox = child->borderBoxRect();
 | 
|              LayoutUnit childLogicalWidthAtOldLogicalTopOffset = isHorizontalWritingMode() ? borderBox.width() : borderBox.height();
 | 
|  
 | 
|              // FIXME: None of this is right for perpendicular writing-mode children.
 | 
| @@ -1710,8 +1667,7 @@ LayoutUnit RenderBlockFlow::getClearDelta(RenderBox* child, LayoutUnit logicalTo
 | 
|  
 | 
|              child->setLogicalTop(newLogicalTop);
 | 
|              child->updateLogicalWidth();
 | 
| -            region = regionAtBlockOffset(logicalTopForChild(child));
 | 
| -            borderBox = child->borderBoxRectInRegion(region, DoNotCacheRenderBoxRegionInfo);
 | 
| +            borderBox = child->borderBoxRect();
 | 
|              LayoutUnit childLogicalWidthAtNewLogicalTopOffset = isHorizontalWritingMode() ? borderBox.width() : borderBox.height();
 | 
|  
 | 
|              child->setLogicalTop(childOldLogicalTop);
 | 
| @@ -1787,9 +1743,6 @@ void RenderBlockFlow::styleDidChange(StyleDifference diff, const RenderStyle* ol
 | 
|          parentBlockFlow->markAllDescendantsWithFloatsForLayout();
 | 
|          parentBlockFlow->markSiblingsWithFloatsForLayout();
 | 
|      }
 | 
| -
 | 
| -    if (renderNamedFlowFragment())
 | 
| -        renderNamedFlowFragment()->setStyleForNamedFlowFragment(style());
 | 
|  }
 | 
|  
 | 
|  void RenderBlockFlow::updateStaticInlinePositionForChild(RenderBox* child, LayoutUnit logicalTop)
 | 
| @@ -1797,15 +1750,11 @@ void RenderBlockFlow::updateStaticInlinePositionForChild(RenderBox* child, Layou
 | 
|      if (child->style()->isOriginalDisplayInlineType())
 | 
|          setStaticInlinePositionForChild(child, logicalTop, startAlignedOffsetForLine(logicalTop, false));
 | 
|      else
 | 
| -        setStaticInlinePositionForChild(child, logicalTop, startOffsetForContent(logicalTop));
 | 
| +        setStaticInlinePositionForChild(child, logicalTop, startOffsetForContent());
 | 
|  }
 | 
|  
 | 
|  void RenderBlockFlow::setStaticInlinePositionForChild(RenderBox* child, LayoutUnit blockOffset, LayoutUnit inlinePosition)
 | 
|  {
 | 
| -    if (flowThreadContainingBlock()) {
 | 
| -        // Shift the inline position to exclude the region offset.
 | 
| -        inlinePosition += startOffsetForContent() - startOffsetForContent(blockOffset);
 | 
| -    }
 | 
|      child->layer()->setStaticInlinePosition(inlinePosition);
 | 
|  }
 | 
|  
 | 
| @@ -2117,7 +2066,7 @@ LayoutUnit RenderBlockFlow::adjustLogicalRightOffsetForLine(LayoutUnit offsetFro
 | 
|  LayoutPoint RenderBlockFlow::computeLogicalLocationForFloat(const FloatingObject* floatingObject, LayoutUnit logicalTopOffset) const
 | 
|  {
 | 
|      RenderBox* childBox = floatingObject->renderer();
 | 
| -    LayoutUnit logicalLeftOffset = logicalLeftOffsetForContent(logicalTopOffset); // Constant part of left offset.
 | 
| +    LayoutUnit logicalLeftOffset = logicalLeftOffsetForContent(); // Constant part of left offset.
 | 
|      LayoutUnit logicalRightOffset; // Constant part of right offset.
 | 
|      // FIXME Bug 102948: This only works for shape outside directly set on this block.
 | 
|      ShapeInsideInfo* shapeInsideInfo = this->layoutShapeInsideInfo();
 | 
| @@ -2140,15 +2089,13 @@ LayoutPoint RenderBlockFlow::computeLogicalLocationForFloat(const FloatingObject
 | 
|              logicalLeftOffset += segments[0].logicalLeft;
 | 
|          }
 | 
|      } else {
 | 
| -        logicalRightOffset = logicalRightOffsetForContent(logicalTopOffset);
 | 
| +        logicalRightOffset = logicalRightOffsetForContent();
 | 
|      }
 | 
|  
 | 
|      LayoutUnit floatLogicalWidth = min(logicalWidthForFloat(floatingObject), logicalRightOffset - logicalLeftOffset); // The width we look for.
 | 
|  
 | 
|      LayoutUnit floatLogicalLeft;
 | 
|  
 | 
| -    bool insideFlowThread = flowThreadContainingBlock();
 | 
| -
 | 
|      if (childBox->style()->floating() == LeftFloat) {
 | 
|          LayoutUnit heightRemainingLeft = 1;
 | 
|          LayoutUnit heightRemainingRight = 1;
 | 
| @@ -2156,12 +2103,6 @@ LayoutPoint RenderBlockFlow::computeLogicalLocationForFloat(const FloatingObject
 | 
|          while (logicalRightOffsetForPositioningFloat(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight) - floatLogicalLeft < floatLogicalWidth) {
 | 
|              logicalTopOffset += min(heightRemainingLeft, heightRemainingRight);
 | 
|              floatLogicalLeft = logicalLeftOffsetForPositioningFloat(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft);
 | 
| -            if (insideFlowThread) {
 | 
| -                // Have to re-evaluate all of our offsets, since they may have changed.
 | 
| -                logicalRightOffset = logicalRightOffsetForContent(logicalTopOffset); // Constant part of right offset.
 | 
| -                logicalLeftOffset = logicalLeftOffsetForContent(logicalTopOffset); // Constant part of left offset.
 | 
| -                floatLogicalWidth = min(logicalWidthForFloat(floatingObject), logicalRightOffset - logicalLeftOffset);
 | 
| -            }
 | 
|          }
 | 
|          floatLogicalLeft = max(logicalLeftOffset - borderAndPaddingLogicalLeft(), floatLogicalLeft);
 | 
|      } else {
 | 
| @@ -2171,12 +2112,6 @@ LayoutPoint RenderBlockFlow::computeLogicalLocationForFloat(const FloatingObject
 | 
|          while (floatLogicalLeft - logicalLeftOffsetForPositioningFloat(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft) < floatLogicalWidth) {
 | 
|              logicalTopOffset += min(heightRemainingLeft, heightRemainingRight);
 | 
|              floatLogicalLeft = logicalRightOffsetForPositioningFloat(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight);
 | 
| -            if (insideFlowThread) {
 | 
| -                // Have to re-evaluate all of our offsets, since they may have changed.
 | 
| -                logicalRightOffset = logicalRightOffsetForContent(logicalTopOffset); // Constant part of right offset.
 | 
| -                logicalLeftOffset = logicalLeftOffsetForContent(logicalTopOffset); // Constant part of left offset.
 | 
| -                floatLogicalWidth = min(logicalWidthForFloat(floatingObject), logicalRightOffset - logicalLeftOffset);
 | 
| -            }
 | 
|          }
 | 
|          // Use the original width of the float here, since the local variable
 | 
|          // |floatLogicalWidth| was capped to the available line width. See
 | 
| @@ -2770,53 +2705,9 @@ RootInlineBox* RenderBlockFlow::createRootInlineBox()
 | 
|      return new RootInlineBox(this);
 | 
|  }
 | 
|  
 | 
| -void RenderBlockFlow::createRenderNamedFlowFragmentIfNeeded()
 | 
| -{
 | 
| -    if (!RuntimeEnabledFeatures::cssRegionsEnabled()
 | 
| -        || renderNamedFlowFragment()
 | 
| -        || isRenderNamedFlowFragment())
 | 
| -        return;
 | 
| -
 | 
| -    RenderStyle* styleToUse = style();
 | 
| -    if (styleToUse->isDisplayRegionType() && styleToUse->hasFlowFrom() && document().renderView()) {
 | 
| -        RenderNamedFlowFragment* flowFragment = RenderNamedFlowFragment::createAnonymous(&document());
 | 
| -        flowFragment->setStyleForNamedFlowFragment(styleToUse);
 | 
| -        setRenderNamedFlowFragment(flowFragment);
 | 
| -        addChild(flowFragment);
 | 
| -    }
 | 
| -}
 | 
| -
 | 
| -void RenderBlockFlow::insertedIntoTree()
 | 
| -{
 | 
| -    RenderBlock::insertedIntoTree();
 | 
| -
 | 
| -    createRenderNamedFlowFragmentIfNeeded();
 | 
| -}
 | 
| -
 | 
| -bool RenderBlockFlow::canHaveChildren() const
 | 
| -{
 | 
| -    return !renderNamedFlowFragment() ? RenderBlock::canHaveChildren() : renderNamedFlowFragment()->canHaveChildren();
 | 
| -}
 | 
| -
 | 
| -bool RenderBlockFlow::canHaveGeneratedChildren() const
 | 
| -{
 | 
| -    return !renderNamedFlowFragment() ? RenderBlock::canHaveGeneratedChildren() : renderNamedFlowFragment()->canHaveGeneratedChildren();
 | 
| -}
 | 
| -
 | 
|  void RenderBlockFlow::updateLogicalHeight()
 | 
|  {
 | 
|      RenderBlock::updateLogicalHeight();
 | 
| -
 | 
| -    if (renderNamedFlowFragment())
 | 
| -        renderNamedFlowFragment()->setLogicalHeight(max<LayoutUnit>(0, logicalHeight() - borderAndPaddingLogicalHeight()));
 | 
| -}
 | 
| -
 | 
| -void RenderBlockFlow::setRenderNamedFlowFragment(RenderNamedFlowFragment* flowFragment)
 | 
| -{
 | 
| -    RenderBlockFlow::RenderBlockFlowRareData& rareData = ensureRareData();
 | 
| -    if (rareData.m_renderNamedFlowFragment)
 | 
| -        rareData.m_renderNamedFlowFragment->destroy();
 | 
| -    rareData.m_renderNamedFlowFragment = flowFragment;
 | 
|  }
 | 
|  
 | 
|  RenderBlockFlow::RenderBlockFlowRareData& RenderBlockFlow::ensureRareData()
 | 
| 
 |