Add out-of-flow descendants of spanners to their containing blocks in time.

A column spanner isn't laid out as a normal child in the flow thread, since the
flow thread isn't a containing block for spanners. However, out-of-flow
descendants of a spanner may have their containing blocks somewhere outside the
spanner but inside the flow thread, and those have to be laid out as part of
flow thread layout (layoutPositionedObjects() on their containing block).

Therefore we have to add such out-of-flow objects to their respective
containing blocks when skipping spanners, or they'll never get laid out.

We also have to bail from updateBlockChildDirtyBitsBeforeLayout() for
out-of-flow objects, so that they don't get marked when laying out the spanner.
They may already have been laid out at that point (as part of flow thread
layout), in which case we'll never get back to laying them out again if marked
(since we're way past that point in the tree). In any case, it's a pretty
useless thing to mark out-of-flow objects for layout here, since we by doing
that would kind of be assuming that the out-of-flow child has its parent as its
containing block (which may be true, by all means, but not something that
should be taken for granted).

Added a reftest that would assert and probably fail visually too without this
fix.

BUG=498770
R=dsinclair@chromium.org,jchaffraix@chromium.org

Review URL: https://codereview.chromium.org/1181693004

git-svn-id: svn://svn.chromium.org/blink/trunk@197071 bbb929c8-8fbe-4397-9dbb-9b2b20218538
4 files changed