Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[getComputedStyle][padding] isLayoutDependent should handle flow rela…
…tive padding values

https://bugs.webkit.org/show_bug.cgi?id=255895

Reviewed by Antti Koivisto.

* LayoutTests/imported/w3c/web-platform-tests/css/css-logical/parsing/padding-block-inline-computed-expected.txt:
* LayoutTests/platform/mac/TestExpectations:
* Source/WebCore/css/ComputedStyleExtractor.cpp:
(WebCore::toPaddingOrMarginPropertyID):
(WebCore::isLayoutDependent):
(WebCore::toMarginPropertyID): Deleted.

Canonical link: https://commits.webkit.org/263391@main
  • Loading branch information
alanbaradlay committed Apr 25, 2023
1 parent 2092e71 commit d280ee7
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 21 deletions.
@@ -1,12 +1,12 @@

PASS Property padding-block-start value '10px'
FAIL Property padding-block-end value '10%' assert_equals: expected "20px" but got "0px"
PASS Property padding-block-end value '10%'
PASS Property padding-inline-start value '30px'
PASS Property padding-inline-end value '1em'
FAIL Property padding-block-start value 'calc(10% + 40px)' assert_equals: expected "60px" but got "40px"
PASS Property padding-block-start value 'calc(10% + 40px)'
PASS Property padding-block-end value 'calc(10% - 40px)'
PASS Property padding-inline-start value 'calc(10% - 40px)'
FAIL Property padding-inline-end value 'calc(10% + 40px)' assert_equals: expected "60px" but got "40px"
PASS Property padding-inline-end value 'calc(10% + 40px)'
PASS Property padding-block-start value 'calc(10px - 0.5em)'
PASS Property padding-block-end value 'calc(10px + 0.5em)'
PASS Property padding-inline-start value 'calc(10px + 0.5em)'
Expand Down
3 changes: 0 additions & 3 deletions LayoutTests/platform/mac/TestExpectations
Expand Up @@ -1725,9 +1725,6 @@ imported/w3c/web-platform-tests/css/css-sizing/percentage-height-in-flexbox.html
# <rdar://problem/61948094>
[ Monterey+ ] imported/w3c/web-platform-tests/dom/events/Event-dispatch-redispatch.html [ Pass Failure ]

# rdar://66841102 ([AS Layout Tests] REGRESSION (r264522): [ MacOS wk1 ] 2 css-logical/parsing tests are a flaky failure)
imported/w3c/web-platform-tests/css/css-logical/parsing/padding-block-inline-computed.html [ Pass Failure ]

# <rdar://problem/62848940> [ Mac Debug ] imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/media_fragment_seek.html is flaky failing.
[ Debug ] imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/media_fragment_seek.html [ Pass Failure ]

Expand Down
47 changes: 32 additions & 15 deletions Source/WebCore/css/ComputedStyleExtractor.cpp
Expand Up @@ -2412,17 +2412,18 @@ static MarginTrimType toMarginTrimType(const RenderBox& renderer, CSSPropertyID
}
}

