| Index: third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc
|
| diff --git a/third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc b/third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc
|
| index 0802881f942ed8a23e142a024c152a2aa48e22c4..05b27372202237feb552162bb1cdd34e43db7caa 100644
|
| --- a/third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc
|
| +++ b/third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc
|
| @@ -5,6 +5,7 @@
|
| #include "core/layout/ng/ng_length_utils.h"
|
|
|
| #include "core/layout/ng/ng_constraint_space.h"
|
| +#include "core/layout/ng/ng_constraint_space_builder.h"
|
| #include "core/layout/ng/ng_fragment_base.h"
|
| #include "core/style/ComputedStyle.h"
|
| #include "platform/LayoutUnit.h"
|
| @@ -28,6 +29,11 @@ bool NeedMinAndMaxContentSizes(const ComputedStyle& style) {
|
| style.logicalMaxWidth().isIntrinsic();
|
| }
|
|
|
| +bool NeedMinAndMaxContentSizesForContentContribution(
|
| + const ComputedStyle& style) {
|
| + return NeedMinAndMaxContentSizes(style) || style.logicalWidth().isAuto();
|
| +}
|
| +
|
| LayoutUnit ResolveInlineLength(
|
| const NGConstraintSpace& constraint_space,
|
| const ComputedStyle& style,
|
| @@ -175,6 +181,52 @@ LayoutUnit ResolveBlockLength(const NGConstraintSpace& constraint_space,
|
| }
|
| }
|
|
|
| +MinAndMaxContentSizes ComputeMinAndMaxContentContribution(
|
| + const ComputedStyle& style,
|
| + const WTF::Optional<MinAndMaxContentSizes>& min_and_max) {
|
| + // Synthesize a zero-sized constraint space for passing to
|
| + // ResolveInlineLength.
|
| + NGWritingMode writing_mode = FromPlatformWritingMode(style.getWritingMode());
|
| + NGConstraintSpaceBuilder builder(writing_mode);
|
| + NGConstraintSpace* space = builder.ToConstraintSpace();
|
| +
|
| + MinAndMaxContentSizes computed_sizes;
|
| + Length inline_size = style.logicalWidth();
|
| + if (inline_size.isAuto()) {
|
| + CHECK(min_and_max.has_value());
|
| + NGBoxStrut border_and_padding =
|
| + ComputeBorders(style) + ComputePadding(*space, style);
|
| + computed_sizes.min_content =
|
| + min_and_max->min_content + border_and_padding.InlineSum();
|
| + computed_sizes.max_content =
|
| + min_and_max->max_content + border_and_padding.InlineSum();
|
| + } else {
|
| + computed_sizes.min_content = computed_sizes.max_content =
|
| + ResolveInlineLength(*space, style, min_and_max, inline_size,
|
| + LengthResolveType::kContentSize);
|
| + }
|
| +
|
| + Length max_length = style.logicalMaxWidth();
|
| + if (!max_length.isMaxSizeNone()) {
|
| + LayoutUnit max = ResolveInlineLength(*space, style, min_and_max, max_length,
|
| + LengthResolveType::kMaxSize);
|
| + computed_sizes.min_content = std::min(computed_sizes.min_content, max);
|
| + computed_sizes.max_content = std::min(computed_sizes.max_content, max);
|
| + }
|
| +
|
| + LayoutUnit min =
|
| + ResolveInlineLength(*space, style, min_and_max, style.logicalMinWidth(),
|
| + LengthResolveType::kMinSize);
|
| + computed_sizes.min_content = std::max(computed_sizes.min_content, min);
|
| + computed_sizes.max_content = std::max(computed_sizes.max_content, min);
|
| +
|
| + NGBoxStrut margins =
|
| + ComputeMargins(*space, style, writing_mode, style.direction());
|
| + computed_sizes.min_content += margins.InlineSum();
|
| + computed_sizes.max_content += margins.InlineSum();
|
| + return computed_sizes;
|
| +}
|
| +
|
| LayoutUnit ComputeInlineSizeForFragment(
|
| const NGConstraintSpace& space,
|
| const ComputedStyle& style,
|
|
|