| Index: third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc
|
| diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc
|
| index 24ec11459275cba7c3080c5c31a4fd5e59c7a85d..1f126b242f35a5842d0064cf22eb60e3df9bdf8f 100644
|
| --- a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc
|
| +++ b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc
|
| @@ -28,12 +28,12 @@ LayoutUnit ComputeCollapsedMarginBlockStart(
|
| // Creates an exclusion from the fragment that will be placed in the provided
|
| // layout opportunity.
|
| NGExclusion* CreateExclusion(const NGFragment& fragment,
|
| - const NGConstraintSpace* opportunity,
|
| + const NGLayoutOpportunity& opportunity,
|
| LayoutUnit float_offset,
|
| NGBoxStrut margins) {
|
| - LayoutUnit exclusion_top = opportunity->Offset().block_offset;
|
| + LayoutUnit exclusion_top = opportunity.offset.block_offset;
|
|
|
| - LayoutUnit exclusion_left = opportunity->Offset().inline_offset;
|
| + LayoutUnit exclusion_left = opportunity.offset.inline_offset;
|
| exclusion_left += float_offset;
|
|
|
| LayoutUnit exclusion_bottom = exclusion_top + fragment.BlockSize();
|
| @@ -56,25 +56,29 @@ NGExclusion* CreateExclusion(const NGFragment& fragment,
|
| // the fragment.
|
| // @param fragment Fragment that needs to be placed.
|
| // @return Layout opportunity for the fragment.
|
| -const NGConstraintSpace* FindLayoutOpportunityForFragment(
|
| +const NGLayoutOpportunity FindLayoutOpportunityForFragment(
|
| const Member<NGConstraintSpace>& space,
|
| const NGFragment& fragment) {
|
| NGLayoutOpportunityIterator* opportunity_iter = space->LayoutOpportunities();
|
| - const NGConstraintSpace* opportunity = nullptr;
|
| - while (const NGConstraintSpace* opportunity_candidate =
|
| - opportunity_iter->Next()) {
|
| + NGLayoutOpportunity opportunity;
|
| + NGLayoutOpportunity opportunity_candidate = opportunity_iter->Next();
|
| +
|
| + while (!opportunity_candidate.IsEmpty()) {
|
| opportunity = opportunity_candidate;
|
| // Checking opportunity's block size is not necessary as a float cannot be
|
| // positioned on top of another float inside of the same constraint space.
|
| - if (opportunity->Size().inline_size > fragment.InlineSize())
|
| + if (opportunity.size.inline_size > fragment.InlineSize())
|
| break;
|
| +
|
| + opportunity_candidate = opportunity_iter->Next();
|
| }
|
| +
|
| return opportunity;
|
| }
|
|
|
| // Calculates the logical offset for opportunity.
|
| NGLogicalOffset CalculateLogicalOffsetForOpportunity(
|
| - const NGConstraintSpace* opportunity,
|
| + const NGLayoutOpportunity& opportunity,
|
| NGBoxStrut border_padding,
|
| LayoutUnit float_offset,
|
| NGBoxStrut margins) {
|
| @@ -89,8 +93,8 @@ NGLogicalOffset CalculateLogicalOffsetForOpportunity(
|
| block_offset += margins.block_start;
|
|
|
| // Offset from the opportunity's block/inline start.
|
| - inline_offset += opportunity->Offset().inline_offset;
|
| - block_offset += opportunity->Offset().block_offset;
|
| + inline_offset += opportunity.offset.inline_offset;
|
| + block_offset += opportunity.offset.block_offset;
|
|
|
| inline_offset += float_offset;
|
|
|
| @@ -323,14 +327,14 @@ NGLogicalOffset NGBlockLayoutAlgorithm::PositionFloatFragment(
|
| NGBoxStrut margins) {
|
| // TODO(glebl@chromium.org): Support the top edge alignment rule.
|
| // Find a layout opportunity that will fit our float.
|
| - const NGConstraintSpace* opportunity = FindLayoutOpportunityForFragment(
|
| + const NGLayoutOpportunity opportunity = FindLayoutOpportunityForFragment(
|
| constraint_space_for_children_, fragment);
|
| - DCHECK(opportunity) << "Opportunity is NULL but it shouldn't be";
|
| + DCHECK(!opportunity.IsEmpty()) << "Opportunity is empty but it shouldn't be";
|
|
|
| // Calculate the float offset if needed.
|
| LayoutUnit float_offset;
|
| if (current_child_->Style()->floating() == EFloat::Right) {
|
| - float_offset = opportunity->Size().inline_size - fragment.InlineSize();
|
| + float_offset = opportunity.size.inline_size - fragment.InlineSize();
|
| }
|
|
|
| // Add the float as an exclusion.
|
|
|