static CSSPropertyID toMarginPropertyID(FlowRelativeDirection direction, const RenderBox& renderer)
enum class PropertyType : bool { Padding, Margin };
static CSSPropertyID toPaddingOrMarginPropertyID(FlowRelativeDirection direction, const RenderBox& renderer, PropertyType type)
{
switch (flowRelativeToPhysicalDirection(renderer, direction)) {
case PhysicalDirection::Top:
return CSSPropertyMarginTop;
return type == PropertyType::Padding ? CSSPropertyPaddingTop : CSSPropertyMarginTop;
case PhysicalDirection::Right:
return CSSPropertyMarginRight;
return type == PropertyType::Padding ? CSSPropertyPaddingRight : CSSPropertyMarginRight;
case PhysicalDirection::Bottom:
return CSSPropertyMarginBottom;
return type == PropertyType::Padding ? CSSPropertyPaddingBottom : CSSPropertyMarginBottom;
case PhysicalDirection::Left:
return CSSPropertyMarginLeft;
return type == PropertyType::Padding ? CSSPropertyPaddingLeft : CSSPropertyMarginLeft;
default:
ASSERT_NOT_REACHED();
return { };
Expand Down Expand Up @@ -2462,19 +2463,19 @@ static bool isLayoutDependent(CSSPropertyID propertyID, const RenderStyle* style
return isLayoutDependent(CSSPropertyMarginInlineStart, style, renderer) || isLayoutDependent(CSSPropertyMarginInlineEnd, style, renderer);
case CSSPropertyMarginBlockStart:
if (auto* renderBox = dynamicDowncast<RenderBox>(renderer))
return isLayoutDependent(toMarginPropertyID(FlowRelativeDirection::BlockStart, *renderBox), style, renderBox);
return isLayoutDependent(toPaddingOrMarginPropertyID(FlowRelativeDirection::BlockStart, *renderBox, PropertyType::Margin), style, renderBox);
return false;
case CSSPropertyMarginBlockEnd:
if (auto* renderBox = dynamicDowncast<RenderBox>(renderer))
return isLayoutDependent(toMarginPropertyID(FlowRelativeDirection::BlockEnd, *renderBox), style, renderBox);
return isLayoutDependent(toPaddingOrMarginPropertyID(FlowRelativeDirection::BlockEnd, *renderBox, PropertyType::Margin), style, renderBox);
return false;
case CSSPropertyMarginInlineStart:
if (auto* renderBox = dynamicDowncast<RenderBox>(renderer))
return isLayoutDependent(toMarginPropertyID(FlowRelativeDirection::InlineStart, *renderBox), style, renderBox);
return isLayoutDependent(toPaddingOrMarginPropertyID(FlowRelativeDirection::InlineStart, *renderBox, PropertyType::Margin), style, renderBox);
return false;
case CSSPropertyMarginInlineEnd:
if (auto* renderBox = dynamicDowncast<RenderBox>(renderer))
return isLayoutDependent(toMarginPropertyID(FlowRelativeDirection::InlineEnd, *renderBox), style, renderBox);
return isLayoutDependent(toPaddingOrMarginPropertyID(FlowRelativeDirection::InlineEnd, *renderBox, PropertyType::Margin), style, renderBox);
return false;
case CSSPropertyMarginTop:
return paddingOrMarginIsRendererDependent<&RenderStyle::marginTop>(style, renderer) || (is<RenderBox>(renderer) && (rendererCanHaveTrimmedMargin(downcast<RenderBox>(*renderer), MarginTrimType::BlockStart)));
Expand All @@ -2484,12 +2485,28 @@ static bool isLayoutDependent(CSSPropertyID propertyID, const RenderStyle* style
return paddingOrMarginIsRendererDependent<&RenderStyle::marginBottom>(style, renderer) || (is<RenderBox>(renderer) && rendererCanHaveTrimmedMargin(downcast<RenderBox>(*renderer), MarginTrimType::BlockEnd));
case CSSPropertyMarginLeft:
return paddingOrMarginIsRendererDependent<&RenderStyle::marginLeft>(style, renderer) || (is<RenderBox>(renderer) && rendererCanHaveTrimmedMargin(downcast<RenderBox>(*renderer), MarginTrimType::InlineStart));
case CSSPropertyPadding: {
if (!renderer || !renderer->isBox())
return false;
return !(style && style->paddingTop().isFixed() && style->paddingRight().isFixed()
&& style->paddingBottom().isFixed() && style->paddingLeft().isFixed());
}
case CSSPropertyPadding:
return isLayoutDependent(CSSPropertyPaddingBlock, style, renderer) || isLayoutDependent(CSSPropertyPaddingInline, style, renderer);
case CSSPropertyPaddingBlock:
return isLayoutDependent(CSSPropertyPaddingBlockStart, style, renderer) || isLayoutDependent(CSSPropertyPaddingBlockEnd, style, renderer);
case CSSPropertyPaddingInline:
return isLayoutDependent(CSSPropertyPaddingInlineStart, style, renderer) || isLayoutDependent(CSSPropertyPaddingInlineEnd, style, renderer);
case CSSPropertyPaddingBlockStart:
if (auto* renderBox = dynamicDowncast<RenderBox>(renderer))
return isLayoutDependent(toPaddingOrMarginPropertyID(FlowRelativeDirection::BlockStart, *renderBox, PropertyType::Padding), style, renderBox);
return false;
case CSSPropertyPaddingBlockEnd:
if (auto* renderBox = dynamicDowncast<RenderBox>(renderer))
return isLayoutDependent(toPaddingOrMarginPropertyID(FlowRelativeDirection::BlockEnd, *renderBox, PropertyType::Padding), style, renderBox);
return false;
case CSSPropertyPaddingInlineStart:
if (auto* renderBox = dynamicDowncast<RenderBox>(renderer))
return isLayoutDependent(toPaddingOrMarginPropertyID(FlowRelativeDirection::InlineStart, *renderBox, PropertyType::Padding), style, renderBox);
return false;
case CSSPropertyPaddingInlineEnd:
if (auto* renderBox = dynamicDowncast<RenderBox>(renderer))
return isLayoutDependent(toPaddingOrMarginPropertyID(FlowRelativeDirection::InlineEnd, *renderBox, PropertyType::Padding), style, renderBox);
return false;
case CSSPropertyPaddingTop:
return paddingOrMarginIsRendererDependent<&RenderStyle::paddingTop>(style, renderer);
case CSSPropertyPaddingRight:
Expand Down

0 comments on commit d280ee7

Please sign in to comment.