| Index: third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp
|
| index 7d2e99ab0ff5b13b2dbe3e9e09aa8b7a078d3ccf..be1c667ecd4b7f118de60f1313eccc175fc36256 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp
|
| @@ -363,9 +363,7 @@ bool LayoutMultiColumnFlowThread::NeedsNewWidth() const {
|
| }
|
|
|
| bool LayoutMultiColumnFlowThread::IsPageLogicalHeightKnown() const {
|
| - if (LayoutMultiColumnSet* column_set = LastMultiColumnSet())
|
| - return column_set->IsPageLogicalHeightKnown();
|
| - return false;
|
| + return all_columns_have_known_height_;
|
| }
|
|
|
| bool LayoutMultiColumnFlowThread::MayHaveNonUniformPageLogicalHeight() const {
|
| @@ -543,6 +541,10 @@ void LayoutMultiColumnFlowThread::LayoutColumns(
|
| }
|
| }
|
|
|
| + // We'll start by assuming that all columns have some known height, and flip
|
| + // it to false if we discover that this isn't the case.
|
| + all_columns_have_known_height_ = true;
|
| +
|
| for (LayoutBox* column_box = FirstMultiColumnBox(); column_box;
|
| column_box = column_box->NextSiblingMultiColumnBox()) {
|
| if (!column_box->IsLayoutMultiColumnSet()) {
|
| @@ -557,6 +559,13 @@ void LayoutMultiColumnFlowThread::LayoutColumns(
|
| // because contents typically have changed.
|
| column_set->ResetColumnHeight();
|
| }
|
| + if (all_columns_have_known_height_ &&
|
| + !column_set->IsPageLogicalHeightKnown()) {
|
| + // If any of the column sets requires a layout pass before it has any
|
| + // clue about its height, we cannot fragment in this pass, just measure
|
| + // the block sizes.
|
| + all_columns_have_known_height_ = false;
|
| + }
|
| // Since column sets are regular block flow objects, and their position is
|
| // changed in regular block layout code (with no means for the multicol code
|
| // to notice unless we add hooks there), store the previous position now. If
|
| @@ -945,6 +954,18 @@ void LayoutMultiColumnFlowThread::SkipColumnSpanner(
|
| }
|
| }
|
|
|
| +bool LayoutMultiColumnFlowThread::FinishLayout() {
|
| + all_columns_have_known_height_ = true;
|
| + for (const auto* column_set = FirstMultiColumnSet(); column_set;
|
| + column_set = column_set->NextSiblingMultiColumnSet()) {
|
| + if (!column_set->IsPageLogicalHeightKnown()) {
|
| + all_columns_have_known_height_ = false;
|
| + break;
|
| + }
|
| + }
|
| + return !ColumnHeightsChanged();
|
| +}
|
| +
|
| // When processing layout objects to remove or when processing layout objects
|
| // that have just been inserted, certain types of objects should be skipped.
|
| static bool ShouldSkipInsertedOrRemovedChild(
|
|
|