From 0b51e598656827b22aa93874bf5563843c85965d Mon Sep 17 00:00:00 2001 From: Daniel Holbert Date: Tue, 9 Nov 2021 06:14:21 +0000 Subject: [PATCH] Bug 1707643 part 2: When computing static position of abspos grid child, perform alignment within content-box, rather than padding box. r=emilio In the conditions where we hit this partiuclar codepath, the spec used to require us to align within the grid's padding box (which is what we were trying to do[1]), but now it requires us to align within the grid's content box. This patch makes us start passing a bunch of WPT tests (whose .ini files I'm removing here). This patch also changes the reference case for some "last-baseline"-specific tests in the same directory, by cribbing the "alignEnd" rule from the neighboring non-"last-baseline" analog (since "last-baseline" falls back to end alignment and is meant to be equivalent in these testcases). Before this patch, the affected reference cases were inadvertently depending on the Firefox bug that I'm fixing here, and they were expecting the testcase's end-aligned content to be at the wrong position as a result. Chromium developers fixed this issue in the neighboring non-"last-baseline" tests in [2], but they didn't catch the files that I'm fixing here, because Chromium doesn't implement "last baseline" alignment yet. [1] Before this patch, we actually weren't quite aligning within the padding-box, even though we were trying to. We were computing an alignment offset based on the size of the padding box, and then we were using that offset as a position within the *content box*. This could result in us pushing end-aligned content outside the grid entirely, as in the testcase on the bug report for this bug. [2] https://chromium-review.googlesource.com/c/chromium/src/+/2803842 Differential Revision: https://phabricator.services.mozilla.com/D130713 --- layout/generic/nsAbsoluteContainingBlock.cpp | 10 +++++----- .../grid-abspos-staticpos-align-self-002.html.ini | 2 -- .../grid-abspos-staticpos-align-self-rtl-003.html.ini | 2 -- .../grid-abspos-staticpos-align-self-rtl-004.html.ini | 2 -- .../grid-abspos-staticpos-justify-self-002.html.ini | 2 -- ...grid-abspos-staticpos-justify-self-rtl-003.html.ini | 2 -- ...grid-abspos-staticpos-justify-self-rtl-004.html.ini | 2 -- ...staticpos-align-self-img-last-baseline-002-ref.html | 4 ++-- ...pos-staticpos-align-self-last-baseline-002-ref.html | 4 ++-- ...staticpos-align-self-rtl-last-baseline-003-ref.html | 4 ++-- ...staticpos-align-self-rtl-last-baseline-004-ref.html | 4 ++-- ...ticpos-align-self-vertWM-last-baseline-003-ref.html | 4 ++-- ...ticpos-align-self-vertWM-last-baseline-004-ref.html | 4 ++-- ...aticpos-justify-self-img-last-baseline-002-ref.html | 4 ++-- ...s-staticpos-justify-self-last-baseline-002-ref.html | 4 ++-- ...aticpos-justify-self-rtl-last-baseline-003-ref.html | 4 ++-- ...aticpos-justify-self-rtl-last-baseline-004-ref.html | 4 ++-- ...cpos-justify-self-vertWM-last-baseline-003-ref.html | 4 ++-- ...cpos-justify-self-vertWM-last-baseline-004-ref.html | 4 ++-- 19 files changed, 29 insertions(+), 41 deletions(-) delete mode 100644 testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-align-self-002.html.ini delete mode 100644 testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003.html.ini delete mode 100644 testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004.html.ini delete mode 100644 testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002.html.ini delete mode 100644 testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003.html.ini delete mode 100644 testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004.html.ini diff --git a/layout/generic/nsAbsoluteContainingBlock.cpp b/layout/generic/nsAbsoluteContainingBlock.cpp index 8d929202200f..1df649193863 100644 --- a/layout/generic/nsAbsoluteContainingBlock.cpp +++ b/layout/generic/nsAbsoluteContainingBlock.cpp @@ -513,12 +513,12 @@ static nscoord OffsetToAlignedStaticPos(const ReflowInput& aKidReflowInput, // absolute containing block. alignAreaSize = aAbsPosCBSize.ConvertTo(pcWM, aAbsPosCBWM); } else { - // The alignment container is a the grid container's padding box (which - // we can get by subtracting away its border from frame's size): + // The alignment container is a the grid container's content box (which + // we can get by subtracting away its border & padding from frame's size): alignAreaSize = aPlaceholderContainer->GetLogicalSize(pcWM); - LogicalMargin pcBorder = - aPlaceholderContainer->GetLogicalUsedBorder(pcWM); - alignAreaSize -= pcBorder.Size(pcWM); + LogicalMargin pcBorderPadding = + aPlaceholderContainer->GetLogicalUsedBorderAndPadding(pcWM); + alignAreaSize -= pcBorderPadding.Size(pcWM); } } else { NS_ERROR("Unsupported container for abpsos CSS Box Alignment"); diff --git a/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-align-self-002.html.ini b/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-align-self-002.html.ini deleted file mode 100644 index 1702b3f178bd..000000000000 --- a/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-align-self-002.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[grid-abspos-staticpos-align-self-002.html] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003.html.ini b/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003.html.ini deleted file mode 100644 index e72daaeb0af1..000000000000 --- a/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[grid-abspos-staticpos-align-self-rtl-003.html] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004.html.ini b/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004.html.ini deleted file mode 100644 index eabc393b4b7a..000000000000 --- a/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[grid-abspos-staticpos-align-self-rtl-004.html] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002.html.ini b/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002.html.ini deleted file mode 100644 index 6a668517f94e..000000000000 --- a/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[grid-abspos-staticpos-justify-self-002.html] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003.html.ini b/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003.html.ini deleted file mode 100644 index a30b469a35bf..000000000000 --- a/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[grid-abspos-staticpos-justify-self-rtl-003.html] - expected: FAIL diff --git a/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004.html.ini b/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004.html.ini deleted file mode 100644 index 6c4fdbbcc1c4..000000000000 --- a/testing/web-platform/meta/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[grid-abspos-staticpos-justify-self-rtl-004.html] - expected: FAIL diff --git a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-002-ref.html b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-002-ref.html index d8652db12474..f35fb48ce18f 100644 --- a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-002-ref.html +++ b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-002-ref.html @@ -33,8 +33,8 @@ .container > * { display: block; } - .big .alignEnd { margin-top: 26px; } - .small .alignEnd { margin-top: -12px; } + .big .alignEnd { margin-top: 24px; } + .small .alignEnd { margin-top: -14px; } diff --git a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-002-ref.html b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-002-ref.html index f1ca180e8283..d02325817748 100644 --- a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-002-ref.html +++ b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-002-ref.html @@ -34,8 +34,8 @@ height: 6px; width: 8px; } - .big .alignEnd { margin-top: 26px; } - .small .alignEnd { margin-top: -2px; } + .big .alignEnd { margin-top: 24px; } + .small .alignEnd { margin-top: -4px; } diff --git a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-003-ref.html b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-003-ref.html index c6bdec488c6a..61d6d59fdfe3 100644 --- a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-003-ref.html +++ b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-003-ref.html @@ -37,8 +37,8 @@ .big > .container > * { margin-left: 14px; } .small > .container > * { margin-left: -4px; } - .big .alignEnd { margin-top: 26px; } - .small .alignEnd { margin-top: -2px; } + .big .alignEnd { margin-top: 24px; } + .small .alignEnd { margin-top: -4px; } diff --git a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-004-ref.html b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-004-ref.html index c6bdec488c6a..61d6d59fdfe3 100644 --- a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-004-ref.html +++ b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-004-ref.html @@ -37,8 +37,8 @@ .big > .container > * { margin-left: 14px; } .small > .container > * { margin-left: -4px; } - .big .alignEnd { margin-top: 26px; } - .small .alignEnd { margin-top: -2px; } + .big .alignEnd { margin-top: 24px; } + .small .alignEnd { margin-top: -4px; } diff --git a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-003-ref.html b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-003-ref.html index 0623b2d0d857..afa9b43fce3a 100644 --- a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-003-ref.html +++ b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-003-ref.html @@ -35,8 +35,8 @@ width: 6px; height: 8px; } - .big .alignEnd { margin-left: -2px; } - .small .alignEnd { margin-left: -2px; } + .big .alignEnd { margin-left: 0px; } + .small .alignEnd { margin-left: 0px; } diff --git a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-004-ref.html b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-004-ref.html index 0623b2d0d857..afa9b43fce3a 100644 --- a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-004-ref.html +++ b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-004-ref.html @@ -35,8 +35,8 @@ width: 6px; height: 8px; } - .big .alignEnd { margin-left: -2px; } - .small .alignEnd { margin-left: -2px; } + .big .alignEnd { margin-left: 0px; } + .small .alignEnd { margin-left: 0px; } diff --git a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-002-ref.html b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-002-ref.html index bdcd618ebfc0..62c9fe896cd3 100644 --- a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-002-ref.html +++ b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-002-ref.html @@ -33,8 +33,8 @@ .container > * { display: block; } - .big .alignEnd { margin-left: 34px; } - .small .alignEnd { margin-left: -4px; } + .big .alignEnd { margin-left: 32px; } + .small .alignEnd { margin-left: -6px; } diff --git a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-002-ref.html b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-002-ref.html index da33159639a5..299abbae3a5d 100644 --- a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-002-ref.html +++ b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-002-ref.html @@ -35,8 +35,8 @@ width: 6px; height: 8px; } - .big .alignEnd { margin-left: 26px; } - .small .alignEnd { margin-left: -2px; } + .big .alignEnd { margin-left: 24px; } + .small .alignEnd { margin-left: -4px; } diff --git a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-003-ref.html b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-003-ref.html index 5f0f6b77fe7b..c70533d399ce 100644 --- a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-003-ref.html +++ b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-003-ref.html @@ -35,8 +35,8 @@ width: 6px; height: 8px; } - .big .alignEnd { margin-left: -2px; } - .small .alignEnd { margin-left: -2px; } + .big .alignEnd { margin-left: 0px; } + .small .alignEnd { margin-left: 0px; } diff --git a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-004-ref.html b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-004-ref.html index 5f0f6b77fe7b..c70533d399ce 100644 --- a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-004-ref.html +++ b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-004-ref.html @@ -35,8 +35,8 @@ width: 6px; height: 8px; } - .big .alignEnd { margin-left: -2px; } - .small .alignEnd { margin-left: -2px; } + .big .alignEnd { margin-left: 0px; } + .small .alignEnd { margin-left: 0px; } diff --git a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-003-ref.html b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-003-ref.html index b82a570fb8e5..83b9391ef317 100644 --- a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-003-ref.html +++ b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-003-ref.html @@ -37,8 +37,8 @@ .big > .container > * { margin-left: 14px; } .small > .container > * { margin-left: -4px; } - .big .alignEnd { margin-top: 26px; } - .small .alignEnd { margin-top: -2px; } + .big .alignEnd { margin-top: 24px; } + .small .alignEnd { margin-top: -4px; } diff --git a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-004-ref.html b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-004-ref.html index b82a570fb8e5..83b9391ef317 100644 --- a/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-004-ref.html +++ b/testing/web-platform/tests/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-004-ref.html @@ -37,8 +37,8 @@ .big > .container > * { margin-left: 14px; } .small > .container > * { margin-left: -4px; } - .big .alignEnd { margin-top: 26px; } - .small .alignEnd { margin-top: -2px; } + .big .alignEnd { margin-top: 24px; } + .small .alignEnd { margin-top: -4px; }