mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Fix a “Accessing content size that was not requested” panic
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”
This commit is contained in:
parent
a17db217a1
commit
53ce714005
4 changed files with 8 additions and 8 deletions
|
@ -393,7 +393,7 @@ where
|
||||||
style.clone(),
|
style.clone(),
|
||||||
display_inside,
|
display_inside,
|
||||||
contents,
|
contents,
|
||||||
ContentSizesRequest::inline_if(style.inline_size_is_auto()),
|
ContentSizesRequest::inline_if(!style.inline_size_is_length()),
|
||||||
),
|
),
|
||||||
))
|
))
|
||||||
};
|
};
|
||||||
|
@ -590,7 +590,7 @@ where
|
||||||
&style,
|
&style,
|
||||||
ContentSizesRequest::inline_if(
|
ContentSizesRequest::inline_if(
|
||||||
max_assign_in_flow_outer_content_sizes_to.is_some() &&
|
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 {
|
if let Some(to) = max_assign_in_flow_outer_content_sizes_to {
|
||||||
|
@ -607,7 +607,7 @@ where
|
||||||
} => {
|
} => {
|
||||||
let content_sizes = ContentSizesRequest::inline_if(
|
let content_sizes = ContentSizesRequest::inline_if(
|
||||||
max_assign_in_flow_outer_content_sizes_to.is_some() &&
|
max_assign_in_flow_outer_content_sizes_to.is_some() &&
|
||||||
style.inline_size_is_auto(),
|
!style.inline_size_is_length(),
|
||||||
);
|
);
|
||||||
let contents = IndependentFormattingContext::construct(
|
let contents = IndependentFormattingContext::construct(
|
||||||
context,
|
context,
|
||||||
|
|
|
@ -33,7 +33,7 @@ impl FloatBox {
|
||||||
display_inside: DisplayInside,
|
display_inside: DisplayInside,
|
||||||
contents: Contents<impl NodeExt<'dom>>,
|
contents: Contents<impl NodeExt<'dom>>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let content_sizes = ContentSizesRequest::inline_if(style.inline_size_is_auto());
|
let content_sizes = ContentSizesRequest::inline_if(!style.inline_size_is_length());
|
||||||
Self {
|
Self {
|
||||||
contents: IndependentFormattingContext::construct(
|
contents: IndependentFormattingContext::construct(
|
||||||
context,
|
context,
|
||||||
|
|
|
@ -60,7 +60,7 @@ impl AbsolutelyPositionedBox {
|
||||||
// "Shrink-to-fit" in https://drafts.csswg.org/css2/visudet.html#abs-non-replaced-width
|
// "Shrink-to-fit" in https://drafts.csswg.org/css2/visudet.html#abs-non-replaced-width
|
||||||
let content_sizes = ContentSizesRequest::inline_if(
|
let content_sizes = ContentSizesRequest::inline_if(
|
||||||
// If inline-size is non-auto, that value is used without shrink-to-fit
|
// 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 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
|
// if both offsets are non-auto, leaving inline-size as the only variable
|
||||||
// in the constraint equation.
|
// in the constraint equation.
|
||||||
|
|
|
@ -40,7 +40,7 @@ pub(crate) enum DisplayInside {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) trait ComputedValuesExt {
|
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 inline_box_offsets_are_both_non_auto(&self) -> bool;
|
||||||
fn box_offsets(&self) -> flow_relative::Sides<LengthPercentageOrAuto>;
|
fn box_offsets(&self) -> flow_relative::Sides<LengthPercentageOrAuto>;
|
||||||
fn box_size(&self) -> flow_relative::Vec2<LengthPercentageOrAuto>;
|
fn box_size(&self) -> flow_relative::Vec2<LengthPercentageOrAuto>;
|
||||||
|
@ -52,14 +52,14 @@ pub(crate) trait ComputedValuesExt {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ComputedValuesExt for ComputedValues {
|
impl ComputedValuesExt for ComputedValues {
|
||||||
fn inline_size_is_auto(&self) -> bool {
|
fn inline_size_is_length(&self) -> bool {
|
||||||
let position = self.get_position();
|
let position = self.get_position();
|
||||||
let size = if self.writing_mode.is_horizontal() {
|
let size = if self.writing_mode.is_horizontal() {
|
||||||
position.width
|
position.width
|
||||||
} else {
|
} else {
|
||||||
position.height
|
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 {
|
fn inline_box_offsets_are_both_non_auto(&self) -> bool {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue