| Index: third_party/WebKit/Source/core/layout/ng/ng_block_node.cc
|
| diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc
|
| index 63861fd8f01e5fce42ae467055b38d8107989d0a..064a88c4db019bf7cd14854220e86b9c83b8b9a8 100644
|
| --- a/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc
|
| +++ b/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc
|
| @@ -14,7 +14,6 @@
|
| #include "core/layout/ng/ng_constraint_space_builder.h"
|
| #include "core/layout/ng/ng_fragment_builder.h"
|
| #include "core/layout/ng/ng_inline_node.h"
|
| -#include "core/layout/ng/ng_layout_coordinator.h"
|
| #include "core/layout/ng/ng_length_utils.h"
|
| #include "core/layout/ng/ng_writing_mode.h"
|
| #include "core/paint/PaintLayer.h"
|
| @@ -40,48 +39,21 @@ NGBlockNode::NGBlockNode(ComputedStyle* style)
|
| // included from a compilation unit that lacks the ComputedStyle definition.
|
| NGBlockNode::~NGBlockNode() {}
|
|
|
| -void NGBlockNode::LayoutSync(NGConstraintSpace* constraint_space,
|
| - NGFragment** out) {
|
| - while (!Layout(constraint_space, out))
|
| - continue;
|
| -}
|
| -
|
| -bool NGBlockNode::Layout(NGConstraintSpace* constraint_space,
|
| - NGFragment** out) {
|
| +NGPhysicalFragment* NGBlockNode::Layout(NGConstraintSpace* constraint_space) {
|
| // We can either use the new layout code to do the layout and then copy the
|
| // resulting size to the LayoutObject, or use the old layout code and
|
| // synthesize a fragment.
|
| if (CanUseNewLayout()) {
|
| - NGPhysicalFragment* fragment;
|
| -
|
| - // Store a coordinator so Layout can preserve its existing semantic
|
| - // of returning false until completed.
|
| - if (!layout_coordinator_)
|
| - layout_coordinator_ = new NGLayoutCoordinator(this, constraint_space);
|
| -
|
| - if (!layout_coordinator_->Tick(&fragment))
|
| - return false;
|
| -
|
| - fragment_ = toNGPhysicalBoxFragment(fragment);
|
| -
|
| - UpdateLayoutBox(fragment_, constraint_space);
|
| + NGLayoutAlgorithm* algorithm =
|
| + NGLayoutInputNode::AlgorithmForInputNode(this, constraint_space);
|
| + fragment_ = toNGPhysicalBoxFragment(algorithm->Layout());
|
| + CopyFragmentDataToLayoutBox(*constraint_space);
|
| } else {
|
| DCHECK(layout_box_);
|
| fragment_ = RunOldLayout(*constraint_space);
|
| }
|
| - *out = new NGBoxFragment(FromPlatformWritingMode(Style()->getWritingMode()),
|
| - Style()->direction(), fragment_.get());
|
| - // Reset coordinator for future use
|
| - layout_coordinator_ = nullptr;
|
| - return true;
|
| -}
|
|
|
| -void NGBlockNode::UpdateLayoutBox(NGPhysicalBoxFragment* fragment,
|
| - const NGConstraintSpace* constraint_space) {
|
| - fragment_ = fragment;
|
| - if (layout_box_) {
|
| - CopyFragmentDataToLayoutBox(*constraint_space);
|
| - }
|
| + return fragment_;
|
| }
|
|
|
| MinAndMaxContentSizes NGBlockNode::ComputeMinAndMaxContentSizesSync() {
|
| @@ -108,8 +80,6 @@ bool NGBlockNode::ComputeMinAndMaxContentSizes(MinAndMaxContentSizes* sizes) {
|
| borderAndPadding;
|
| return true;
|
| }
|
| - DCHECK(!layout_coordinator_)
|
| - << "Can't interleave Layout and ComputeMinAndMaxContentSizes";
|
|
|
| NGConstraintSpace* constraint_space =
|
| NGConstraintSpaceBuilder(
|
| @@ -123,13 +93,8 @@ bool NGBlockNode::ComputeMinAndMaxContentSizes(MinAndMaxContentSizes* sizes) {
|
| if (minmax_algorithm.ComputeMinAndMaxContentSizes(sizes))
|
| return true;
|
|
|
| - NGLayoutCoordinator* minmax_coordinator =
|
| - new NGLayoutCoordinator(this, constraint_space);
|
| -
|
| // Have to synthesize this value.
|
| - NGPhysicalFragment* physical_fragment;
|
| - while (!minmax_coordinator->Tick(&physical_fragment))
|
| - continue;
|
| + NGPhysicalFragment* physical_fragment = Layout(constraint_space);
|
| NGBoxFragment* fragment = new NGBoxFragment(
|
| FromPlatformWritingMode(Style()->getWritingMode()), Style()->direction(),
|
| toNGPhysicalBoxFragment(physical_fragment));
|
| @@ -145,10 +110,7 @@ bool NGBlockNode::ComputeMinAndMaxContentSizes(MinAndMaxContentSizes* sizes) {
|
| .SetPercentageResolutionSize({LayoutUnit(), LayoutUnit()})
|
| .ToConstraintSpace();
|
|
|
| - minmax_coordinator = new NGLayoutCoordinator(this, constraint_space);
|
| - while (!minmax_coordinator->Tick(&physical_fragment))
|
| - continue;
|
| -
|
| + physical_fragment = Layout(constraint_space);
|
| fragment = new NGBoxFragment(
|
| FromPlatformWritingMode(Style()->getWritingMode()), Style()->direction(),
|
| toNGPhysicalBoxFragment(physical_fragment));
|
| @@ -207,7 +169,6 @@ NGBreakToken* NGBlockNode::CurrentBreakToken() const {
|
| }
|
|
|
| DEFINE_TRACE(NGBlockNode) {
|
| - visitor->trace(layout_coordinator_);
|
| visitor->trace(fragment_);
|
| visitor->trace(next_sibling_);
|
| visitor->trace(first_child_);
|
| @@ -259,7 +220,10 @@ bool NGBlockNode::HasInlineChildren() {
|
|
|
| void NGBlockNode::CopyFragmentDataToLayoutBox(
|
| const NGConstraintSpace& constraint_space) {
|
| - DCHECK(layout_box_);
|
| + // We may not have a layout_box_ during unit tests.
|
| + if (!layout_box_)
|
| + return;
|
| +
|
| layout_box_->setWidth(fragment_->Width());
|
| layout_box_->setHeight(fragment_->Height());
|
| NGBoxStrut border_and_padding =
|
|
|