Bug 1865172 Part 1 - Use computed page value on first reflow for all pages that don't have a pushed page name r=dholbert

Differential Revision: https://phabricator.services.mozilla.com/D196895
This commit is contained in:
Emily McDonough
2024-01-18 19:11:00 +00:00
parent 487f85ee8d
commit 6d48e8f2ad
2 changed files with 30 additions and 16 deletions

View File

@@ -2910,17 +2910,21 @@ nsContainerFrame* nsCSSFrameConstructor::ConstructPageFrame(
// of the pages easier and faster.
pageFrame->Init(nullptr, aParentFrame, aPrevPageFrame);
RefPtr<const nsAtom> pageName;
if (mNextPageContentFramePageName) {
pageName = mNextPageContentFramePageName.forget();
} else if (aPrevPageFrame) {
pageName = aPrevPageFrame->ComputePageValue();
MOZ_ASSERT(pageName,
"Page name from prev-in-flow should not have been null");
}
// If we were given a new page name for the next page, we can use it right
// here and avoid computing the page name during reflow.
// This should have the same resulting page name, but avoids traversing the
// frame tree an extra time.
// XXX alaskanemily: this isn't quite true, bug 1872292
RefPtr<const nsAtom> pageName = mNextPageContentFramePageName.forget();
// Ensure the pseudoclass flags are set correctly. Currently, this won't end
// up mattering because we only support none or :first, and
// mNextPageContentFramePageName is always left as null for the first page.
const StylePagePseudoClassFlags pseudoFlags =
aPrevPageFrame ? StylePagePseudoClassFlags::NONE
: StylePagePseudoClassFlags::FIRST;
RefPtr<ComputedStyle> pageContentPseudoStyle =
styleSet->ResolvePageContentStyle(pageName,
StylePagePseudoClassFlags::NONE);
styleSet->ResolvePageContentStyle(pageName, pseudoFlags);
nsContainerFrame* pageContentFrame = NS_NewPageContentFrame(
aPresShell, pageContentPseudoStyle, pageName.forget());