Skip to content

Commit fe9df17

Browse files
theres-waldobballo@mozilla.com
authored andcommitted
Bug 2000121 - Ensure that a fixed item's scroll target ASR is always ASRKind::Scroll. r=mstange
Differential Revision: https://phabricator.services.mozilla.com/D272700
1 parent c48029d commit fe9df17

File tree

5 files changed

+22
-3
lines changed

5 files changed

+22
-3
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<style>
2+
dialog {
3+
position: sticky;
4+
background: url(#x) fixed;
5+
}
6+
</style>
7+
<dialog open="true">

layout/base/crashtests/crashtests.list

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,3 +567,4 @@ load 1849898-1.html
567567
load 1929445.html
568568
asserts(1-3) load 1931933.html
569569
load 1984507.html
570+
load 2000121.html

layout/generic/nsCanvasFrame.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,9 +347,11 @@ void nsCanvasFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
347347
}
348348
}
349349
if (bgItem) {
350+
const ActiveScrolledRoot* scrollTargetASR =
351+
asr ? asr->GetNearestScrollASR() : nullptr;
350352
thisItemList.AppendToTop(
351353
nsDisplayFixedPosition::CreateForFixedBackground(
352-
aBuilder, this, nullptr, bgItem, i, asr));
354+
aBuilder, this, nullptr, bgItem, i, scrollTargetASR));
353355
}
354356

355357
} else {

layout/generic/nsIFrame.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3905,9 +3905,11 @@ void nsIFrame::BuildDisplayListForStackingContext(
39053905
// item as well.
39063906
const ActiveScrolledRoot* fixedASR = ActiveScrolledRoot::PickAncestor(
39073907
containerItemASR, aBuilder->CurrentActiveScrolledRoot());
3908+
const ActiveScrolledRoot* scrollTargetASR =
3909+
containerItemASR ? containerItemASR->GetNearestScrollASR() : nullptr;
39083910
resultList.AppendNewToTop<nsDisplayFixedPosition>(
39093911
aBuilder, this, &resultList, fixedASR,
3910-
nsDisplayItem::ContainerASRType::AncestorOfContained, containerItemASR,
3912+
nsDisplayItem::ContainerASRType::AncestorOfContained, scrollTargetASR,
39113913
ShouldForceIsolation());
39123914
createdContainer = true;
39133915
} else if (useStickyPosition && !capturedByViewTransition) {

layout/painting/nsDisplayList.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3456,9 +3456,12 @@ AppendedBackgroundType nsDisplayBackgroundImage::AppendBackgroundItemsToTop(
34563456
aSecondaryReferenceFrame, bgData);
34573457
}
34583458
if (bgItem) {
3459+
const ActiveScrolledRoot* scrollTargetASR =
3460+
asr ? asr->GetNearestScrollASR() : nullptr;
34593461
thisItemList.AppendToTop(
34603462
nsDisplayFixedPosition::CreateForFixedBackground(
3461-
aBuilder, aFrame, aSecondaryReferenceFrame, bgItem, i, asr));
3463+
aBuilder, aFrame, aSecondaryReferenceFrame, bgItem, i,
3464+
scrollTargetASR));
34623465
}
34633466
} else { // bgData.shouldFixToViewport == false
34643467
nsDisplayBackgroundImage* bgItem = CreateBackgroundImage(
@@ -5733,6 +5736,8 @@ nsDisplayFixedPosition::nsDisplayFixedPosition(
57335736
mIsFixedBackground(false),
57345737
mForceIsolation(aForceIsolation) {
57355738
MOZ_COUNT_CTOR(nsDisplayFixedPosition);
5739+
MOZ_ASSERT_IF(mScrollTargetASR,
5740+
mScrollTargetASR->mKind == ActiveScrolledRoot::ASRKind::Scroll);
57365741
}
57375742

57385743
nsDisplayFixedPosition::nsDisplayFixedPosition(
@@ -5746,6 +5751,8 @@ nsDisplayFixedPosition::nsDisplayFixedPosition(
57465751
mIsFixedBackground(true),
57475752
mForceIsolation(false) {
57485753
MOZ_COUNT_CTOR(nsDisplayFixedPosition);
5754+
MOZ_ASSERT_IF(mScrollTargetASR,
5755+
mScrollTargetASR->mKind == ActiveScrolledRoot::ASRKind::Scroll);
57495756
}
57505757

57515758
ScrollableLayerGuid::ViewID nsDisplayFixedPosition::GetScrollTargetId() const {

0 commit comments

Comments
 (0)