Bug 1797703 - Fix frame constructor save state restoration. r=emilio

Restore the old logic [1] prior to introducing Bug 1797011 Part 2.

[1] https://searchfox.org/mozilla-central/rev/85cbcecd24554c1fa88360412452ad0f7ed48630/layout/base/nsCSSFrameConstructor.cpp#1309-1335
[2] https://hg.mozilla.org/mozilla-central/rev/3f443cbb5bdd

The wpt test is written by Emilio Cobos Álvarez <emilio@crisal.io> in
https://phabricator.services.mozilla.com/D160523.

Differential Revision: https://phabricator.services.mozilla.com/D160600
This commit is contained in:
Emilio Cobos Álvarez
2022-10-28 07:56:50 +00:00
parent e5fd2db948
commit 070ed626ea
3 changed files with 65 additions and 5 deletions

View File

@@ -1313,15 +1313,18 @@ nsFrameConstructorSaveState::~nsFrameConstructorSaveState() {
MOZ_ASSERT(mState, "Can't have mList set without having a state!");
mState->ProcessFrameInsertions(*mList, mChildListID);
if (mSavedFixedPosIsAbsPos) {
MOZ_ASSERT(mList == &mState->mAbsoluteList);
if (mList == &mState->mAbsoluteList) {
mState->mFixedPosIsAbsPos = mSavedFixedPosIsAbsPos;
// mAbsoluteList was moved to mFixedList, so move mFixedList back
// and repair the old mFixedList now.
mState->mAbsoluteList = std::move(mState->mFixedList);
mState->mFixedList = std::move(mSavedList);
if (mSavedFixedPosIsAbsPos) {
mState->mAbsoluteList = std::move(mState->mFixedList);
mState->mFixedList = std::move(mSavedList);
} else {
mState->mAbsoluteList = std::move(mSavedList);
}
} else {
*mList = std::move(mSavedList);
mState->mFloatedList = std::move(mSavedList);
}
MOZ_ASSERT(mSavedList.IsEmpty(),