Skip to content

Commit

Permalink
Fix a “Accessing content size that was not requested” panic
Browse files Browse the repository at this point in the history
Percentage `width` are treated as `auto` for the purpose of
min/max-content computation, so they also need to be considered
when testing “wether width is auto”
  • Loading branch information
SimonSapin committed Dec 10, 2019
1 parent a17db21 commit 53ce714
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 8 deletions.
6 changes: 3 additions & 3 deletions components/layout_2020/flow/construct.rs
Expand Up @@ -393,7 +393,7 @@ where
style.clone(),
display_inside,
contents,
ContentSizesRequest::inline_if(style.inline_size_is_auto()),
ContentSizesRequest::inline_if(!style.inline_size_is_length()),
),
))
};
Expand Down Expand Up @@ -590,7 +590,7 @@ where
&style,
ContentSizesRequest::inline_if(
max_assign_in_flow_outer_content_sizes_to.is_some() &&
style.inline_size_is_auto(),
!style.inline_size_is_length(),
),
);
if let Some(to) = max_assign_in_flow_outer_content_sizes_to {
Expand All @@ -607,7 +607,7 @@ where
} => {
let content_sizes = ContentSizesRequest::inline_if(
max_assign_in_flow_outer_content_sizes_to.is_some() &&
style.inline_size_is_auto(),
!style.inline_size_is_length(),
);
let contents = IndependentFormattingContext::construct(
context,
Expand Down
2 changes: 1 addition & 1 deletion components/layout_2020/flow/float.rs
Expand Up @@ -33,7 +33,7 @@ impl FloatBox {
display_inside: DisplayInside,
contents: Contents<impl NodeExt<'dom>>,
) -> Self {
let content_sizes = ContentSizesRequest::inline_if(style.inline_size_is_auto());
let content_sizes = ContentSizesRequest::inline_if(!style.inline_size_is_length());
Self {
contents: IndependentFormattingContext::construct(
context,
Expand Down
2 changes: 1 addition & 1 deletion components/layout_2020/positioned.rs
Expand Up @@ -60,7 +60,7 @@ impl AbsolutelyPositionedBox {
// "Shrink-to-fit" in https://drafts.csswg.org/css2/visudet.html#abs-non-replaced-width
let content_sizes = ContentSizesRequest::inline_if(
// If inline-size is non-auto, that value is used without shrink-to-fit
style.inline_size_is_auto() &&
!style.inline_size_is_length() &&
// If it is, then the only case where shrink-to-fit is *not* used is
// if both offsets are non-auto, leaving inline-size as the only variable
// in the constraint equation.
Expand Down
6 changes: 3 additions & 3 deletions components/layout_2020/style_ext.rs
Expand Up @@ -40,7 +40,7 @@ pub(crate) enum DisplayInside {
}

pub(crate) trait ComputedValuesExt {
fn inline_size_is_auto(&self) -> bool;
fn inline_size_is_length(&self) -> bool;
fn inline_box_offsets_are_both_non_auto(&self) -> bool;
fn box_offsets(&self) -> flow_relative::Sides<LengthPercentageOrAuto>;
fn box_size(&self) -> flow_relative::Vec2<LengthPercentageOrAuto>;
Expand All @@ -52,14 +52,14 @@ pub(crate) trait ComputedValuesExt {
}

impl ComputedValuesExt for ComputedValues {
fn inline_size_is_auto(&self) -> bool {
fn inline_size_is_length(&self) -> bool {
let position = self.get_position();
let size = if self.writing_mode.is_horizontal() {
position.width
} else {
position.height
};
size == Size::Auto
matches!(size, Size::LengthPercentage(lp) if lp.0.as_length().is_some())
}

fn inline_box_offsets_are_both_non_auto(&self) -> bool {
Expand Down

0 comments on commit 53ce714

Please sign in to comment.